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.