13、高性能web架构之用Codis实现Redis分布式集群

通过codis实现redis集群

 

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

Codis是豌豆荚的开源方案,目前在redis集群实现方式对比,codis集群比较稳定的方案,并且客户端不需要做任何修改,相对redis cluster兼容性更强,可节约大量开发成本并减少大量后期维护成本,豌豆荚gitlab地址https://github.com/pingcap,豌豆荚codis项目官方github地址https://github.com/CodisLabs/codis,codis 主要由以下特点:

 

可以无缝迁移到codis,自带迁移工具,并且案例较多

可以动态扩容和缩容

多业务完全透明,业务不知道运行的是codis

支持多核心CPU,twemproxy只能单核

codis是中心基于proxy的设计,是客户端像连接单机一样操作proxy

有部分命令不能支持,比如keys *等

支持group划分,组内可以设置一个主多个从,通过sentinel 监控redis主从,当主down了自动将从切换为主

设置的进程要最大等于CPU的核心,不能超过CPU的核心数

其依赖于zookeeper,里面保存的是key保存的redis主机位置,因此zookeeper要做高可用

监控可以使用接口和dashboard

 

 

 

 

架构环境:
codis-proxy相当于redis,即连接codis-proxy和连接redis是没有任何区别的,codis-proxy无状态,不负责记录是否在哪保存,数据在zookeeper记录,即codis proxy向zookeeper查询key的记录位置,proxy 将请求转发到一个组进行处理,一个组里面有一个master和一个或者多个slave组成,默认有1024个槽位,redis cluster 默认有16384个槽位,其把不同的槽位的内容放在不通的group。
部署环境:1台服务器(生产环境不能这么做)

 

 

结合上一章的redis

  • 安装依赖包和go环境:

[root@zabbix-node1 ~]# yum -y install gcc glibc gcc-c++ make git autoconf automake libtool

 

1、下载安装包:(貌似海外服务器才能下载,如果不能下载,从其他途径下载  链接:https://pan.baidu.com/s/1zPukemlqp2zHPN4okys_EA 密码:up74)下载后加压就可以使用了:

[root@zabbix-node1 ~]# tar -zxf go1.8.1.linux-amd64.tar.gz -C /usr/local/

 

 

2、安装JDK,自己在官网下载一个安装即可,版本要求不严格,后面的zookeeper会用到jdk:

[root@zabbix-node1 ~]#wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz

[root@zabbix-node1 ~]# tar zxf jdk-8u181-linux-x64.tar.gz   

[root@zabbix-node1 ~]# mv jdk1.8.0_181/ /usr/local/

[root@zabbix-node1 ~]# ln -s /usr/local/jdk1.8.0_181/ /usr/local/jdk

 

二、zookeeper部署:

1、安装zookeeper:

[root@zabbix-node1 ~]# wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz

[root@zabbix-node1 ~]# tar -zxf zookeeper-3.4.13.tar.gz -C /usr/local/

[root@zabbix-node1 ~]# ln -s /usr/local/zookeeper-3.4.13/ /usr/local/zookeeper

[root@zabbix-node1 ~]# mv /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

 

a、Zookeeper配置文件修改


下面就是zoo.cfg配置文件的修改了。那么我们首先要熟悉下zookeeper配置文件。
[root@linux-node1 ~]# cat/usr/local/zookeeper/conf/zoo.cfg
tickTime=2000    #服务器和客户端的心跳维持间隔,间隔多久发送心跳 ,2000微秒等于2毫秒

initLimit=10    #选举的时候的时间间隔是10次,10次 * 6000微秒 即60秒

syncLimit=5    # Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度

dataDir=/opt/zk1 # 数据保存目录

clientPort=2181 # 客户端连接的端口

 

# 集群端口和ID配置

server.1=192.168.91.133:3181:4181

server.2=192.168.91.133:3182:4182

server.3=192.168.91.133:3183:4183

 

b、zookeeper配置文件详解:

tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*6000=60 秒

syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*6000=30 秒

server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

 

 

 

c、创建三个目录用来存放zookeeper数据:

[root@zabbix-node1 ~]# mkdir -p /data/zk1 /data/zk2 /data/zk3

[root@zabbix-node1 ~]# echo "1" > /data/zk1/myid

[root@zabbix-node1 ~]# echo "2" > /data/zk2/myid

[root@zabbix-node1 ~]# echo "3" > /data/zk3/myid

 

d、生成三分zookeeper配置文件:

[root@zabbix-node1 ~]# cp /usr/local/zookeeper/conf/zoo.cfg /usr/local/zookeeper/conf/zk1.cfg

[root@zabbix-node1 ~]# cp /usr/local/zookeeper/conf/zoo.cfg /usr/local/zookeeper/conf/zk2.cfg

[root@zabbix-node1 ~]# cp /usr/local/zookeeper/conf/zoo.cfg /usr/local/zookeeper/conf/zk3.cfg

 

e、修改zk2和zk3的配置文件,使用对应的数据目录和端口:

[root@zabbix-node1 ~]# sed -i 's/zk1/zk2/g' /usr/local/zookeeper/conf/zk2.cfg

[root@zabbix-node1 ~]# sed -i 's/2181/2182/g' /usr/local/zookeeper/conf/zk2.cfg

[root@zabbix-node1 ~]# sed -i 's/zk1/zk3/g' /usr/local/zookeeper/conf/zk3.cfg

[root@zabbix-node1 ~]# sed -i 's/2181/2183/g' /usr/local/zookeeper/conf/zk3.cfg

 

 

f、启动zookeeper:

[root@zabbix-node1 ~]# /usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zk1.cfg

[root@zabbix-node1 ~]# /usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zk2.cfg  

[root@zabbix-node1 ~]# /usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zk3.cfg

 

 

g、查看zookeeper启动状态:

[root@zabbix-node1 ~]# /usr/local/zookeeper/bin/zkServer.sh status /usr/local/zookeeper/conf/zk1.cfg

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/conf/zk1.cfg

Mode: follower #备用节点

[root@zabbix-node1 ~]# /usr/local/zookeeper/bin/zkServer.sh status /usr/local/zookeeper/conf/zk2.cfg

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/conf/zk2.cfg

Mode: leader #主节点

[root@zabbix-node1 ~]# /usr/local/zookeeper/bin/zkServer.sh status /usr/local/zookeeper/conf/zk3.cfg

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/conf/zk3.cfg

Mode: follower #备用节点

 

h、连接测试zookeeper:

 

[root@zabbix-node1 ~]# /usr/local/zookeeper/bin/zkCli.sh -server 192.168.91.133:2181

查询端口:

注意:通过上面的例子可以看到,目前zk3是leader,其它两个节点是follower。本文由于实验环境局限使用的是伪分布式,注意生产环境不建议使用。

 

 

 

 

 

 

2、修改环境变量/etc/profile下添加以下内容:

export GOROOT=/usr/local/go

export GOPATH=/usr/local/codis

JAVA_HOME=/usr/local/jdk

CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export ZOOKEEPER_HOME=/usr/local/zookeeper

export PATH=$PATH:$GOROOT/bin:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin

 

然后执行 source /etc/profile

[root@zabbix-node1 ~]# source /etc/profile

 

3、测试一下go是否可以正常使用:

[root@zabbix-node1 ~]# go version

go version go1.8.1 linux/amd64

[root@zabbix-node1 ~]# go run hello.go

hello,world

[root@zabbix-node1 ~]# cat hello.go

        package main

    import "fmt"

 

    func main(){

        fmt.Printf("hello,world\n")

 }

[root@zabbix-node1 ~]# go run hello.go

hello,world

注:可以看到,正常打印hello,world了,在命令直接输入java,如果出现一大堆使用说明,就意味java安装成功了。

 

 

 

 

 

 

三、部署codis:

1、下载codis源代码:

注意:Codis 源代码需要下载到 $GOPATH/src/github.com/CodisLabs/codis:

[root@zabbix-node1 ~]# mkdir -p $GOPATH/src/github.com/CodisLabs

[root@zabbix-node1 ~]# ll /usr/local/codis/src/github.com/CodisLabs/

total 0

[root@zabbix-node1 ~]# cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2

 

 

2、编译codis源代码:

[root@zabbix-node1 CodisLabs]# cd /usr/local/codis/src/github.com/CodisLabs/codis/

[root@zabbix-node1 codis]# ls

admin    config  Dockerfile  Godeps      MIT-LICENSE.txt  scripts  wandoujia_license.txt

ansible  deploy  example     kubernetes  pkg              vendor

cmd      doc     extern      Makefile    README.md        version

[root@zabbix-node1 codis]# make

 

[root@zabbix-node1 codis]# ll bin/

drwxr-xr-x 4 root root      117 Aug 30 08:53 assets

-rwxr-xr-x 1 root root 15230672 Aug 30 08:53 codis-admin

-rwxr-xr-x 1 root root 16812040 Aug 30 08:52 codis-dashboard

-rwxr-xr-x 1 root root 14955256 Aug 30 08:53 codis-fe

-rwxr-xr-x 1 root root 13345144 Aug 30 08:53 codis-ha

-rwxr-xr-x 1 root root 18863320 Aug 30 08:53 codis-proxy

-rwxr-xr-x 1 root root  5366816 Aug 30 08:51 codis-server

-rwxr-xr-x 1 root root  2433008 Aug 30 08:51 redis-benchmark

-rwxr-xr-x 1 root root  2587080 Aug 30 08:51 redis-cli

-rwxr-xr-x 1 root root  5366816 Aug 30 08:51 redis-sentinel

-rw-r--r-- 1 root root      166 Aug 30 08:51 version

[root@zabbix-node1 codis]# cat bin/version

version = 2018-07-29 20:03:04 +0800 @7191a280026cefd50a09db6ba82fe180249d78b0 @3.2.2-9-g7191a28

compile = 2018-08-30 08:51:58 -0400 by go version go1.8.1 linux/amd64

 

 

3、修改dashboard和proxy的配置文件:

a、默认启动的会读取config目录的dashboard.toml和proxy.toml文件,编辑如下:

[root@zabbix-node1 ~]# vi /usr/local/codis/src/github.com/CodisLabs/codis/config/dashboard.toml

coordinator_name = "zookeeper"

coordinator_addr = "192.168.91.133:2181,192.168.91.133:2182,192.168.91.133:2183"

product_name = "codis-chinasoft"

 

[root@zabbix-node1 ~]# grep '^[a-z]' /usr/local/codis/src/github.com/CodisLabs/codis/config/proxy.toml

product_name = "codis-chinasoft"

product_auth = "123456"

jodis_addr = "192.168.91.133:2181,192.168.91.133:2182,192.168.91.133:2183"

jodis_timeout = "20s"

jodis_compatible = true

 

4、启动dashboard:

[root@zabbix-node1 ~]# nohup /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-dashboard --ncpu=1 --config=/usr/local/codis/src/github.com/CodisLabs/codis/config/dashboard.toml --log=dashboard.log --log-level=WARN >> /var/log/codis_dashboard.log &

 

 

 

5、启动代理:

[root@zabbix-node1 ~]# nohup /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-proxy --ncpu=1 --config=/usr/local/codis/src/github.com/CodisLabs/codis/config/proxy.toml --log=proxy.log --log-level=WARN >> /var/log/codis_proxy.log &

 

 

6、启动codis-admin,我们需要将admin与proxy、dashboard关联起来:

[root@zabbix-node1 ~]# /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-admin --dashboard=127.0.0.1:18080 --create-proxy -x 127.0.0.1:11080

[root@zabbix-node1 ~]# /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-admin --dashboard=192.168.91.133:18080 --create-proxy -x 192.168.91.133:11080

注:其中 127.0.0.1:18080 以及 127.0.0.1:11080 分别为 dashboard 和 proxy 的 admin_addr 地址;

报错:

33:18080 --create-proxy -x 192.168.91.133:11080

2018/08/31 03:16:23 dashboard.go:369: [PANIC] call rpc create-proxy to dashboard 192.168.91.133:18080 failed

[error]: [Remote Error] proxy-[2ec31af158d15f17887955d85f801110] already exists

    2   /usr/local/codis/src/github.com/CodisLabs/codis/pkg/topom/topom_proxy.go:32

            github.com/CodisLabs/codis/pkg/topom.(*Topom).CreateProxy

    1   /usr/local/codis/src/github.com/CodisLabs/codis/pkg/topom/topom_api.go:244

            github.com/CodisLabs/codis/pkg/topom.(*apiServer).CreateProxy

    0   /usr/local/codis/src/github.com/CodisLabs/codis/pkg/topom/topom_api.go:81

            github.com/CodisLabs/codis/pkg/topom.(*apiServer).CreateProxy-fm

        ... ...

[stack]:

    2   /usr/local/codis/src/github.com/CodisLabs/codis/cmd/admin/dashboard.go:369

            main.(*cmdDashboard).handleProxyCommand

    1   /usr/local/codis/src/github.com/CodisLabs/codis/cmd/admin/dashboard.go:52

            main.(*cmdDashboard).Main

    0   /usr/local/codis/src/github.com/CodisLabs/codis/cmd/admin/main.go:82

            main.main

解决方法(查看ID,再删除ID,最后重新执行

/usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-admin --dashboard=192.168.91.133:18080 --create-proxy -x 192.168.91.133:11080

):

[root@zabbix-node1 ~]# /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-admin --dashboard=192.168.91.133:18080 --proxy-status

[ ] proxy-1 [T] 2ec31af158d15f17887955d85f801110 [A] 192.168.91.133:11080 [P] 192.168.91.133:19000

[root@zabbix-node1 ~]# ./bin/codis-admin --dashboard=192.168.91.133:18080 --remove-proxy --token=2ec31af158d15f17887955d85f801110 --force

[root@zabbix-node1 ~]# /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-admin --dashboard=192.168.91.133:18080 --create-proxy -x 192.168.91.133:11080

 

 

 

 

 

7、启动codis-server,并创建redis实例(此处我们创建4个redis实例,给予codis修改过的redis-3.2.8非原生redis)

[root@zabbix-node1 ~]# cd /usr/local/codis/src/github.com/CodisLabs/codis/

[root@zabbix-node1 codis]# mkdir -pv /var/lib/redis_638{1..4}

mkdir: created directory ‘/var/lib/redis_6381’

mkdir: created directory ‘/var/lib/redis_6382’

mkdir: created directory ‘/var/lib/redis_6383’

mkdir: created directory ‘/var/lib/redis_6384’

[root@zabbix-node1 codis]#

[root@zabbix-node1 codis]# cp config/redis.conf .

 

 

 

  1. 修改redis.conf配置文件:

[root@zabbix-node1 codis]# pwd

/usr/local/codis/src/github.com/CodisLabs/codis

[root@zabbix-node1 codis]# vi redis.conf

pidfile /var/run/redis_6381.pid

port 6381

dbfilename dump_6381.rdb

dir /var/lib/redis_6381

logfile "/tmp/redis_6381.log"

maxmemory 1g #一定要设置最大内存,否则后面的codis无法使用

 

[root@zabbix-node1 codis]# cp redis.conf redis_6381.conf

[root@zabbix-node1 codis]# cp redis_6381.conf redis_6382.conf

[root@zabbix-node1 codis]# cp redis_6381.conf redis_6383.conf

[root@zabbix-node1 codis]# cp redis_6381.conf redis_6384.conf

[root@zabbix-node1 codis]# sed -i 's/6381/6382/g' redis_6382.conf

[root@zabbix-node1 codis]# sed -i 's/6381/6383/g' redis_6383.conf

[root@zabbix-node1 codis]# sed -i 's/6381/6384/g' redis_6384.conf

 

 

 

9、通过codis-server指定redis.conf文件启动redis服务,不能通过redis命令启动redis服务,通过redis启动的redis 服务加到codis集群无法正常使用:

[root@zabbix-node1 codis]# ./bin/codis-server ./redis_6381.conf

[root@zabbix-node1 codis]# ./bin/codis-server ./redis_6382.conf

[root@zabbix-node1 codis]# ./bin/codis-server ./redis_6383.conf

[root@zabbix-node1 codis]# ./bin/codis-server ./redis_6384.conf

 

遇到一个报错:

[root@zabbix-node1 codis]# ./bin/codis-server ./redis_6381.conf

*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 194
'always-show-logo yes'
Bad directive or wrong number of arguments

 

edis.conf 第194行
always-show-logo yes
发现我下载了两个版本的redis:3.2 和 4.0.11(使用/usr/local/redis/redis.conf 不行)
我用codis3.2程序启动4.0.8 的redis.conf配置,所以会起不来经过两份配置文件对比发现很多配置有区别(codis3.2就要用redis3.2的配置文件)
[root@zabbix-node1 codis]# diff /usr/local/redis/redis.conf /usr/local/codis/src/github.com/CodisLabs/codis/config/redis.conf

 

解决方法:

因为codis是3.2版本的,所以我直接复制

/usr/local/codis/src/github.com/CodisLabs/codis/config/redis.conf作redis_638[1-4].conf ,具体看上面的第8点步骤:

 

 

 

 

10、验证通过codis启动redis 服务是否成功:

[root@zabbix-node1 codis]# netstat -tunlp | grep 638*

tcp        0      0 127.0.0.1:6381          0.0.0.0:*               LISTEN      2459/./bin/codis-se

tcp        0      0 127.0.0.1:6382          0.0.0.0:*               LISTEN      2467/./bin/codis-se

tcp        0      0 127.0.0.1:6383          0.0.0.0:*               LISTEN      2472/./bin/codis-se

tcp        0      0 127.0.0.1:6384          0.0.0.0:*               LISTEN      2477/./bin/codis-se

 

 

  1. 启动codis-fe,端口8080比较常用,为了避免冲突指定8090:

[root@zabbix-node1 ~]# nohup /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe --ncpu=1 --log=fe.log --log-level=WARN --zookeeper=192.168.91.133:2181 --listen=192.168.91.133:8090 &

[root@zabbix-node1 ~]# netstat -tnlp | grep 8090

tcp        0      0 192.168.91.133:8090     0.0.0.0:*               LISTEN      2488/codis-fe

 

 

12、通过网页访问:http://192.168.91.133:8090 可以看到codis的管理页面

 

13、管理界面的配置实用:
通过fe添加group
通过web浏览器访问集群管理页面(fe地址:192.168.91.133:8090) 选择我们刚搭建的集群 codis-chinasoft,在 Proxy 栏可看到我们已经启动的 Proxy, 但是 Group 栏为空,因为我们启动的 codis-server 并未加入到集群 添加 NEW GROUP,NEW GROUP 行输入 1,再点击 NEW GROUP 即可 添加 Codis Server,

 

添加实例(即添加后端的redis服务器)
Add Server 行输入我们刚刚启动的 codis-server 地址,添加到我们刚新建的 Group,然后再点击 Add Server 按钮即可,如下图所示

 

 

 

 

 

14、对slots进行分组

如下图所示,输入所要分组的slots的起和止的范围,然后输入组ID,点击后面按钮即可。

 

 

 

 

 

15、通过codis-proxy连接redis进行测试:

[root@zabbix-node1 ~]# cd /usr/local/codis/src/github.com/CodisLabs/codis/bin/

[root@zabbix-node1 bin]# ./redis-cli -h 192.168.91.133 -p 19000

192.168.91.133:19000> info

# Server

redis_version:3.2.11

redis_git_sha1:7191a280

redis_git_dirty:0

redis_build_id:17caf190cc129951

redis_mode:standalone

os:Linux 3.10.0-514.el7.x86_64 x86_64

arch_bits:64

multiplexing_api:epoll

gcc_version:4.8.5

process_id:2472

run_id:5211d2f66bdfd90ff571c62cc63eeaa8bdb56622

tcp_port:6383

uptime_in_seconds:8429

uptime_in_days:0

hz:10

lru_clock:8972301

executable:/usr/local/codis/src/github.com/CodisLabs/codis/./bin/codis-server

config_file:/usr/local/codis/src/github.com/CodisLabs/codis/./redis_6383.conf

 

# Clients

connected_clients:17

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

 

# Memory

used_memory:4057888

used_memory_human:3.87M

used_memory_rss:1085440

used_memory_rss_human:1.04M

used_memory_peak:4672152

used_memory_peak_human:4.46M

total_system_memory:342376448

total_system_memory_human:326.52M

used_memory_lua:37888

used_memory_lua_human:37.00K

maxmemory:1000000000

maxmemory_human:953.67M

maxmemory_policy:noeviction

mem_fragmentation_ratio:0.27

mem_allocator:jemalloc-4.0.3

 

# Persistence

loading:0

rdb_changes_since_last_save:0

rdb_bgsave_in_progress:0

rdb_last_save_time:1535691937

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:36

total_commands_processed:28660

instantaneous_ops_per_sec:3

total_net_input_bytes:745632

total_net_output_bytes:16939702

instantaneous_input_kbps:0.11

instantaneous_output_kbps:2.85

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:1017

migrate_cached_sockets:0

 

# Replication

role:master

connected_slaves:1

slave0:ip=127.0.0.1,port=6384,state=online,offset=9661,lag=1

master_repl_offset:9661

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:9660

 

# CPU

used_cpu_sys:25.38

used_cpu_user:17.20

used_cpu_sys_children:0.00

used_cpu_user_children:0.00

 

# Cluster

cluster_enabled:0

 

# Keyspace

192.168.91.133:19000>

192.168.91.133:19000> set name yanyb

OK

192.168.91.133:19000> get name

"yanyb"

192.168.91.133:19000> set work IT

OK

192.168.91.133:19000> get work

"IT"

192.168.91.133:19000> set name zengmei

OK

192.168.91.133:19000> set name chenshaoping

OK

192.168.91.133:19000> get name

"chenshaoping"

 

 

 

 

 

 

 

 

 

16、查看:

 

 

 

 

 

17、连接zookeeper,可以看到codis的group,slots,proxy等信息都记录在zook中

/usr/local/zookeeper/bin/zkCli.sh -server

 

[root@zabbix-node1 ~]# /usr/local/zookeeper/bin/zkCli.sh -server 192.168.91.133:2181

 

 

OK到这里codis实现redis分布式集群就此结束!

猜你喜欢

转载自blog.csdn.net/weixin_41515615/article/details/82257221