【笔记】Redis的集群

前言

Redis的集群学习笔记

部署Redis集群

修改每台Redis节点的配置文件

  • 修改redis.conf配置文件第61行,允许远程访问
/etc/redis.conf
1
# bind 127.0.0.1 ::1
  • 修改redis.conf配置文件第80行,关闭保护模式
/etc/redis.conf
1
protected-mode no
  • 修改redis.conf配置文件第84行,定义端口号
/etc/redis.conf
1
port 6379
  • 修改redis.conf配置文件第721行,启用集群
/etc/redis.conf
1
cluster-enabled yes
  • 修改redis.conf配置文件第729行,指定集群配置文件
/etc/redis.conf
1
cluster-config-file nodes-6379.conf
  • 修改redis.conf配置文件第735行,配置集群超时时间
/etc/redis.conf
1
cluster-node-timeout 15000

创建Redis集群

  • 3主3从示例

创建固定比例的的主从节点

  • 通过--cluster-replicas指定每个主节点对应的从节点数量,Redis自动选举主节点
  • --cluster-replicas要求至少6个节点才可以创建集群

--cluster-replicas 1:每个主节点对应的从节点数量

1
redis-cli --cluster create --cluster-replicas 1 192.168.0.1:6379 192.168.0.2:6379 192.168.0.3:6379 192.168.0.4:6379 192.168.0.5:6379 192.168.0.6:6379
1
2
Can I set the above configuration?
yes
启动每台Redis节点
1
2
3
4
5
6
ssh root@192.168.0.1 redis-server /etc/redis.conf
ssh root@192.168.0.2 redis-server /etc/redis.conf
ssh root@192.168.0.3 redis-server /etc/redis.conf
ssh root@192.168.0.4 redis-server /etc/redis.conf
ssh root@192.168.0.5 redis-server /etc/redis.conf
ssh root@192.168.0.6 redis-server /etc/redis.conf

创建任意比例的主从节点

  • 1主2从示例
主节定义关联的从节点
1
2
redis-cli -h 192.168.0.1 -p 6379 cluster meet 192.168.0.2 6379
redis-cli -h 192.168.0.1 -p 6379 cluster meet 192.168.0.3 6379
主节点分配槽位
1
redis-cli -h 192.168.0.1 -p 6379 cluster addslots {0..16383}
获取主节点id
1
redis-cli -h 192.168.0.1 -p 6379 cluster nodes
从节点定义关联的主节点

<node_id>:上一步骤获取的主机id

1
2
redis-cli -h 192.168.0.2 -p 6379 cluster replicate <node_id>
redis-cli -h 192.168.0.3 -p 6379 cluster replicate <node_id>
启动每台Redis节点
1
2
3
ssh root@192.168.0.1 redis-server /etc/redis.conf
ssh root@192.168.0.2 redis-server /etc/redis.conf
ssh root@192.168.0.3 redis-server /etc/redis.conf

判断当前节点是主节点还是从节点

1
redis-cli -h 192.168.0.1 -p 6379 INFO REPLICATION
  • 如果是主节点,返回role:master;如果是从节点,返回role:slave

部署RedisSentinel哨兵集群

  • 推荐哨兵节点数量为奇数

  • 3个哨兵节点示例

修改每台RedisSentinel哨兵节点的配置文件

  • 修改redis-sentinel.conf配置文件第17行,关闭保护模式
/etc/redis-sentinel.conf
1
protected-mode no
  • 修改redis-sentinel.conf配置文件第69行,设置投票机制

<master_name>:指定主节点名
<master_ip>:主节点IP地址
<master_port>:主机端口号
2:达成故障转移所需的最小哨兵投票数,通常设置为总节点数/2+1(半数以上)

/etc/redis-sentinel.conf
1
sentinel monitor <master_name> <master_ip> <master_port> 2
  • 修改redis-sentinel.conf配置文件第98行,设置心跳检测宕机后多久更换主机

30000:默认30秒

/etc/redis-sentinel.conf
1
sentinel down-after-milliseconds <master_name> 30000
  • 修改redis-sentinel.conf配置文件第131行,设置更换主机超时时间,超时后将再次更换主机

180000:默认3分钟

/etc/redis-sentinel.conf
1
sentinel failover-timeout <master_name> 180000

启动每台RedisSentinel哨兵节点

1
2
3
ssh root:192.168.0.1 redis-sentinel /etc/redis-sentinel.conf
ssh root:192.168.0.2 redis-sentinel /etc/redis-sentinel.conf
ssh root:192.168.0.3 redis-sentinel /etc/redis-sentinel.conf

完成