# 138. 商品详情页动态渲染系统:redis 复习以及 twemproxy 基础知识讲解
# 部署 redis
本次使用 redis-2.8.19.tar.gz,关于该版本过旧问题:实际在做类似这种 nginx+lua 生产环境的部署的时候,不一定用最新的版本就是最好,老版本一般比较稳定,nginx+lua 整合用老点的版本,会比较保险一些
cd /usr/local/redis-test
tar -zxvf redis-2.8.19.tar.gz
cd redis-2.8.19
make
nohup /usr/local/redis-test/redis-2.8.19/src/redis-server /usr/local/redis-test/redis-2.8.19/redis.conf &
# 查看 redis 进程
ps -aux | grep redis
# 连接该实例
/usr/local/redis-test/redis-2.8.19/src/redis-cli -p 6379
# 简单测试是否正常存取值
set k1 v1
get k1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# twemproxy 部署
不要使用自动安装,因为对版本有要求,自动安装的版本过低
yum install -y autoconf automake libtool
# 由于对版本有要求,所以这里还是需要自己手动安装
yum remove -y autoconf --直接将 autoconf 和 automake、libtool 都删除掉了
1
2
3
2
3
安装到 /usr/local/twemproxy-test 目录下
cd /usr/local/twemproxy-test
# 依赖安装
wget ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar -zxvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr
make && make install
wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
tar -zxvf automake-1.14.tar.gz
cd automake-1.14
./bootstrap.sh
./configure --prefix=/usr
make && make install
wget http://ftpmirror.gnu.org/libtool/libtool-2.4.2.tar.gz
tar -zxvf libtool-2.4.2.tar.gz
cd libtool-2.4.2
./configure --prefix=/usr
make && make install
# twemproxy 安装
tar -zxvf twemproxy-0.4.0.tar.gz
cd twemproxy-0.4.0
autoreconf -fvi
./configure && make
# 修改配置文件
cd /usr/local/twemproxy-test/twemproxy-0.4.0/conf/
# 先备份一下原始配置文件
mv nutcracker.yml nutcracker.back.yml
vi nutcracker.yml
# 将一下内容写入新建的 nutcracker.yml 文件中,配置什么意思先不要管,后续会讲解
server1:
listen: 127.0.0.1:1111
hash: fnv1a_64
distribution: ketama
redis: true
servers:
- 127.0.0.1:6379:1
# 启动:-d 后台启动 -c 指定配置文件
/usr/local/twemproxy-test/twemproxy-0.4.0/src/nutcracker -d -c /usr/local/twemproxy-test/twemproxy-0.4.0/conf/nutcracker.yml
# 查看启动进程
ps -aux | grep nutcracker
# 使用 redis-cli 连接到 tewmproxy 中间件
/usr/local/redis-test/redis-2.8.19/src/redis-cli -p 1111
get k1
set k1 v2
get k1
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
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
# redis 复习
这里的复习,本人未练习,之前讲过的
# redis 部分配置
redis.conf
port 6379
logfile ""
maxmemory 100mb
maxmemory-policy volatile-lru
maxmemory-samples 10
1
2
3
4
5
6
7
2
3
4
5
6
7
# redis 主从
# 两份文件分别将端口设置为 6379 和 6380
cp redis.conf redis_6379.conf
cp redis.conf redis_6380.conf
# 分别启动两个 redis 实例
nohup /usr/local/redis-2.8.19/src/redis-server /usr/local/redis-2.8.19/redis_6379.conf &
nohup /usr/local/redis-2.8.19/src/redis-server /usr/local/redis-2.8.19/redis_6380.conf &
ps -aux | grep redis
# 通过从实例客户端挂载主从
/usr/local/redis-2.8.19/src/redis-cli -p 6380
slaveof 127.0.0.1 6379
info replication
# 测试注册是否正常
/usr/local/redis-2.8.19/src/redis-cli -p 6379
set k2 v2
/usr/local/redis-2.8.19/src/redis-cli -p 6380
get k2
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
# twemproxy 讲解
eshop-detail-test:
listen: 127.0.0.1:1111
hash: fnv1a_64
distribution: ketama
timeout: 1000
redis: true
servers:
- 127.0.0.1:6379:1 test-redis-01
- 127.0.0.1:6380:1 test-redis-02
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
eshop-detail-test:redis 集群的逻辑名称
listen:twemproxy 监听的端口号
hash:hash 散列算法
distribution:分片算法:有一致性 hash、取模等
timeout:与 redis 连接的超时时长
redis:true 为 redis,否则是 memcached
servers:redis 实例列表
一定要加别名,否则默认使用 ip:port:weight 来计算分片,如果宕机后更换机器,那么分片就不一样了,因此加了别名后,可以确保分片一定是准确的
你的客户端,java/nginx+lua,连接 twemproxy 写数据的时候,twemproxy 负责将数据分片,写入不同的 redis 实例
如果某个 redis 机器宕机,需要自动从一致性 hash 环上摘掉,等恢复后自动上线,可以使用以下配置
auto_eject_hosts: true
server_retry_timeout: 30000
server_failure_limit: 2
1
2
3
2
3
- auto_eject_hosts:自动摘除故障节点
- server_retry_timeout:每隔 30 秒判断故障节点是否正常,如果正常则放回一致性 hash 环
- server_failure_limit:多少次无响应,就从一致性 hash 环中摘除
关于一致性 hash 前面也讲解过了