上一篇主要介绍了Redis集群模式的原理,这篇重点记录一下Redis原生集群的搭建过程。
示例准备
这里我们准备了两台物理机,每个上面启动三个Redis节点,形成三主三从的集群模式。
集群搭建
单实例启动
Redis的安装不再介绍了,之前的文章中有介绍。
假设我们Redis的安装目录是/usr/local/redis-cluster/
在/usr/local/redis-cluster/
下新建文件夹,可以分别命名为7000 ~ 7002,在每个文件夹中放入对应的配置文件redis.conf,内容如下:1
2
3
4
5
6daemonize yes #后台启动
port 7000 #修改端口号,从7000到7005
cluster-enabled yes #开启cluster,去掉注释
cluster-config-file nodes.conf #自动生成
cluster-node-timeout 15000 #节点通信时间
appendonly yes #持久化方式
配置完成后,在redis-cluster目录下执行命令,启动六个redis节点:1
2
3
4
5
6
7
8# 机器A
redis-server ./7000/redis.conf &
redis-server ./7001/redis.conf &
redis-server ./7002/redis.conf &
# 机器B
redis-server ./7000/redis.conf &
redis-server ./7001/redis.conf &
redis-server ./7002/redis.conf &
执行完成后,ps -ef|grep cluster
查看节点是否都启动
集群运行
Redis集群的初始化和启动需要用到Ruby,所以得先安装一哈1
yum install -y ruby rubygem
接下来需要在你redis的源码目录下(一般是redis/src/)执行:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24./redis-trib.rb create --replicas 1 47.94.132.244:7000 47.94.132.244:7001 47.94.132.244:7002 47.94.132.245:7000 47.94.132.245:7001 47.94.132.246:7002
# 其中,--replicas 1 参数表示为每个主节点创建一个从节点,其他参数是节点实例的地址端口
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
47.94.132.245:7000
47.94.132.244:7000
47.94.132.245:7001
Adding replica 47.94.132.244:7001 to 47.94.132.245:7000
Adding replica 47.94.132.245:7002 to 47.94.132.244:7000
Adding replica 47.94.132.244:7002 to 47.94.132.245:7001
M: d7c0ad4d936b1cf10fb61c061a99d370bda07757 47.94.132.244:7000
slots:5461-10922 (5462 slots) master
S: 6a5860be63f592e948749db7b388239a7467cbb1 47.94.132.244:7001
replicates d7c0ad4d936b1cf10fb61c061a99d370bda07757
S: 63a322209841222733f9ee4998105cdda7761517 47.94.132.244:7002
replicates ba8e07368cf18d4330120bc340ed1b2494644e6e
M: ee3a5a79b082af2910b3ee2a9f173ccbe7d22e57 47.94.132.245:7000
slots:0-5460 (5461 slots) master
M: ba8e07368cf18d4330120bc340ed1b2494644e6e 47.94.132.245:7001
slots:10923-16383 (5461 slots) master
S: 0b107150f7c075fe7ba701b64a9f7bf9f7896ead 47.94.132.245:7002
replicates ee3a5a79b082af2910b3ee2a9f173ccbe7d22e57
Can I set the above configuration? (type 'yes' to accept): yes
集群验证
连接集群
1
redis-cli -c -p 7001
-c表示集群,-p后面的参数表示端口
存取值
1
2
3
4set testKey testValue
get testKey
-> Redirected to slot [5798] located at 47.94.132.245:7000
"testValue"redis会将testKey分配到对应的节点,在获取时,会自动跳转到对应的节点来获取值
节点选举
通过命令将刚才分配到的节点杀掉,正常情况下,redis会将对应的从节点选举为主节点1
redis-trib.rb check 机器IP:端口
这里可以再获取一次值,会看到自动跳转的节点改变了
将刚才杀掉的节点启动,它会再次加入集群,并成为从节点。
Redis原生集群的搭建相对来说比较简单,但实际使用中,还需要考虑更多其他因素,例如
- Redis的雪崩、击穿
- Redis的并发竞争
- 生产环境如何部署
后续再和大家聊聊这方面的内容。
如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理