redis cluster集群服务的搭建

来源:互联网 发布:安卓ble蓝牙通信源码 编辑:程序博客网 时间:2024/05/19 05:30
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

./redis-trib.rb add-node --slave --master-id f8024d3276eaeca1a3324b721113db76650e630f  172.16.10.115:7005   172.16.10.116:7001

(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目录,执行以下命令。
./redis-trib.rb add-node --slave  --master-id  d877f1a4853aa44738823b70292329a88e76d594  172.16.10.116:7004   172.16.10.117:7002

(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-trib.rb add-node --slave  --master-id  f1d92151cc0360624d54f9c89c05ec85e31094e0   172.16.10.117:7003   172.16.10.115:7000

以上过程中不出现任何报错,证明已经成功创建了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
0 0
原创粉丝点击