Redis6.2.1 Cluster集群部署

温馨提醒

环境

IP主机名端口
192.168.1.101cluster-016379
192.168.1.102cluster-026379
192.168.1.103cluster-036379
192.168.1.104cluster-046379
192.168.1.105cluster-056379
192.168.1.106cluster-066379

下载安装包并编译安装

编译安装

1
2
3
4
5
6
7
wget https://download.redis.io/releases/redis-6.2.1.tar.gz

tar xf redis-6.2.1.tar.gz

cd redis-6.2.1

make PREFIX=/usr/local/redis install

创建启动脚本

vim /usr/lib/systemd/system/redis.service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf --supervised systemd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -S QUIT $MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

创建用户设置权限

1
2
useradd redis -s /sbin/nologin
chown -R redis.redis /usr/local/redis/

部署

每个实例创建数据目录

1
2
mkdir -p /data/redis/{data,logs}
chwon -R redis.redis /data/redis

每个实例创建一个配置文件

vim /usr/local/redis/conf/redis.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
  bind 0.0.0.0
  port 6379
  protected-mode no
  pidfile /data/redis/redis_6379.pid
  dir "/data/redis/data"
  logfile "/data/redis/logs/redis.log"
  dbfilename "dump-6379.rdb"
  appendonly yes
  appendfilename "appendonly-6379.aof"
  
  # 集群配置
  cluster-enabled yes			# 启用cluster
  cluster-config-file nodes-6379.conf
  cluster-require-full-coverage no
  cluster-allow-reads-when-down yes
  cluster-replica-validity-factor 0
  cluster-node-timeout 5000

  # 设置密码
  masterauth 123456
  requirepass 123456

启动所有实例

1
2
systemctl daemon-reload
systemctl enable --now redis

创建 cluster 集群

1
2
3
4
5
/usr/local/redis/bin/redis-cli -a 123456 --cluster create 192.168.1.101:6379 192.168.1.102:6379 192.168.1.103:6379 192.168.1.104:6379 192.168.1.105:6379 192.168.1.106:6379 --cluster-replicas 1
# -a:后面是设置的集群密码
# --cluster:代表集群模式
# create:创建集群,后面是需要创建集群的节点
# --cluster-replicas 1:代表每一个主节点都创建一个从节点

常用命令

1
2
3
4
5
6
7
8
  # 连接到集群
  redis-cli -c -a 123456 -p 7001

  # 查看集群关系
  redis-cli -a 123456 --cluster check 127.0.0.1:7001
  还可以连接上任意一个 redis 节点,使用命令查看
  127.0.0.1:7000> cluster nodes
  127.0.0.1:7000> cluster info

故障转移

自动故障转移

  • 手动停止一个主节点

    1
    
    systemctl stop redis
  • 查看集群信息

    1
    
    redis-cli -a 123456 --cluster check 192.168.1.105:6379
  • 重启刚才停止的主节点

    1
    
    systemctl start redis

手动故障转移

1
2
# 进入一个从节点,必须要在从节点上执行
cluster failover

手动 failover 支持三种不同的模式:

缺省:默认的流程,执行 1~6 步;

force:省略了对 offset 的一致性校验;

takeover:直接执行第 6 步,忽略数据一致性、忽略 master 状态和其他 master 意见。

流程如下:

1、slave 节点告诉 master 节点拒绝任何客户端请求;

2、master 返回当前的数据 offset 给 slave;

3、等待数据 offset 与 master 一致;

4、开始故障转移;

5、标记自己为 master,广播故障转移的结果;

6、收到广播,开始处理客户端读请求。