updated: 09/05/2019
为洪洞等地区用户提供了全套网页设计制作服务,及洪洞网站建设行业解决方案。主营业务为成都网站设计、网站制作、洪洞网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
Redis Cluster 的主要特点如下:
本文以部署一个可实现高可用的最小集群为例,集群部署在三台主机上,包含 M1、M2、M3、S1、S2、S3 六个节点。
M1、M2、M3 为主节点对应 Redis 实例:7000,7001,7002
S1、S2、S3 为从节点对应 Redis 实例:7003,7004,7005
主从节点交叉连接,对应关系为:
M1 -> S2
M2 -> S3
M3 -> S1
系统环境:
主机 | IP | 节点-角色-实例(端口) |
---|---|---|
redis1 | 192.168.0.100 | M1-master-7000、S1-slave-7003 |
redis2 | 192.168.0.101 | M2-master-7001、S2-slave-7004 |
redis3 | 192.168.0.102 | M3-master-7002、S3-slave-7005 |
分别在三台主机上编译安装 redis 5.0.4 版本。
安装完毕建议将 redis bin 目录加入 PATH 环境变量
参考步骤 4.1 - 4.3,分别在三台主机上进行 Redis 集群配置。
创建集群各节点配置和数据目录。
mkdir -p /data/redis-cluster/{7000,7001}
以 redis1 为例,目录结构如下:
/data/redis-cluster/
├── 7000
│ ├── redis.conf # redis 实例配置文件
│ └── nodes.conf # redis 集群节点的配置文件(由集群自动创建)
└── 7003
│ ├── redis.conf # redis 实例配置文件
│ └── nodes.conf # redis 集群节点的配置文件(由集群自动创建)
分别复制 redis 源码目录下的 redis.conf 至节点配置和数据目录。
编辑 redis 实例配置文件中的各项配置。redis 默认未开启集群功能,需修改下面几个配置开启:
port 7000
bind 0.0.0.0 # 允许其他主机连接
dir /data/redis-cluster/7000 # 节点实例配置目录
cluster-enabled yes # 开启集群
cluster-config-file nodes.conf # 集群配置文件
cluster-node-timeout 5000 # 超时时间
appendonly yes # 并开启AOF模式
请根据生产环境性能需求和实际部署情况修改相关配置项,注意每个节点的实例配置文件中端口不同。
根据情况修改服务器防火墙配置,允许 Redis 主机互相连接 7000-7005, 17000-17005 端口,允许所有业务服务器连接 Redis 服务器的 7000-7005 端口。
分别在三台主机上启动全部 6 个 redis 节点实例,启动时指定配置文件为各自节点配置目录中的 redis.conf。
在任意一台 redis 节点主机上执行如下命令启动集群:
redis-cli --cluster create \
--cluster-replicas 1 \
192.168.0.100:7000 \
192.168.0.100:7001 \
192.168.0.101:7002 \
192.168.0.101:7003 \
192.168.0.102:7004 \
192.168.0.102:7005
注意修改命令中的 IP 为 redis 节点实例端口对应的真实主机 IP。
根据提示输入yes
,出现下列信息则表示集群创建成功。
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
在任意一个 redis 节点的主机上执行以下命令:
# redis-cli -c -h 192.168.0.100 -p 7000 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_ping_sent:101
cluster_stats_messages_pong_sent:98
cluster_stats_messages_sent:199
cluster_stats_messages_ping_received:93
cluster_stats_messages_pong_received:101
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:199
在任意一个 redis 节点的主机上执行以下命令,列出集群当前已知的所有节点(node),以及这些节点的相关信息。
# redis-cli -c -h 192.168.0.100 -p 7000 cluster nodes
输出类似以下信息:
50725018cd7f5f20214b0ed462975258397dfe29 192.168.0.102:7005@17005 slave 39e335386bb48f012f433287ed853174009114e5 0 1554876136000 6 connected
8874f69c2f5747cce3a02387167a00cdaba43d3c 192.168.0.100:7001@17001 master - 0 1554876137380 2 connected 5461-10922
c9cb48efbc1a83098cb730a5295402d9cdb343c2 192.168.0.101:7003@17003 slave 917301c74a9ed1ed52918b8e4c7f88de9743c361 0 1554876136375 4 connected
5633e918818033552b1adc089d99fbe9bcf36589 192.168.0.102:7004@17004 slave 8874f69c2f5747cce3a02387167a00cdaba43d3c 0 1554876136072 5 connected
917301c74a9ed1ed52918b8e4c7f88de9743c361 192.168.0.100:7000@17000 myself,master - 0 1554876136000 1 connected 0-5460
39e335386bb48f012f433287ed853174009114e5 192.168.0.101:7002@17002 master - 0 1554876136878 3 connected 10923-16383
在任意一个 redis 节点的主机上执行以下命令,显示集群当前所有数据槽的分配情况。
# redis-cli -c -h 192.168.0.100 -p 7000 cluster slots
输出类似以下信息:
1) 1) (integer) 5461
2) (integer) 10922
3) 1) "127.0.0.1"
2) (integer) 7001
4) 1) "127.0.0.1"
2) (integer) 7004
2) 1) (integer) 0
2) (integer) 5460
3) 1) "127.0.0.1"
2) (integer) 7000
4) 1) "127.0.0.1"
2) (integer) 7003
3) 1) (integer) 10923
2) (integer) 16383
3) 1) "127.0.0.1"
2) (integer) 7002
4) 1) "127.0.0.1"
2) (integer) 7005