Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写。集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的Slot的请求时,会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求重新发往这个地址,对外部透明。一个Key到底属于哪个Slot由crc16(key) % 16384 决定。
集群由N组主从Redis Instance组成。主可以没有从,但是没有从 意味着主宕机后主负责的Slot读写服务不可用。一个主可以有多个从,主宕机时,某个从会被提升为主,具体哪个从被提升为主,协议类似于Raft。Redis Cluster采用quorum+心跳的机制。从节点的角度看,节点会定期给其他所有的节点发送Ping,cluster-node-timeout(可配置,秒级)时间内没有收到对方的回复,则单方面认为对端节点宕机,将该节点标为PFAIL状态。通过节点之间交换信息收集到quorum个节点都认为这个节点为PFAIL,则将该节点标记为FAIL,并且将其发送给其他所有节点,其他所有节点收到后立即认为该节点宕机。
1、redis cluster集群部署信息
主机名 IP地址 redis服务端口1,redis服务端口2
redis_cluster1 172.16.10.115 7000,7005
redis_cluster2 172.16.10.116 7001,7004
redis_cluster3 172.16.10.117 7002,7003
2、最佳性能状态下的主从分布关系
master <– slave
7000 <– 7003
7001 <– 7004
7002 <– 7005
3、创建redis cluster服务集群的方法
使用redis3或更高版本在每个主机上先编译安装redis,过程略。
因为需要启动6个redis服务进程,所以需要准备好6个redis服务使用的配置文件redis.conf。
以下是以端口7000的redis服务举例,说明redis.conf的配置内容:
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
注:以上是配置redis cluster服务所需要最简配置信息。其它服务端口的redis配置文件仅port参数取值不同。
以下为开始创建redis cluster的方法。
(1)启动redis服务进程
redis_cluster1 10.115
cd /hskj/redis-3.0.7/redis-cluster/7000
/hskj/redis-3.0.7/src/redis-server ./redis.conf
redis_cluster2 10.116
cd /hskj/redis-3.0.7/redis-cluster/7001
/hskj/redis-3.0.7/src/redis-server ./redis.conf
redis_cluster3 10.117
cd /hskj/redis-3.0.7/redis-cluster/7002
/hskj/redis-3.0.7/src/redis-server ./redis.conf
(2)创建包含3个master的redis cluster集群
使用redis_cluster作为管理节点:
yum install ruby rubygems gems-redis
获取以下安装包并上传至redis_cluster1容器,安装:
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
gem install -l ./redis-3.2.1.gem
创建集群,在redis_cluster1上执行:
./redis-trib.rb create 172.16.10.115:7000 172.16.10.116:7001 172.16.10.117:7002
# ./redis-cli -c -p 7000
127.0.0.1:7000> cluster nodes
f8024d3276eaeca1a3324b721113db76650e630f 172.16.10.116:7001 master – 0 1490611287852 2 connected 5461-10922
d877f1a4853aa44738823b70292329a88e76d594 172.16.10.117:7002 master – 0 1490611287350 3 connected 0-5460
f1d92151cc0360624d54f9c89c05ec85e31094e0 172.16.10.115:7000 myself,master – 0 0 1 connected 10923-16383
(3)加入slave节点1
登录redis_cluster1,启动7005端口的redis服务,并加入到集群中作为7001的slave。
cd /hskj/redis-3.0.7/redis-cluster/7005
/hskj/redis-3.0.7/src/redis-server ./redis.conf
(4)加入slave节点2
登录redis_cluster2,启动7004端口的redis服务,并加入到集群中作为7002的slave。
cd /hskj/redis-3.0.7/redis-cluster/7004
/hskj/redis-3.0.7/src/redis-server ./redis.conf
登录redis_cluster1节点进入src目录,执行以下命令。
(5)加入slave节点3
登录redis_cluster3,启动7003端口的redis服务,并加入到集群中作为7000的slave。
cd /hskj/redis-3.0.7/redis-cluster/7003
/hskj/redis-3.0.7/src/redis-server ./redis.conf
登录redis_cluster1节点进入src目录,执行以下命令。
以上过程中不出现任何报错,证明已经成功创建了redis cluster集群。
4、检查集群配置结果
登录其中一个服务端口的redis,查看集群节点的状态。
[root@e98b4864ef20 src]# ./redis-cli -c -p 7000
127.0.0.1:7000> cluster nodes
4c48365f989154f49dfe45ce65983aa2b827a06a 172.16.10.117:7003 slave f1d92151cc0360624d54f9c89c05ec85e31094e0 0 1490661575129 1 connected
da818c3f2c7405b102f7f153dcdc2c69edbc9a4c 172.16.10.116:7004 slave d877f1a4853aa44738823b70292329a88e76d594 0 1490661574630 3 connected
6685406ab6b817f725081249f92534c4b425b574 172.16.10.115:7005 slave f8024d3276eaeca1a3324b721113db76650e630f 0 1490661574128 2 connected
d877f1a4853aa44738823b70292329a88e76d594 172.16.10.117:7002 master – 0 1490661575631 3 connected 0-5460
f8024d3276eaeca1a3324b721113db76650e630f 172.16.10.116:7001 master – 0 1490661576132 2 connected 5461-10922
f1d92151cc0360624d54f9c89c05ec85e31094e0 172.16.10.115:7000 myself,master – 0 0 1 connected 10923-16383
原文链接:https://blog.csdn.net/watermelonbig/article/details/69870142
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/16764