# 142. 商品详情页动态渲染系统:为每个机房的 redis 从集群部署 twemproxy 中间件
← 192.168.99.12 slave: 6405 并列作为 6401 的从(从集群)
192.168.99.11 master:6401 ← 192.168.99.11 slave: 6405
192.168.99.11 slave: 6403 ↑
192.168.99.12 slave: 6401 ↑
192.168.99.12 slave: 6403 ↑
← 192.168.99.12 slave: 6406 并列作为 6402 的从(从集群)
192.168.99.11 master:6402 ← 192.168.99.11 slave: 6406
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
10
11
2
3
4
5
6
7
8
9
10
11
这里说的从集群和上图理解的还不太一样,说实话这里讲课已经有点懵逼了, 现在已经不太确定上图示意的是否准确。
但是本节课内容讲解的从集群应该是每个主集群下的两个从 redis,如
[root@eshop-detail01 src]# ./redis-cli -p 6401
127.0.0.1:6401> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.99.11,port=6403,state=online,offset=3306,lag=1
slave1:ip=192.168.99.11,port=6405,state=online,offset=3306,lag=1
[root@eshop-detail01 src]# ./redis-cli -p 6402
127.0.0.1:6402> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.99.11,port=6404,state=online,offset=2660,lag=0
slave1:ip=192.168.99.12,port=6405,state=online,offset=2660,lag=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
本节课所讲的从集群是如上所示那样,对每个集群的从配置为一个读集群, 这里的规划是这样的:
- detail01:已经有一个 twemproxy 中间件了,只需要新增从集群的配置即可
- detail02:需要先安装一个 twemproxy,再配置从集群
安装这里就不再重复了,贴出每台机器的最终配置
detail01:/usr/local/twemproxy-0.4.0/conf/nutcracker.yml
redis-master: # 配置一个逻辑名称
listen: 127.0.0.1:1111
hash: fnv1a_64
distribution: ketama
redis: true
servers:
- 192.168.99.11:6401:1 redis01 # 指向两个主集群
- 192.168.99.11:6402:1 redis02
redis-slave: # 从集群
listen: 127.0.0.1:1112
hash: fnv1a_64
distribution: ketama
redis: true
servers:
- 192.168.99.11:6403:1 redis01
- 192.168.99.11:6405:1 redis02
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
detail02:/usr/local/twemproxy-0.4.0/conf/nutcracker.yml
redis-slave: # 从集群
listen: 127.0.0.1:1112
hash: fnv1a_64
distribution: ketama
redis: true
servers:
- 192.168.99.11:6404:1 redis01
- 192.168.99.12:6405:1 redis02
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
配置完成后,需要重启 nutcracker (kill 再启动)
测试路由是否正确
[root@eshop-detail01 src]# ./redis-cli -p 1112
127.0.0.1:1112> get hello
(nil)
127.0.0.1:1112> get k1
"v1"
127.0.0.1:1112> get k2
(nil)
127.0.0.1:1112> get p1
"p1"
127.0.0.1:1112> get product
"01"
[root@eshop-detail02 src]# ./redis-cli -p 1112
127.0.0.1:1112> get hello
"hello"
127.0.0.1:1112> get hell1
(nil)
127.0.0.1:1112> get hello1
"1"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
经过测试,都能读取到各自主集群同步的数据