Redis集群
一、简况 一台虚拟机,六个redis实例,三主三从,版本号:redis-3.2.9.tar.gz二、安装流程
1.上传redis-3.2.9.tar.gz到虚拟机目录:/opt/software
2.直接解压redis-3.2.9.tar.gz
tar -zxvf redis-3.2.9.tar.gz 3.详细步骤 3.1 进入到加压后的文件夹 cd redis-3.2.9 3.2 执行编译安装命令 yum -y install gcc gcc-c++ [如果本来没有的话] make && make install 3.3 进入到redis-3.2.9/src目录,看到如下文件 adlist.c cluster.h geo.o networking.o redis-check-aof.c sds.o t_hash.o adlist.h cluster.o help.h notify.c redis-check-aof.o sentinel.c t_list.c adlist.o config.c hyperloglog.c notify.o redis-check-rdb sentinel.o t_list.o ae.c config.h hyperloglog.o object.c redis-check-rdb.c server.c t_set.c ae_epoll.c config.o intset.c object.o redis-check-rdb.o server.h t_set.o ae_evport.c crc16.c intset.h pqsort.c redis-cli server.o t_string.c ae.h crc16.o intset.o pqsort.h redis-cli.c setproctitle.c t_string.o ae_kqueue.c crc64.c latency.c pqsort.o redis-cli.o setproctitle.o t_zset.c ae.o crc64.h latency.h pubsub.c redis-sentinel sha1.c t_zset.o ae_select.c crc64.o latency.o pubsub.o redis-server sha1.h util.c anet.c db.c lzf_c.c quicklist.c redis-trib.rb sha1.o util.h anet.h db.o lzf_c.o quicklist.h release.c slowlog.c util.o anet.o debug.c lzf_d.c quicklist.o release.h slowlog.h valgrind.sup aof.c debugmacro.h lzf_d.o rand.c release.o slowlog.o version.h aof.o debug.o lzf.h rand.h replication.c solarisfixes.h ziplist.c asciilogo.h dict.c lzfP.h rand.o replication.o sort.c ziplist.h bio.c dict.h Makefile rdb.c rio.c sort.o ziplist.o bio.h dict.o Makefile.dep rdb.h rio.h sparkline.c zipmap.c bio.o endianconv.c memtest.c rdb.o rio.o sparkline.h zipmap.h bitops.c endianconv.h memtest.o redisassert.h scripting.c sparkline.o zipmap.o bitops.o endianconv.o mkreleasehdr.sh redis-benchmark scripting.o syncio.c zmalloc.c blocked.c fmacros.h multi.c redis-benchmark.c sdsalloc.h syncio.o zmalloc.h blocked.o geo.c multi.o redis-benchmark.o sds.c testhelp.h zmalloc.o cluster.c geo.h networking.c redis-check-aof sds.h t_hash.c 3.4 我们需要将redis-trib.rb 复制到 /usr/local/bin目录下 cp redis-trib.rb /usr/local/bin/ 3.5 创建redis_cluster目录,并且在目录下建立6个节点文件夹,7001-7006 mkdir -p /usr/local/redis-3.2.9/redis_cluster cd /usr/local/redis-3.2.9/redis_cluster mkdir 7001 mkdir 7002 mkdir 7003 mkdir 7004 mkdir 7005 mkdir 7006 3.5 将redis.conf文件拷贝至7001-7006文件夹下 cp /opt/software/redis-3.2.9/redis.conf /usr/local/redis-3.2.9/redis_cluster/7001 cp /opt/software/redis-3.2.9/redis.conf /usr/local/redis-3.2.9/redis_cluster/7002 cp /opt/software/redis-3.2.9/redis.conf /usr/local/redis-3.2.9/redis_cluster/7003 cp /opt/software/redis-3.2.9/redis.conf /usr/local/redis-3.2.9/redis_cluster/7004 cp /opt/software/redis-3.2.9/redis.conf /usr/local/redis-3.2.9/redis_cluster/7005 cp /opt/software/redis-3.2.9/redis.conf /usr/local/redis-3.2.9/redis_cluster/7006 修改这六个配置文件,修改内容如下 # bind 127.0.0.1 port 7001 #依次为:7001, 7002, 7003, 7004, 7005, 7006 daemonize yes pidfile /var/run/redis_7001.pid #依次为:redis_7001.pid, redis_7002.pid, redis_7003.pid, redis_7004.pid, redis_7005.pid, redis_7006.pid cluster-enabled yes cluster-config-file nodes-7001.conf #依次为:nodes-7001.conf, nodes-7002.conf, nodes-7003.conf, nodes-7004.conf, nodes-7005.conf, nodes-7006.conf cluster-node-timeout 15000 appendonly yes protected-mode no #特别注意 3.6 启动这六个节点 进入cd /opt/software/redis-3.2.9/src,执行如下命令 ./redis-server /usr/local/redis-3.2.9/redis_cluster/7001/redis.conf ./redis-server /usr/local/redis-3.2.9/redis_cluster/7002/redis.conf ./redis-server /usr/local/redis-3.2.9/redis_cluster/7003/redis.conf ./redis-server /usr/local/redis-3.2.9/redis_cluster/7004/redis.conf ./redis-server /usr/local/redis-3.2.9/redis_cluster/7005/redis.conf ./redis-server /usr/local/redis-3.2.9/redis_cluster/7006/redis.conf 3.7 查看六个节点启动情况 [root@redis-cluster src]# ps -ef | grep redis root 4703 1 0 18:44 ? 00:00:00 ./redis-server 127.0.0.1:7001 [cluster] root 4709 1 0 18:44 ? 00:00:00 ./redis-server 127.0.0.1:7002 [cluster] root 4713 1 0 18:44 ? 00:00:00 ./redis-server 127.0.0.1:7003 [cluster] root 4717 1 0 18:44 ? 00:00:00 ./redis-server 127.0.0.1:7004 [cluster] root 4721 1 0 18:44 ? 00:00:00 ./redis-server 127.0.0.1:7005 [cluster] root 4725 1 0 18:45 ? 00:00:00 ./redis-server 127.0.0.1:7006 [cluster] root 4729 1441 0 18:45 pts/0 00:00:00 grep redis 3.8 redis官方提供了redis-trib.rb工具来创建集群,此工具是用ruby编写,所以需要先安装ruby yum install ruby yum install rubygems 上传redis-3.0.0.gem到/opt/software gem install redis-3.0.0.gem 3.9 执行redis-trib.rb,创建集群 进入cd /opt/software/redis-3.2.9/src,执行如下命令 ./redis-trib.rb create --replicas 1 192.168.1.76:7001 192.168.1.76:7002 192.168.1.76:7003 192.168.1.76:7004 192.168.1.76:7005 192.168.1.76:7006 运行结果: >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.1.76:7001 192.168.1.76:7002 192.168.1.76:7003 Adding replica 192.168.1.76:7004 to 192.168.1.76:7001 Adding replica 192.168.1.76:7005 to 192.168.1.76:7002 Adding replica 192.168.1.76:7006 to 192.168.1.76:7003 M: 49f9efa388837e6484f1ac9b2db5689b35df838d 192.168.1.76:7001 slots:0-5460 (5461 slots) master M: 1a06750acd98c010f4afbddadb2a26628cf808c5 192.168.1.76:7002 slots:5461-10922 (5462 slots) master M: 42a3d216c3f1e20bd038989301fdc8dfdbec392a 192.168.1.76:7003 slots:10923-16383 (5461 slots) master S: 21dc028a6cd8b6ecbed677cbb3b66920eb7e37a7 192.168.1.76:7004 replicates 49f9efa388837e6484f1ac9b2db5689b35df838d S: 6c6e563a121cfe3311e361cb0746d0fd438653b2 192.168.1.76:7005 replicates 1a06750acd98c010f4afbddadb2a26628cf808c5 S: 59820ac12500e6937e1c1ca222f70ec5964a96bf 192.168.1.76:7006 replicates 42a3d216c3f1e20bd038989301fdc8dfdbec392a Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join.... >>> Performing Cluster Check (using node 192.168.1.76:7001) M: 49f9efa388837e6484f1ac9b2db5689b35df838d 192.168.1.76:7001 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 1a06750acd98c010f4afbddadb2a26628cf808c5 192.168.1.76:7002 slots:5461-10922 (5462 slots) master 1 additional replica(s) M: 42a3d216c3f1e20bd038989301fdc8dfdbec392a 192.168.1.76:7003 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: 21dc028a6cd8b6ecbed677cbb3b66920eb7e37a7 192.168.1.76:7004 slots: (0 slots) slave replicates 49f9efa388837e6484f1ac9b2db5689b35df838d S: 6c6e563a121cfe3311e361cb0746d0fd438653b2 192.168.1.76:7005 slots: (0 slots) slave replicates 1a06750acd98c010f4afbddadb2a26628cf808c5 S: 59820ac12500e6937e1c1ca222f70ec5964a96bf 192.168.1.76:7006 slots: (0 slots) slave replicates 42a3d216c3f1e20bd038989301fdc8dfdbec392a [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.4.查询集群节点信息和状态信息
4.1 连接集群的某一个节点 [root@redis-cluster src]# ./redis-cli -h 192.168.1.76 -p 7001 -c 说明: -h表示ip地址 -p表示端口号 -c表示以集群方式连接redis 4.2 查看集群的节点信息 192.168.1.76:7001> cluster nodes 1a06750acd98c010f4afbddadb2a26628cf808c5 192.168.1.76:7002 master - 0 1504621801582 2 connected 5461-10922 42a3d216c3f1e20bd038989301fdc8dfdbec392a 192.168.1.76:7003 master - 0 1504621800577 3 connected 10923-16383 21dc028a6cd8b6ecbed677cbb3b66920eb7e37a7 192.168.1.76:7004 slave 49f9efa388837e6484f1ac9b2db5689b35df838d 0 1504621798569 4 connected 6c6e563a121cfe3311e361cb0746d0fd438653b2 192.168.1.76:7005 slave 1a06750acd98c010f4afbddadb2a26628cf808c5 0 1504621799573 5 connected 59820ac12500e6937e1c1ca222f70ec5964a96bf 192.168.1.76:7006 slave 42a3d216c3f1e20bd038989301fdc8dfdbec392a 0 1504621794548 6 connected 49f9efa388837e6484f1ac9b2db5689b35df838d 192.168.1.76:7001 myself,master - 0 0 1 connected 0-5460 4.3 查看集群状态信息 192.168.1.76:7001> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_sent:22424 cluster_stats_messages_received:22424 192.168.1.76:7001> 4.4 检查集群是否ok [root@redis-cluster src]# ./redis-trib.rb check 192.168.1.76:7001 >>> Performing Cluster Check (using node 192.168.1.76:7001) M: 49f9efa388837e6484f1ac9b2db5689b35df838d 192.168.1.76:7001 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 1a06750acd98c010f4afbddadb2a26628cf808c5 192.168.1.76:7002 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 21dc028a6cd8b6ecbed677cbb3b66920eb7e37a7 192.168.1.76:7004 slots: (0 slots) slave replicates 49f9efa388837e6484f1ac9b2db5689b35df838d M: 42a3d216c3f1e20bd038989301fdc8dfdbec392a 192.168.1.76:7003 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: 6c6e563a121cfe3311e361cb0746d0fd438653b2 192.168.1.76:7005 slots: (0 slots) slave replicates 1a06750acd98c010f4afbddadb2a26628cf808c5 S: 59820ac12500e6937e1c1ca222f70ec5964a96bf 192.168.1.76:7006 slots: (0 slots) slave replicates 42a3d216c3f1e20bd038989301fdc8dfdbec392a [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.