环境
| IP | 主机名 | 端口 |
|---|
| 192.168.1.101 | cluster-01 | 6379 |
| 192.168.1.102 | cluster-02 | 6379 |
| 192.168.1.103 | cluster-03 | 6379 |
| 192.168.1.104 | cluster-04 | 6379 |
| 192.168.1.105 | cluster-05 | 6379 |
| 192.168.1.106 | cluster-06 | 6379 |
下载安装包并编译安装
编译安装
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
| redis-cli -a 123456 --cluster check 192.168.1.105:6379
|
重启刚才停止的主节点
手动故障转移
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、收到广播,开始处理客户端读请求。