一键部署Redis主从集群

1.脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/bin/bash

# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

# 定义总步骤数
TOTAL_STEPS=18
current_step=0

# 显示进度的函数
show_progress() {
current_step=$((current_step + 1))
percentage=$((current_step * 100 / TOTAL_STEPS))
printf "${YELLOW}[%3d%%] ${GREEN}步骤 %2d: %s${NC}\n" $percentage $current_step "$1"
}

echo -e "${GREEN}开始安装和配置Redis主从集群${NC}"

# 1. 安装依赖
show_progress "安装Redis依赖"
yum install -y gcc tcl

echo -e "${YELLOW}第一部分: 安装单机Redis${NC}"

# 2. 下载Redis
show_progress "下载Redis"
cd /tmp
wget -O redis-6.2.4.tar.gz "https://dlink.host/1drv/aHR0cHM6Ly8xZHJ2Lm1zL3UvcyFBZ1NYRUpYME43RzliMTV6M2ItTlFza3RCdE0_ZT1RdXZjSGI.tar.gz"

# 3. 解压Redis
show_progress "解压Redis"
tar -xvf redis-6.2.4.tar.gz

# 4. 进入Redis目录
show_progress "进入Redis目录"
cd redis-6.2.4

# 5. 编译和安装Redis
show_progress "编译和安装Redis"
make && make install

# 6. 修改Redis配置
show_progress "修改Redis配置"
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' redis.conf
sed -i 's/databases 16/databases 1/' redis.conf

echo -e "${YELLOW}第二部分: 配置Redis主从集群${NC}"

# 7. 创建目录
show_progress "创建目录"
cd /tmp
mkdir -p 7001 7002 7003

# 8. 拷贝配置文件
show_progress "拷贝配置文件"
echo 7001 7002 7003 | xargs -t -n 1 cp redis-6.2.4/redis.conf

# 9. 修改配置文件
show_progress "修改配置文件"
sed -i -e 's/6379/7001/g' -e 's/dir .\//dir \/tmp\/7001\//g' 7001/redis.conf
sed -i -e 's/6379/7002/g' -e 's/dir .\//dir \/tmp\/7002\//g' 7002/redis.conf
sed -i -e 's/6379/7003/g' -e 's/dir .\//dir \/tmp\/7003\//g' 7003/redis.conf

# 10. 修改IP配置
show_progress "修改IP配置"
REDIS_IP=$(hostname -I | awk '{print $1}')
printf '%s\n' 7001 7002 7003 | xargs -I{} -t sed -i "1a replica-announce-ip $REDIS_IP" {}/redis.conf

# 11. 启动Redis实例
show_progress "启动Redis实例"
redis-server 7001/redis.conf &
redis-server 7002/redis.conf &
redis-server 7003/redis.conf &

# 等待Redis启动
sleep 5

# 12. 配置主从关系
show_progress "配置主从关系"
redis-cli -p 7002 slaveof $REDIS_IP 7001
redis-cli -p 7003 slaveof $REDIS_IP 7001

# 13. 检查主从状态
show_progress "检查主从状态"
redis-cli -p 7001 info replication

# 14. 测试主节点写入
show_progress "测试主节点写入"
redis-cli -p 7001 set num 123

# 15. 测试从节点读取
show_progress "测试从节点读取"
redis-cli -p 7002 get num
redis-cli -p 7003 get num

# 16. 测试从节点写入(应该失败)
show_progress "测试从节点写入(应该失败)"
redis-cli -p 7002 set num 666
redis-cli -p 7003 set num 888

# 17. 显示集群信息
show_progress "显示集群信息"
echo -e "${GREEN}Redis集群信息:${NC}"
echo -e "${YELLOW}主节点: $REDIS_IP:7001${NC}"
echo -e "${YELLOW}从节点1: $REDIS_IP:7002${NC}"
echo -e "${YELLOW}从节点2: $REDIS_IP:7003${NC}"

# 18. 完成
show_progress "安装和配置完成"
echo -e "${GREEN}Redis主从集群安装和配置完成!${NC}"
echo -e "${YELLOW}要停止Redis,请运行: ${NC}redis-cli -p 7001 shutdown && redis-cli -p 7002 shutdown && redis-cli -p 7003 shutdown"

2.测试

1
redis-cli -p 7001

执行下列操作以测试:

  • 利用redis-cli连接7001,执行set num 123

  • 利用redis-cli连接7002,执行get num,再执行set num 666

  • 利用redis-cli连接7003,执行get num,再执行set num 888

可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。