概念总结

集群配置前需要了解架构,集群分片主要分三种: 客户端分片:这个需要自己开发,对客户端要求严格,集群很难扩容 代理端分片:如codis,对客户端几乎无要求,集群容易扩容 服务端分片:如redis集群,需要智能客户端支持集群协议的,集群容易扩容

Codis3.2集群架构

服务端:codis-fe——codis-dashboard——codis-proxy——codis-group——codis-server 客户端:client——nginx-tcp——codis-proxy cdis-fe可以管理多个codis-dashboard 每个codis-dashboard代表一个产品线,每个codis-dashboard可以管理多个codis-proxy 每个codis-proxy可以管理多个codis-server group 每个codis-server group至少由两个codis-server组成,最少1主1备 由上可知一个大的codis集群可以分多个产品线,客户端连接各个产品线的codis-proxy,业务线之间可以做到物理隔离,比如group1,group2,group3分给codis-product1业务线,group4, group5,group6分给codis-product2业务线,codis-dashboard配置保存在zookeeper里。

特别注意

同一个codis-server加入多个codis-dashboard的codis-group里,但是在不同的codis-dashboard里面主备的角色要一致,这代表逻辑隔离。 同一个codis-server只加入唯一的codis-dashboard的codis-group里,这代表物理隔离。

宗旨方法

宗旨:多读书 多实践 追随内心 着实去做 方法:志存高远 勤学苦练 知错就改 自渡渡他

本文目录

一、Codis简介 二、Codis 3.x 三、Codis 3.x 由以下组件组成 四、安装部署 五、集群配置 六、Codis-fe面板操作 七、代理HA 八、客户端通过VIP访问 九、压力测试

一、Codis简介

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一 样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。 不支持命令列表 https://github.com/CodisLabs/codis/blob/release3.2/doc/unsupported\_cmds.md redis的修改 https://github.com/CodisLabs/codis/blob/release3.2/doc/redis\_change\_zh.md go安装 https://golang.org/doc/install

二、Codis 3.x

最新 release 版本为 codis-3.2,codis-server 基于 redis-3.2.8 支持 slot 同步迁移、异步迁移和并发迁移,对 key 大小无任何限制,迁移性能大幅度提升 相比 2.0:重构了整个集群组件通信方式,codis-proxy 与 zookeeper 实现了解耦,废弃了codis-config 等元数据存储支持 etcd/zookeeper/filesystem 等,可自行扩展支持新的存储,集群正常运行期间,即便元存储故障也不再影响 codis 集群,大大提升 codis-proxy 稳定性 对 codis-proxy 进行了大量性能优化,通过控制GC频率、减少对象创建、内存预分配、引入 cgo、jemalloc 等,使其吞吐还是延迟,都已达到 codis 项目中最佳 proxy 实现 select 命令,支持多 DB proxy 支持读写分离、优先读同 IP/同 DC 下副本功能 基于 redis-sentinel 实现主备自动切换 实现动态 pipeline 缓存区(减少内存分配以及所引起的 GC 问题) proxy 支持通过 HTTP 请求实时获取 runtime metrics,便于监控、运维 支持通过 influxdb 和 statsd 采集 proxy metrics slot auto rebalance 算法从 2.0 的基于 max memory policy 变更成基于 group 下 slot 数量 提供了更加友好的 dashboard 和 fe 界面,新增了很多按钮、跳转链接、错误状态等,有利于快速发现、处理集群故障 新增 SLOTSSCAN 指令,便于获取集群各个 slot 下的所有 key codis-proxy 与 codis-dashbaord 支持 docker 部署

三、Codis 3.x 由以下组件组成:

Codis Server:基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改。 Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。 对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例; 不同 codis-proxy 之间由 codis-dashboard 保证状态同步。 Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。 对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个; 所有对集群的修改都必须通过 codis-dashboard 完成。 Codis Admin:集群管理的命令行工具。 可用于控制 codis-proxy、codis-dashboard 状态以及访问外部存储。 Codis FE:集群管理界面。 多个集群实例共享可以共享同一个前端展示页面; 通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新。 Storage:为集群状态提供外部存储。 提供 Namespace 概念,不同集群的会按照不同 product name 进行组织; 目前仅提供了 Zookeeper、Etcd、Fs 三种实现,但是提供了抽象的 interface 可自行扩展。

四,安装部署

二进制部署(官网的支持CentOS7,Glibc2.14以上版本)

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
tar zxvf /root/codis3.2.0-go1.7.5-linux.tar.gz -C /usr/local/
ln -s /usr/local/codis3.2.0-go1.7.5-linux/ /usr/local/codis
/usr/local/codis/redis-cli -v
/usr/local/codis/redis-cli: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/codis/redis-cli)
排错
strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
需要安装GLIBC_2.14版本
直接使用CentOS7即可解决此问题。
源码部署(CentOS6/7都可)

1,java环境
yum -y install java-1.8.0
java -version

2,go环境
tar zxvf /root/go1.8.3.linux-amd64.tar.gz -C /usr/local/
/usr/local/go/bin/go version
mkdir -p /data/go
echo 'export PATH=$PATH:/usr/local/go/bin:/usr/local/codis/bin' >>/etc/profile
echo 'export GOPATH=/data/go' >>/etc/profile
source /etc/profile
go env GOPATH

3,codis安装
mkdir -p /data/go/src/github.com/CodisLabs/
tar -zxvf /root/codis-3.2.0.tar.gz -C /data/go/src/github.com/CodisLabs/
cd /data/go/src/github.com/CodisLabs/
mv codis-3.2.0/ codis
cd codis/
make
./bin/redis-cli -v
ln -s /data/go/src/github.com/CodisLabs/codis/ /usr/local/codis
cat bin/version
version = unknown version
compile = 2017-09-11 16:58:26 +0800 by go version go1.8.3 linux/amd64

4,zookeepr安装
tar -zxvf /root/zookeeper-3.4.10.tar.gz -C /usr/local
ln -s /usr/local/zookeeper-3.4.10 /usr/local/zookeeper
echo '/usr/local/zookeeper/bin/zkServer.sh start' >>/etc/rc.local
cat << EOF >> /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/data/zookeeper/data
clientPort=2181
server.1=192.168.188.120:2888:3888
server.2=192.168.188.121:2888:3888
server.3=192.168.188.122:2888:3888
EOF
###myid
#注意:2888是主从的通信端口,3888是选举端口,server后面的1,2,3是在data目录下myid文件里的数值
mkdir -p /data/zookeeper/data
echo '1' > /data/zookeeper/data/myid
/usr/local/zookeeper/bin/zkServer.sh start
/usr/local/zookeeper/bin/zkServer.sh status

5,其他节点直接打包/data/go/src/github.com/CodisLabs/codis.tar.gz复制过去即可
集群配置前需要了解架构,集群分片主要分三种:
客户端分片:这个需要自己开发,对客户端要求严格,集群很难扩容
代理端分片:如codis,对客户端几乎无要求,集群容易扩容
服务端分片:如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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
1、角色划分
192.168.188.120 codis120 codis-server zookeeper
192.168.188.121 codis121 codis-server zookeeper
192.168.188.122 codis122 codis-server zookeeper
192.168.188.123 codis123 codis-server codis-proxy nginx-tcp lvs
192.168.188.124 codis124 codis-server codis-proxy nginx-tcp lvs
192.168.188.125 codis125 codis-server codis-dashboard codis-fe
以下操作的基本目录
[root@codis125 codis]# pwd -L
/usr/local/codis
[root@codis125 codis]# pwd -P
/data/go/src/github.com/CodisLabs/codis

2,启动codis-dashobard(codis125上操作)
1),修改dashboard.toml配置文件
[root@codis125 codis]# cat config/dashboard.toml
主要修改这几行
# Set Coordinator, only accept "zookeeper" & "etcd" & "filesystem".
coordinator_name = "zookeeper"
coordinator_addr = "192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181"
# Set Codis Product Name/Auth.
product_name = "codis-product1"
product_auth = ""
# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:18080"

2),启动脚本
启动前需要修改脚本zookeeper地址池与product名称
[root@codis125 codis]#cat ./admin/codis-dashboard-admin.sh
$CODIS_ADMIN_TOOL_BIN -v --remove-lock --product=codis-product1 --zookeeper=192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181
[root@codis125 codis]# ./admin/codis-dashboard-admin.sh start

3),检查日志与端口
[root@codis125 codis]# cat log/codis-dashboard.log.2017-09-11
2017/09/11 17:42:08 main.go:78: [WARN] set ncpu = 8
2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181
2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - Connected to 192.168.188.121:2181
2017/09/11 17:42:08 topom.go:119: [WARN] create new topom:
{
"token": "a10e7a35209d1db8f21c8e89a78a6c9a",
"start_time": "2017-09-11 17:42:08.1058555 +0800 CST",
"admin_addr": "codis125:18080",
"product_name": "codis-product2",
"pid": 18029,
"pwd": "/usr/local/codis",
"sys": "Linux codis125 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux"
}
2017/09/11 17:42:08 main.go:103: [WARN] create topom with config
coordinator_name = "zookeeper"
coordinator_addr = "192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181"
admin_addr = "0.0.0.0:18080"
product_name = "codis-product1"
product_auth = ""
migration_method = "semi-async"
migration_parallel_slots = 100
migration_async_maxbulks = 200
migration_async_maxbytes = "32mb"
migration_async_numkeys = 500
migration_timeout = "30s"
sentinel_quorum = 2
sentinel_parallel_syncs = 1
sentinel_down_after = "30s"
sentinel_failover_timeout = "5m"
sentinel_notification_script = ""
sentinel_client_reconfig_script = ""
2017/09/11 17:42:08 topom.go:424: [WARN] admin start service on [::]:18080
2017/09/11 17:42:08 main.go:116: [WARN] option --pidfile = /usr/local/codis/bin/codis-dashboard.pid
2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - Authenticated: id=170697207944249344, timeout=40000
2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect
2017/09/11 17:42:08 main.go:140: [WARN] [0xc42033e120] dashboard is working ...
[root@codis125 codis]# netstat -tulpn |grep codis-dashboa
tcp6 0 0 :::18080 :::* LISTEN 32006/codis-dashboa

4),检查服务
http://192.168.188.125:18080/topom

3,启动codis-proxy(codis123与codis124上操作)
1),修改codis-proxy启动脚本
[root@codis124 codis]# cat admin/codis-proxy-admin.sh|grep DASH
CODIS_DASHBOARD_ADDR="192.168.188.125:18080"
2),修改proxy.toml配置
[root@codis124 codis]# cat config/proxy.toml|grep -Ev "^#|^$"
product_name = "codis-product1"
product_auth = ""
session_auth = ""
admin_addr = "0.0.0.0:11080"
proto_type = "tcp4"
proxy_addr = "0.0.0.0:19000"
3),启动codis-proxy脚本
[root@codis124 codis]# ./admin/codis-proxy-admin.sh start
4),检查日志与端口
[root@codis124 codis]# cat log/codis-proxy.log.2017-09-11
[root@codis124 codis]# netstat -tulpn|grep codis-proxy
tcp 0 0 0.0.0.0:19000 0.0.0.0:* LISTEN 31971/codis-proxy
tcp6 0 0 :::11080 :::* LISTEN 31971/codis-proxy

4,启动codis-server(需要在所有上操作)
1),修改启动脚本
vim /usr/local/codis/admin/codis-server-admin-6379.sh start
vim /usr/local/codis/admin/codis-server-admin-6380.sh start
主要注意以下几点
[root@codis125 codis]# cat /usr/local/codis/admin/codis-server-admin-6379.sh |grep -Ev "^#|^$"|grep 6379
CODIS_SERVER_PID_FILE=/data/codis/6379/redis_6379.pid
CODIS_SERVER_LOG_FILE=/data/codis/6379/redis_6379.log
CODIS_SERVER_CONF_FILE=$CODIS_CONF_DIR/redis-6379.conf
2),修改服务配置
[root@codis120 codis]# mkdir -p /data/redis/6379
[root@codis120 codis]# mkdir -p /data/redis/6380
[root@codis120 codis]# vim /usr/local/codis/config/redis-6379.conf
[root@codis120 codis]# vim /usr/local/codis/config/redis-6380.conf

主要是注意以下几点
[root@codis120 codis]# cat /usr/local/codis/config/redis-6379.conf |grep -Ev "^#|^$"|grep 6379
port 6379
pidfile /data/redis/6379/redis_6379.pid
logfile "/data/redis/6379/redis_6379.log"
dir /data/redis/6379
3),启动codis-server服务
[root@codis120 codis]# ./admin/codis-server-admin-6379.sh start
/usr/local/codis/admin/../config/redis-6379.conf
starting codis-server ...
[root@codis120 codis]# ./admin/codis-server-admin-6380.sh start
/usr/local/codis/admin/../config/redis-6380.conf
starting codis-server ...
4),检测日志与端口
[root@codis120 codis]# netstat -tulpn |grep codis-server
tcp 0 0 192.168.188.120:6379 0.0.0.0:* LISTEN 22231/codis-server
tcp 0 0 192.168.188.120:6380 0.0.0.0:* LISTEN 22308/codis-server

5,启动codis-fe(codis125上操作)
1),修改codis-fe启动脚本
[root@codis125 codis]# cat admin/codis-fe-admin.sh
主要修改这几行
#!/usr/bin/env bash
#COORDINATOR_NAME="filesystem"
#COORDINATOR_ADDR="/tmp/codis"
COORDINATOR_NAME="zookeeper"
COORDINATOR_ADDR="192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181"
2),启动codis-fe脚本
[root@codis125 codis]# ./admin/codis-fe-admin.sh start
3),检查日志与端口
[root@codis125 codis]# cat log/codis-fe.log.2017-09-11
2017/09/11 19:24:32 main.go:101: [WARN] set ncpu = 8
2017/09/11 19:24:32 main.go:104: [WARN] set listen = 0.0.0.0:9090
2017/09/11 19:24:32 main.go:120: [WARN] set assets = /usr/local/codis/bin/assets
2017/09/11 19:24:32 main.go:155: [WARN] set --zookeeper = 192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181
2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181
2017/09/11 19:24:32 main.go:209: [WARN] option --pidfile = /usr/local/codis/bin/codis-fe.pid
2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - Connected to 192.168.188.120:2181
2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - Authenticated: id=98639613905403907, timeout=40000
2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect
[root@codis125 codis]# netstat -tupnl |grep codis-fe
tcp6 0 0 :::9090 :::* LISTEN 32141/codis-fe
4),访问面板
http://192.168.188.125:9090/#codis-product1

六、Codis-fe面板操作

1、通过codis-fe添加group 通过web浏览器访问集群管理页面(fe地址:http://192.168.188.125:9090/#codis-product1) 选择我们刚搭建的集群 codis-product1,在 Proxy 栏可看到我们已经启动的 Proxy, 但是 Group 栏为空,因为我们启动的 codis-server 并未加入到集群 添加 NEW GROUP,NEW GROUP 行输入 1,再点击 NEW GROUP 即可 添加 Codis Server,Add Server 行输入我们刚刚启动的 codis-server 地址,添加到我们刚新建的 Group,然后再点击 Add Server 按钮即可。 如上依次添加6个group,12个codis-server,默认每组里面第一个添加的为主,第二个添加的设置为从,同一个节点2个实例不能设置为同一group。

2、通过codis-fe初始化solt 新增的集群 slot 状态是 offline,因此我们需要对它进行初始化(将 1024 个 slot 分配到各个 group),而初始化最快的方法可通过 fe 提供的 rebalance all slots 按钮来做,如下图 所示,点击此按钮,我们即快速完成了一个集群的搭建。 自动分配1024个solt到6个group,reblance all solts会自动分配完所以solt到6个group。

七、代理HA

1、在codis123与codis124上安装lvs与nginx-tcp 2、配置好VIP+19000端口为第一个codis-dashboard业务线使用,其他类推 192.168.188.131:19000 [root@codis124 keepalived]# vim keepalived.conf 注意大网段一般不使用多播,使用单播。 有的时候也用单播:比如路由交换层禁用了ARP的广播限制,造成KEEPALIVE主备协议无法通过广播的方式进行通信,造成主备两台服务器都强占HAVIP地址,出现同时两台服务器都有VIP地址 的情况出现,必须通过配置来指定IP的两台服务器间进行通讯。

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
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 131
unicast_src_ip 192.168.188.124
unicast_peer {
192.168.188.123
}
priority 50
advert_int 3
authentication {
auth_type PASS
auth_pass bitauto
}
virtual_ipaddress {
192.168.188.131
}
}

[root@codis124 keepalived]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
[root@codis124 keepalived]# systemctl start keepalived
[root@codis124 keepalived]# systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-09-12 11:01:31 CST; 5s ago
Process: 32865 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 32866 (keepalived)
CGroup: /system.slice/keepalived.service
├─32866 /usr/sbin/keepalived -D
├─32867 /usr/sbin/keepalived -D
└─32870 /usr/sbin/keepalived -D

[root@codis124 keepalived]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.188.131:19000 wrr
-> 192.168.188.123:19000 Route 0 0 0
-> 192.168.188.124:19000 Route 1 0 0

主从切换验证分别在主上停止启动keepalived
[root@codis124 keepalived]# tail -f /var/log/messages
Sep 12 11:01:31 codis124 Keepalived_healthcheckers[32867]: Configuration is using : 14608 Bytes
Sep 12 11:01:31 codis124 Keepalived_healthcheckers[32867]: Using LinkWatch kernel netlink reflector...
Sep 12 11:01:31 codis124 Keepalived_healthcheckers[32867]: Activating healthchecker for service [192.168.188.123]:19000
Sep 12 11:01:31 codis124 kernel: IPVS: [wrr] scheduler registered.
Sep 12 11:01:31 codis124 Keepalived_healthcheckers[32867]: Activating healthchecker for service [192.168.188.124]:19000
Sep 12 11:26:16 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 12 11:26:19 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 12 11:26:19 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) setting protocol VIPs.
Sep 12 11:26:19 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.188.131
Sep 12 11:26:19 codis124 Keepalived_healthcheckers[32867]: Netlink reflector reports IP 192.168.188.131 added
Sep 12 11:26:24 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.188.131
Sep 12 11:26:43 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Received higher prio advert
Sep 12 11:26:43 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) Entering BACKUP STATE
Sep 12 11:26:43 codis124 Keepalived_vrrp[32870]: VRRP_Instance(VI_1) removing protocol VIPs.
Sep 12 11:26:43 codis124 Keepalived_healthcheckers[32867]: Netlink reflector reports IP 192.168.188.131 removed

八、客户端通过代理VIP访问

最后验证效果

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
[root@codis120 config]# telnet 192.168.188.131 19000
Trying 192.168.188.131...
Connected to 192.168.188.131.
Escape character is '^]'.
info
$2284
# Server
redis_version:3.2.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:d0ce2cfe7ff224ff
redis_mode:standalone
os:Linux 3.10.0-514.26.2.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:31915
run_id:e5e12d6e422b0670a3a761350f6ad5ac5ec14d6f
tcp_port:6379
uptime_in_seconds:58481
uptime_in_days:0
hz:10
lru_clock:12015071
executable:/usr/local/codis/admin/../bin/codis-server
config_file:/usr/local/codis/admin/../config/redis-6379.conf
# Clients
connected_clients:33
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:4554376
used_memory_human:4.34M
used_memory_rss:16281600
used_memory_rss_human:15.53M
used_memory_peak:5537432
used_memory_peak_human:5.28M
total_system_memory:16650620928
total_system_memory_human:15.51G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:3.57
mem_allocator:jemalloc-4.0.3
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1505139604
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:99
total_commands_processed:448295
instantaneous_ops_per_sec:13
total_net_input_bytes:8662811
total_net_output_bytes:113597360
instantaneous_input_kbps:0.22
instantaneous_output_kbps:2.89
rejected_connections:0
sync_full:1
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:794
migrate_cached_sockets:0
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.188.122,port=6380,state=online,offset=66655,lag=1
master_repl_offset:66669
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:66668
# CPU
used_cpu_sys:23.81
used_cpu_user:19.91
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace

九、压力测试

多个客户端压力测试效果如下: redis-benchmark -h 192.168.188.131 -p 19000 -q -n 1000000 -c 20 -d 100k