Redis原生集群搭建

上一篇主要介绍了Redis集群模式的原理,这篇重点记录一下Redis原生集群的搭建过程。

示例准备

这里我们准备了两台物理机,每个上面启动三个Redis节点,形成三主三从的集群模式。

集群搭建

单实例启动

Redis的安装不再介绍了,之前的文章中有介绍。
假设我们Redis的安装目录是/usr/local/redis-cluster/
/usr/local/redis-cluster/下新建文件夹,可以分别命名为7000 ~ 7002,在每个文件夹中放入对应的配置文件redis.conf,内容如下:

1
2
3
4
5
6
daemonize 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
    4
    set 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的并发竞争
  • 生产环境如何部署

后续再和大家聊聊这方面的内容。

分享到:
Disqus 加载中...

如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理