概念总结 集群配置前需要了解架构,集群分片主要分三种: 客户端分片:这个需要自己开发,对客户端要求严格,集群很难扩容 代理端分片:如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