redis集群的搭建:html
下面咱们来进行学习下redis3.2.4如何搭建集群。node
集权配置:至少三个mastergit
第一步:建立一个文件夹redis-cluster,而后在其下面分别建立6个文件以下:redis
(1)mkdir -p /usr/local/redis-clustersql
(2)mkdir 700一、mkdir 700二、mkdir 700三、mkdir 700四、mkdir 700五、mkdir 7006vim
第二步:把以前的redis.conf配置文件分别copy到700*下,进行修改各个文件内存,也就是对700*下的每个copy的redis.conf文件进行修改!以下:api
(1)daemonize yesruby
(2)port 700*(分别对每一个机器的端口进行设置)app
(3)bind 192.168.1.171(必需要绑定当前机器的ip,否则会无限悲剧下去啊,深坑勿入!!!)nosql
(4)dir /usr/local/redis-cluster/700*/(指定数据文件存放位置,必需要指定不一样的目录位置,否则会丢失数据,深坑勿入!!!)
(5)cluster-enabled yes(启动集群模式,开始玩耍)
(6)cluster-config-file nodes700*.conf(这里700x最好和port对应上)
(7)cluster-node-timeout 5000
(8)appendonly yes
(9)requirepass 123456(设置redis链接密码,全部的配置文件的密码是同样的,感受在集群前配置密码是否是更好一点???这里暂时看成一个遗留问题吧)
第三步:把修改后的配置文件,分别copy到各个文件夹下,注意每一个文件要修改端口号,而且nodes文件也要不相同!!
vi下全局替换:%s/7001/7002/g 全局替换7001成7002
第四步:因为redis集群须要使用ruby命令,因此咱们须要安装ruby
(1) yum install ruby
(2)yum install rubygems
(3)gem install redis(安装redis和ruby的接口)
第五步:分别启动6个redis实例,而后检查是否启动成功
(1)/usr/local/redis/bin/redis-server /usr/local/redis-cluster/700*/redis.conf
(2)ps -el | grep redis 查看是否启动成功
第六步:首先到redis3.0的安装目录下,而后执行redis-trib.rb指令
(1)cd /usr/local/redis3.0/src
(2)./redis-trib.rb create --replicas 1 192.168.1.171:7001 192.168.1.171:7002 192.168.1.171:7003 192.168.1.171:7004 192.168.1.171:7005 192.168.1.171:7006
其中
create 表示 建立集群的意思;
1 表示主节点与从节点的比例,这里是1,也就是说6台redis服务,有3台是主节点,3台是从节点;
执行输出打印信息:
1 >>> Creating cluster 2 >>> Performing hash slots allocation on 6 nodes... 3 Using 3 masters: 4 192.168.1.171:7001 5 192.168.1.171:7002 6 192.168.1.171:7003 7 Adding replica 192.168.1.171:7004 to 192.168.1.171:7001 8 Adding replica 192.168.1.171:7005 to 192.168.1.171:7002 9 Adding replica 192.168.1.171:7006 to 192.168.1.171:7003 10 M: 201503eb5f050814a56ae6a5c8623a0bf774fd0f 192.168.1.171:7001 11 slots:0-5460 (5461 slots) master 12 M: 18cbda8addae41f73c184cfd67e26414184a5498 192.168.1.171:7002 13 slots:5461-10922 (5462 slots) master 14 M: d4a9a5b02611b4d8e7e4150f485b966f7de1c26b 192.168.1.171:7003 15 slots:10923-16383 (5461 slots) master 16 S: 91a6d479718ca5a23bdb007f6f55088e0d979707 192.168.1.171:7004 17 replicates 201503eb5f050814a56ae6a5c8623a0bf774fd0f 18 S: e014b1f935c0fc4ee0860b4e2200c960619e1fa6 192.168.1.171:7005 19 replicates 18cbda8addae41f73c184cfd67e26414184a5498 20 S: 1dfc3c8f170506216ecf3b53841d681e07f3c81e 192.168.1.171:7006 21 replicates d4a9a5b02611b4d8e7e4150f485b966f7de1c26b 22 Can I set the above configuration? (type 'yes' to accept):
从输出结果来看,从节点没有"槽",由于从节点没有写权限
注意事项:
1.若是是使用redis-trib.rb工具构建集群,集群构建完成前不要配置密码,集群构建完毕再经过config set + config rewrite命令逐个机器设置密码
2.若是对集群设置密码,那么requirepass和masterauth都须要设置,不然发生主从切换时,就会遇到受权问题,能够模拟并观察日志
3.各个节点的密码都必须一致,不然Redirected就会失败
1 config set masterauth 123456 2 config set requirepass 123456 3 config rewrite
设置密码后,redis-trib.rb check 192.168.1.171:7001 报错链接不上实例,解决方法:
vim /usr/lib/ruby/gems/1.8/gems/redis-3.3.3/lib/redis/client.rb
1 class Redis 2 class Client 3 4 DEFAULTS = { 5 :url => lambda { ENV["REDIS_URL"] }, 6 :scheme => "redis", 7 :host => "127.0.0.1", 8 :port => 6379, 9 :path => nil, 10 :timeout => 5.0, 11 :password => nil, 12 :db => 0, 13 :driver => nil, 14 :id => nil, 15 :tcp_keepalive => 0, 16 :reconnect_attempts => 1, 17 :inherit_socket => false 18 }
修改下默认密码就能够了,好比:password => "123456",
第七步:到此为止咱们集群搭建成功!进行验证:
(1)链接任意一个客户端便可:./redis-cli -c -h -p(-c表示集群模式,指定ip地址和端口号)如:/usr/local/redis -c -h 192.168.1.171 -p 700*
(2)进行验证:cluster info(查看集群信息)、cluster nodes(查看节点列表)
(3)进行数据操做验证
(4)关闭集群则须要逐个进行关闭,使用命令:
/usr/local/redis/bin/redis-cli -c -h 192.168.171 -p 700* shutdown
链接192.168.1.171:7001,输入info,查看主从信息以下:
1 [root@iZ11wt0u6kbZ yucong]# /usr/local/redis/bin/redis-cli -c -h 192.168.1.171 -p 7001 2 192.168.1.171:7001> info 3 # Server 4 redis_version:3.2.4 5 redis_git_sha1:00000000 6 redis_git_dirty:0 7 redis_build_id:6b401482e8c31daa 8 redis_mode:cluster 9 os:Linux 2.6.32-573.7.1.el6.x86_64 x86_64 10 arch_bits:64 11 multiplexing_api:epoll 12 gcc_version:4.4.7 13 process_id:20352 14 run_id:057db549bba87f39bdf7e2a9483cf3ecc6b49867 15 tcp_port:7001 16 uptime_in_seconds:3722 17 uptime_in_days:0 18 hz:10 19 lru_clock:9975830 20 executable:/usr/local/redis/bin/redis-server 21 config_file:/usr/local/redis-cluster/7001/redis.conf 22 23 # Clients 24 connected_clients:1 25 client_longest_output_list:0 26 client_biggest_input_buf:0 27 blocked_clients:0 28 29 # Memory 30 used_memory:2418328 31 used_memory_human:2.31M 32 used_memory_rss:10010624 33 used_memory_rss_human:9.55M 34 used_memory_peak:2521056 35 used_memory_peak_human:2.40M 36 total_system_memory:4018704384 37 total_system_memory_human:3.74G 38 used_memory_lua:37888 39 used_memory_lua_human:37.00K 40 maxmemory:0 41 maxmemory_human:0B 42 maxmemory_policy:noeviction 43 mem_fragmentation_ratio:4.14 44 mem_allocator:jemalloc-4.0.3 45 46 # Persistence 47 loading:0 48 rdb_changes_since_last_save:0 49 rdb_bgsave_in_progress:0 50 rdb_last_save_time:1486367331 51 rdb_last_bgsave_status:ok 52 rdb_last_bgsave_time_sec:0 53 rdb_current_bgsave_time_sec:-1 54 aof_enabled:1 55 aof_rewrite_in_progress:0 56 aof_rewrite_scheduled:0 57 aof_last_rewrite_time_sec:-1 58 aof_current_rewrite_time_sec:-1 59 aof_last_bgrewrite_status:ok 60 aof_last_write_status:ok 61 aof_current_size:0 62 aof_base_size:0 63 aof_pending_rewrite:0 64 aof_buffer_length:0 65 aof_rewrite_buffer_length:0 66 aof_pending_bio_fsync:0 67 aof_delayed_fsync:0 68 69 # Stats 70 total_connections_received:8 71 total_commands_processed:3539 72 instantaneous_ops_per_sec:1 73 total_net_input_bytes:183131 74 total_net_output_bytes:5986856 75 instantaneous_input_kbps:0.04 76 instantaneous_output_kbps:0.00 77 rejected_connections:0 78 sync_full:1 79 sync_partial_ok:0 80 sync_partial_err:0 81 expired_keys:0 82 evicted_keys:0 83 keyspace_hits:0 84 keyspace_misses:0 85 pubsub_channels:0 86 pubsub_patterns:0 87 latest_fork_usec:722 88 migrate_cached_sockets:0 89 90 # Replication 91 role:master 92 connected_slaves:1 93 slave0:ip=192.168.1.171,port=7004,state=online,offset=4901,lag=0 94 master_repl_offset:4901 95 repl_backlog_active:1 96 repl_backlog_size:1048576 97 repl_backlog_first_byte_offset:2 98 repl_backlog_histlen:4900 99 100 # CPU 101 used_cpu_sys:2.21 102 used_cpu_user:1.65 103 used_cpu_sys_children:0.00 104 used_cpu_user_children:0.00 105 106 # Cluster 107 cluster_enabled:1 108 109 # Keyspace 110 192.168.1.171:7001>
再输入cluster nodes,查看集权信息以下:
1 192.168.1.171:7001> cluster nodes 2 d4a9a5b02611b4d8e7e4150f485b966f7de1c26b 192.168.1.171:7003 master - 0 1486371253432 3 connected 10923-16383 3 e014b1f935c0fc4ee0860b4e2200c960619e1fa6 192.168.1.171:7005 slave 18cbda8addae41f73c184cfd67e26414184a5498 0 1486371254934 2 connected 4 91a6d479718ca5a23bdb007f6f55088e0d979707 192.168.1.171:7004 slave 201503eb5f050814a56ae6a5c8623a0bf774fd0f 0 1486371252931 4 connected 5 201503eb5f050814a56ae6a5c8623a0bf774fd0f 192.168.1.171:7001 myself,master - 0 0 1 connected 0-5460 6 1dfc3c8f170506216ecf3b53841d681e07f3c81e 192.168.1.171:7006 slave d4a9a5b02611b4d8e7e4150f485b966f7de1c26b 0 1486371253932 6 connected 7 18cbda8addae41f73c184cfd67e26414184a5498 192.168.1.171:7002 master - 0 1486371253932 2 connected 5461-10922 8 192.168.1.171:7001>
第八步:(补充)
友情提示:当出现集群没法启动时,删除临时的数据文件,再次从新启动每个redis服务,而后从新构造集权环境。
redis-trib.rb官方群操做命令:http://redis.io/topics/cluster-tutorial
推荐博客:http://blog.51yip.com/nosql/1726.html/comment-page-1
redis-cli客户端操做命令:
http://blog.csdn.net/qachenzude/article/details/32098777