Rocky Linux 10 部署 Redis 8.2.0 三主三从集群

1.Redis描述

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对存储系统,通常被用作数据库、缓存和消息中间件。

2.工作原理

Redis 使用单线程模型处理客户端请求,避免了多线程中的锁竞争问题,从而提升了效率。同时,它利用多路复用技术,高效管理大量并发连接。

3.Redis部署环境介绍

角色 IP地址 操作系统 Redis版本 GCC版本
Redis-Master1 192.168.100.5 Rocky Linux 10.0 8.2.0 14.2.1
Redis-Master2 192.168.100.6 Rocky Linux 10.0 8.2.0 14.2.1
Redis-Master3 192.168.100.7 Rocky Linux 10.0 8.2.0 14.2.1
Redis-Slave1 192.168.100.8 Rocky Linux 10.0 8.2.0 14.2.1
Redis-Slave2 192.168.100.9 Rocky Linux 10.0 8.2.0 14.2.1
Redis-Slave3 192.168.100.10 Rocky Linux 10.0 8.2.0 14.2.1

4.Redis主从架构图

5.主机配置

5.1IP配置

配置Redis-Master1节点IP地址

bash 复制代码
cat > /etc/NetworkManager/system-connections/ens160.nmconnection <<EOF
[connection]
id=ens160
type=ethernet
autoconnect-priority=-999
interface-name=ens160

[ethernet]

[ipv4]
address1=192.168.100.5/24
dns=114.114.114.114;8.8.8.8;
gateway=192.168.100.254
may-fail=false
method=manual

[ipv6]
addr-gen-mode=eui64
method=ignore

[proxy]
EOF

配置Redis-Master2节点IP地址

bash 复制代码
cat > /etc/NetworkManager/system-connections/ens160.nmconnection <<EOF
[connection]
id=ens160
type=ethernet
autoconnect-priority=-999
interface-name=ens160

[ethernet]

[ipv4]
address1=192.168.100.6/24
dns=114.114.114.114;8.8.8.8;
gateway=192.168.100.254
may-fail=false
method=manual

[ipv6]
addr-gen-mode=eui64
method=ignore

[proxy]
EOF

配置Redis-Master3节点IP地址

bash 复制代码
cat > /etc/NetworkManager/system-connections/ens160.nmconnection <<EOF
[connection]
id=ens160
type=ethernet
autoconnect-priority=-999
interface-name=ens160

[ethernet]

[ipv4]
address1=192.168.100.7/24
dns=114.114.114.114;8.8.8.8;
gateway=192.168.100.254
may-fail=false
method=manual

[ipv6]
addr-gen-mode=eui64
method=ignore

[proxy]
EOF

配置Redis-Slave1节点IP地址

bash 复制代码
cat > /etc/NetworkManager/system-connections/ens160.nmconnection <<EOF
[connection]
id=ens160
type=ethernet
autoconnect-priority=-999
interface-name=ens160

[ethernet]

[ipv4]
address1=192.168.100.8/24
dns=114.114.114.114;8.8.8.8;
gateway=192.168.100.254
may-fail=false
method=manual

[ipv6]
addr-gen-mode=eui64
method=ignore

[proxy]
EOF

配置Redis-Slave2节点IP地址

bash 复制代码
cat > /etc/NetworkManager/system-connections/ens160.nmconnection <<EOF
[connection]
id=ens160
type=ethernet
autoconnect-priority=-999
interface-name=ens160

[ethernet]

[ipv4]
address1=192.168.100.9/24
dns=114.114.114.114;8.8.8.8;
gateway=192.168.100.254
may-fail=false
method=manual

[ipv6]
addr-gen-mode=eui64
method=ignore

[proxy]
EOF

配置Redis-Slave3节点IP地址

bash 复制代码
cat > /etc/NetworkManager/system-connections/ens160.nmconnection <<EOF
[connection]
id=ens160
type=ethernet
autoconnect-priority=-999
interface-name=ens160

[ethernet]

[ipv4]
address1=192.168.100.10/24
dns=114.114.114.114;8.8.8.8;
gateway=192.168.100.254
may-fail=false
method=manual

[ipv6]
addr-gen-mode=eui64
method=ignore

[proxy]
EOF
5.2修改主机名

Redis-Master1上执行

bash 复制代码
hostnamectl set-hostname Redis-Master1

Redis-Master2上执行

bash 复制代码
hostnamectl set-hostname Redis-Master2

Redis-Master1上执行

bash 复制代码
hostnamectl set-hostname Redis-Master3

Redis-Slave1上执行

bash 复制代码
hostnamectl set-hostname Redis-Slave1

Redis-Slave2上执行

bash 复制代码
hostnamectl set-hostname Redis-Slave2

Redis-Slave3上执行

bash 复制代码
hostnamectl set-hostname Redis-Slave3
5.3关闭防火墙

6个节点均需要执行

bash 复制代码
systemctl stop firewalld
systemctl disable  firewalld
systemctl status  firewalld
5.4关闭SELINUX

6个节点均需要执行

bash 复制代码
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
5.5DNF源配置

6个节点均需要执行

bash 复制代码
sed -e 's|^mirrorlist=|#mirrorlist=|g'     -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g'     -i.bak     /etc/yum.repos.d/rocky*.repo
5.6时间同步配置

6个节点均需要执行

bash 复制代码
dnf install -y chrony
sed -i 's|pool[[:space:]]*2\.rocky\.pool\.ntp\.org[[:space:]]*iburst|server ntp.aliyun.com iburst|' /etc/chrony.conf
systemctl restart chronyd
chronyc sources
5.7主机映射配置

6个节点均需要执行

bash 复制代码
tee >> /etc/hosts <<EOF
192.168.100.5   Redis-Master1
192.168.100.6   Redis-Master2
192.168.100.7   Redis-Master3
192.168.100.8   Redis-Slave1
192.168.100.9   Redis-Slave2
192.168.100.10  Redis-Slave3
EOF

6.安装Redis服务

6.1安装依赖

6个节点均需要执行

bash 复制代码
dnf install -y cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc gcc-c++ make rsync
6.2下载Redis

Redis-Master1上执行

bash 复制代码
wget https://github.com/redis/redis/archive/refs/tags/8.2.0.tar.gz
6.3解压Redis

Redis-Master1上执行

bash 复制代码
tar zxvf 8.2.0.tar.gz
6.4编译安装

Redis-Master1上执行

bash 复制代码
cd redis-8.2.0
make && make install
6.5创建Redis集群目录

Redis-Master1上执行

bash 复制代码
mkdir -p /usr/local/redis-cluster/master1

Redis-Master2上执行

bash 复制代码
mkdir -p /usr/local/redis-cluster/master2

Redis-Master3上执行

bash 复制代码
mkdir -p /usr/local/redis-cluster/master3

Redis-Slave1上执行

bash 复制代码
mkdir -p /usr/local/redis-cluster/slave1

Redis-Slave2上执行

bash 复制代码
mkdir -p /usr/local/redis-cluster/slave2

Redis-Slave3上执行

bash 复制代码
mkdir -p /usr/local/redis-cluster/slave3
6.6安装redis服务

Redis 二进制执行文件默认存放在 /usr/local/bin 目录下

bash 复制代码
rsync -av --progress /usr/loca/bin/redis* root@Redis-Master1:/usr/local/bin/
rsync -av --progress /usr/loca/bin/redis* root@Redis-Master2:/usr/local/bin/
rsync -av --progress /usr/loca/bin/redis* root@Redis-Master3:/usr/local/bin/
rsync -av --progress /usr/loca/bin/redis* root@Redis-Slave1:/usr/local/bin/
rsync -av --progress /usr/loca/bin/redis* root@Redis-Slave2:/usr/local/bin/
rsync -av --progress /usr/loca/bin/redis* root@Redis-Slave3:/usr/local/bin/
6.7创建配置文件

Redis-Master1上执行

bash 复制代码
cat > /usr/local/redis-cluster/master1/redis.conf << EOF
bind 192.168.100.5
port 6371
daemonize yes
cluster-enabled yes
cluster-config-file  "/usr/local/redis-cluster/master1/nodes.conf"
cluster-node-timeout 15000
pidfile "/usr/local/redis-cluster/master1/redis.pid"
loglevel warning
logfile "/usr/local/redis-cluster/master1/redis.log"
dir "/usr/local/redis-cluster/master1"
appendonly no
protected-mode no
requirepass Redis^2025
masterauth Redis^2025
EOF

Redis-Master2上执行

bash 复制代码
cat > /usr/local/redis-cluster/master2/redis.conf << EOF
bind 192.168.100.6
port 6372
daemonize yes
cluster-enabled yes
cluster-config-file  "/usr/local/redis-cluster/master2/nodes.conf"
cluster-node-timeout 15000
pidfile "/usr/local/redis-cluster/master2/redis.pid"
loglevel warning
logfile "/usr/local/redis-cluster/master2/redis.log"
dir "/usr/local/redis-cluster/master2"
appendonly no
protected-mode no
requirepass Redis^2025
masterauth Redis^2025
EOF

Redis-Master3上执行

bash 复制代码
cat > /usr/local/redis-cluster/master3/redis.conf << EOF
bind 192.168.100.7
port 6373
daemonize yes
cluster-enabled yes
cluster-config-file  "/usr/local/redis-cluster/master3/nodes.conf"
cluster-node-timeout 15000
pidfile "/usr/local/redis-cluster/master3/redis.pid"
loglevel warning
logfile "/usr/local/redis-cluster/master3/redis.log"
dir "/usr/local/redis-cluster/master3"
appendonly no
protected-mode no
requirepass Redis^2025
masterauth Redis^2025
EOF

Redis-Slave1上执行

bash 复制代码
cat > /usr/local/redis-cluster/slave1/redis.conf << EOF
bind 192.168.100.8
port 6374
daemonize yes
cluster-enabled yes
cluster-config-file  "/usr/local/redis-cluster/slave1/nodes.conf"
cluster-node-timeout 15000
pidfile "/usr/local/redis-cluster/slave1/redis.pid"
loglevel warning
logfile "/usr/local/redis-cluster/slave1/redis.log"
dir "/usr/local/redis-cluster/slave1"
appendonly no
protected-mode no
requirepass Redis^2025
masterauth Redis^2025
EOF

Redis-Slave2上执行

bash 复制代码
cat > /usr/local/redis-cluster/slave2/redis.conf << EOF
bind 192.168.100.9
port 6375
daemonize yes
cluster-enabled yes
cluster-config-file  "/usr/local/redis-cluster/slave2/nodes.conf"
cluster-node-timeout 15000
pidfile "/usr/local/redis-cluster/slave2/redis.pid"
loglevel warning
logfile "/usr/local/redis-cluster/slave2/redis.log"
dir "/usr/local/redis-cluster/slave2"
appendonly no
protected-mode no
requirepass Redis^2025
masterauth Redis^2025
EOF

Redis-Slave3上执行

bash 复制代码
cat > /usr/local/redis-cluster/slave3/redis.conf << EOF
bind 192.168.100.10
port 6376
daemonize yes
cluster-enabled yes
cluster-config-file  "/usr/local/redis-cluster/slave3/nodes.conf"
cluster-node-timeout 15000
pidfile "/usr/local/redis-cluster/slave3/redis.pid"
loglevel warning
logfile "/usr/local/redis-cluster/slave3/redis.log"
dir "/usr/local/redis-cluster/slave3"
appendonly no
protected-mode no
requirepass Redis^2025
masterauth Redis^2025
EOF

7.启动Redis

Redis-Master1上执行

bash 复制代码
redis-server /usr/local/redis-cluster/master1/redis.conf

Redis-Master2上执行

bash 复制代码
redis-server /usr/local/redis-cluster/master2/redis.conf

Redis-Master3上执行

bash 复制代码
redis-server /usr/local/redis-cluster/master3/redis.conf

Redis-Slave1上执行

bash 复制代码
redis-server /usr/local/redis-cluster/slave1/redis.conf

Redis-Slave1上执行

bash 复制代码
redis-server /usr/local/redis-cluster/slave2/redis.conf

Redis-Slave1上执行

bash 复制代码
redis-server /usr/local/redis-cluster/slave3/redis.conf

8.Redis集群配置

Redis-Master1上执行

bash 复制代码
redis-cli --cluster create --cluster-replicas 1 \
192.168.100.5:6371 192.168.100.6:6372 192.168.100.7:6373 \
192.168.100.8:6374 192.168.100.9:6375 192.168.100.10:6376 \
-a 'Redis^2025'

执行结果如下显示

shell 复制代码
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.100.9:6375 to 192.168.100.5:6371
Adding replica 192.168.100.10:6376 to 192.168.100.6:6372
Adding replica 192.168.100.8:6374 to 192.168.100.7:6373
M: 805c67cbaff3a0e467d5df12487c7eb873b9011b 192.168.100.5:6371
   slots:[0-5460] (5461 slots) master
M: eec5aa01029e1c7184b035aac9bcfea7104128ba 192.168.100.6:6372
   slots:[5461-10922] (5462 slots) master
M: 6aa672c32fb95c0de49f76247485123b781daf58 192.168.100.7:6373
   slots:[10923-16383] (5461 slots) master
S: c1d92e5de8eb9d2c22732a106943a3ac387891a9 192.168.100.8:6374
   replicates 6aa672c32fb95c0de49f76247485123b781daf58
S: 45d00cdbde0ed03eaeb67a11f70b6ffa058e8891 192.168.100.9:6375
   replicates 805c67cbaff3a0e467d5df12487c7eb873b9011b
S: af95c937fbd5e7e24d6ede6ffc91fdd27c3421d1 192.168.100.10:6376
   replicates eec5aa01029e1c7184b035aac9bcfea7104128ba
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

>>> Performing Cluster Check (using node 192.168.100.5:6371)
M: 805c67cbaff3a0e467d5df12487c7eb873b9011b 192.168.100.5:6371
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: af95c937fbd5e7e24d6ede6ffc91fdd27c3421d1 192.168.100.10:6376
   slots: (0 slots) slave
   replicates eec5aa01029e1c7184b035aac9bcfea7104128ba
M: 6aa672c32fb95c0de49f76247485123b781daf58 192.168.100.7:6373
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: c1d92e5de8eb9d2c22732a106943a3ac387891a9 192.168.100.8:6374
   slots: (0 slots) slave
   replicates 6aa672c32fb95c0de49f76247485123b781daf58
M: eec5aa01029e1c7184b035aac9bcfea7104128ba 192.168.100.6:6372
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 45d00cdbde0ed03eaeb67a11f70b6ffa058e8891 192.168.100.9:6375
   slots: (0 slots) slave
   replicates 805c67cbaff3a0e467d5df12487c7eb873b9011b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

9.集群相关命令

查看集群健康检查和状态验证,任意节点执行

bash 复制代码
redis-cli --cluster check 192.168.100.5:6371 -a 'Redis^2025'

执行结果显示

shell 复制代码
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.100.5:6371 (805c67cb...) -> 0 keys | 5461 slots | 1 slaves.
192.168.100.7:6373 (6aa672c3...) -> 0 keys | 5461 slots | 1 slaves.
192.168.100.6:6372 (eec5aa01...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.100.5:6371)
M: 805c67cbaff3a0e467d5df12487c7eb873b9011b 192.168.100.5:6371
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: af95c937fbd5e7e24d6ede6ffc91fdd27c3421d1 192.168.100.10:6376
   slots: (0 slots) slave
   replicates eec5aa01029e1c7184b035aac9bcfea7104128ba
M: 6aa672c32fb95c0de49f76247485123b781daf58 192.168.100.7:6373
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: c1d92e5de8eb9d2c22732a106943a3ac387891a9 192.168.100.8:6374
   slots: (0 slots) slave
   replicates 6aa672c32fb95c0de49f76247485123b781daf58
M: eec5aa01029e1c7184b035aac9bcfea7104128ba 192.168.100.6:6372
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 45d00cdbde0ed03eaeb67a11f70b6ffa058e8891 192.168.100.9:6375
   slots: (0 slots) slave
   replicates 805c67cbaff3a0e467d5df12487c7eb873b9011b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

查看集群信息,任意节点执行

bash 复制代码
192.168.100.5:6371> cluster info

执行结果显示

bash 复制代码
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:315
cluster_stats_messages_pong_sent:314
cluster_stats_messages_sent:629
cluster_stats_messages_ping_received:309
cluster_stats_messages_pong_received:315
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:629
total_cluster_links_buffer_limit_exceeded:0

查看节点信息,任意节点执行

bash 复制代码
192.168.100.5:6371> cluster nodes

执行结果显示

shell 复制代码
af95c937fbd5e7e24d6ede6ffc91fdd27c3421d1 192.168.100.10:6376@16376 slave eec5aa01029e1c7184b035aac9bcfea7104128ba 0 1754615191855 2 connected
6aa672c32fb95c0de49f76247485123b781daf58 192.168.100.7:6373@16373 master - 0 1754615190000 3 connected 10923-16383
c1d92e5de8eb9d2c22732a106943a3ac387891a9 192.168.100.8:6374@16374 slave 6aa672c32fb95c0de49f76247485123b781daf58 0 1754615189837 3 connected
eec5aa01029e1c7184b035aac9bcfea7104128ba 192.168.100.6:6372@16372 master - 0 1754615190000 2 connected 5461-10922
45d00cdbde0ed03eaeb67a11f70b6ffa058e8891 192.168.100.9:6375@16375 slave 805c67cbaff3a0e467d5df12487c7eb873b9011b 0 1754615191000 1 connected
805c67cbaff3a0e467d5df12487c7eb873b9011b 192.168.100.5:6371@16371 myself,master - 0 0 1 connected 0-5460