# 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

这里说的从集群和上图理解的还不太一样,说实话这里讲课已经有点懵逼了, 现在已经不太确定上图示意的是否准确。

但是本节课内容讲解的从集群应该是每个主集群下的两个从 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

本节课所讲的从集群是如上所示那样,对每个集群的从配置为一个读集群, 这里的规划是这样的:

  • 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

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

配置完成后,需要重启 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

经过测试,都能读取到各自主集群同步的数据