# 139. 商品详情页动态渲染系统:部署双机房一主三从架构的 redis 主集群
# 部署架构
使用一个 redis 客户端,多份配置文件的方式启动 8 台 redis 实例
192.168.99.11 (机房1) 192.168.99.12 (机房2)
master:6401 master:6402 slave: 6401 slave: 6402
slave: 6403 slave:6404 slave: 6403 slave:6404
1
2
3
4
2
3
4
主从示意如下,一个 master 有一个从,从下面又挂一个从,组成了一个树形结构
192.168.99.11 master:6401
192.168.99.11 slave: 6403 ↑
192.168.99.12 slave: 6401 ↑
192.168.99.12 slave: 6403 ↑
192.168.99.11 master:6402
192.168.99.11 slave: 6404 ↑
192.168.99.12 slave: 6402 ↑
192.168.99.12 slave: 6404 ↑
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
看最上面的示意图。当机房 1 挂掉之后,由于机房 2 的 6401 是机房 1 的 6403 的从, 所以机房 2 的 6401 会升级为 master,这样一来,在机房 2 上还是存在一主一从的高可用 redis
# 开始搭建
首先要把之前部署的 redis-test 给 kill 掉。在 /usr/local/redis 中安装一个 reds
[root@eshop-detail01 local]# ps -ef | grep redis
root 12126 21476 0 06:29 pts/4 00:00:00 grep redis
root 31096 21476 0 02:43 pts/4 00:00:20 /usr/local/redis-test/redis-2.8.19/src/redis-server *:6379
[root@eshop-detail01 local]# kill -9 31096
1
2
3
4
2
3
4
cd /usr/local/redis
tar -zxvf redis-2.8.19.tar.gz
cd redis-2.8.19
make
# 复制 4 份配置文件,并修改配置文件中的 prot 值为文件名对应的端口号
cd /usr/local/redis/redis-2.8.19
cp redis.conf redis-6401.conf
cp redis.conf redis-6402.conf
cp redis.conf redis-6403.conf
cp redis.conf redis-6404.conf
# 以此启动 redis
cd /usr/local/redis/redis-2.8.19
nohup src/redis-server redis-6401.conf &
nohup src/redis-server redis-6402.conf &
nohup src/redis-server redis-6403.conf &
nohup src/redis-server redis-6404.conf &
# 查看 redis 进程
[root@eshop-detail01 redis-2.8.19]# ps -ef | grep redis
root 14987 21476 0 06:38 pts/4 00:00:00 src/redis-server *:6401
root 14992 21476 0 06:39 pts/4 00:00:00 src/redis-server *:6402
root 14999 21476 0 06:40 pts/4 00:00:00 src/redis-server *:6403
root 15002 21476 0 06:40 pts/4 00:00:00 src/redis-server *:6404
root 15006 21476 0 06:40 pts/4 00:00:00 grep redis
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
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
配置树形主从,下面是其中一台从节点的配置方式,按照上面讲解的树形结构配置自己的主节点
cd /usr/local/redis/redis-2.8.19
[root@eshop-detail01 redis-2.8.19]# src/redis-cli -p 6403
127.0.0.1:6403> slaveof 192.168.99.11 6401
OK
127.0.0.1:6403> info replication
# Replication
role:slave
master_host:192.168.99.11
master_port:6401
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:29
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
另外一台也如法炮制启动 4 个 redis 实例,另外一台机器上的 6401 信息
[root@eshop-detail02 redis-2.8.19]# src/redis-cli -p 6401
127.0.0.1:6401> info replication
# Replication
role:slave
master_host:192.168.99.11 # 机房 1 的 6403 是 master
master_port:6403
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:85
slave_priority:100
slave_read_only:1
connected_slaves:1 # 自己下面又有一个从 节点 6403
slave0:ip=192.168.99.12,port=6403,state=online,offset=15,lag=0
master_repl_offset:15
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 验证主从是否生效
# 在 192.168.99.11 上操作
cd /usr/local/redis/redis-2.8.19
src/redis-cli -p 6401
set k1 v1 # 去第二台机器上查看是否能获取到值
set k1 v2 # 修改 k1 为 v2 ,再去验证
# 在 192.168.99.12 上操作
cd /usr/local/redis/redis-2.8.19
src/redis-cli -p 6401
get k1 # 观察是否能获取到值
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11