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