Codis 3.2 部署配置汇总


概念总结

集群配置前需要了解架构,集群分片主要分三种:

客户端分片:这个需要自己开发,对客户端要求严格,集群很难扩容

代理端分片:如codis,对客户端几乎无要求,集群容易扩容

服务端分片:如redis集群,需要智能客户端支持集群协议的,集群容易扩容


codis3.2集群架构

Codis 3.2 部署配置汇总_第1张图片

服务端: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以上版本)

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集群,需要智能客户端支持集群协议的,集群容易扩容


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里,这代表物理隔离。





五,集群配置


1,角色划分

192.168.188.120 codis120codis-server  zookeeper

192.168.188.121 codis121codis-server  zookeeper

192.168.188.122 codis122codis-server  zookeeper

192.168.188.123 codis123codis-server  codis-proxy   nginx-tcp  lvs

192.168.188.124 codis124codis-server  codis-proxy   nginx-tcp  lvs

192.168.188.125 codis125   codis-server  codis-dashboardcodis-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的两台服务器间进行通讯。


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访问


最后验证效果


[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


九,压力测试

多个客户端跑压力测试QPS超过10万/s

Codis 3.2 部署配置汇总_第2张图片