Codis3.2详细部署步骤

1.简介

Codis3.x有如下特点:

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

1.1 总体架构

Codis3.2详细部署步骤_第1张图片

1.2 Codis组件介绍

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

2 安装步骤

通过rpm -qa|grep yum检查包是否安装
配置本地yum源,安装过程中可能需要安装一些依赖组件。
检查点:
gcc

2.1 机器列表

机器是本地虚拟机

IP 配置 机器名 安装服务
192.168.113.131 处理器1CPU 内存2G 硬盘20G redis1 Zookeeper,codis-server, codis-dashboard, codis-fe,codis-proxy, redis-sentinel
192.168.113.132 处理器1CPU 内存1G 硬盘20G redis2 Zookeeper,codis-server, redis-sentinel
192.168.113.133 处理器1CPU 内存1G硬盘20G redis3 Zookeeper,codis-server, redis-sentinel

2.2 安装JDK

  1. 卸载自带OPENJDK
    rpm -qa|grep java
    #卸载搜索出来的openjdk组件,使用以下命令(以下命令仅供参考,具体版本信息可能不一致,请根据搜索结果调整)
rpm -e java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 --nodeps 
rpm -e java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64 –nodeps
  1. 解压JDK安装包
    新建目录:mkdir /usr/local/java
    进入自己上传的JDK目录,解压到上述新建的目录
tar –zxvf jdk-8u161-linux-x64.tar.gz –C /usr/local/java
  1. 配置环境变量
    修改/etc/profile文件,在文件最后增加如下语句(供参考实际JDK版本文件夹可能略有不同):
export JAVA_HOME=/usr/local/java/jdk1.8.0_161 
export JRE_HOME=/usr/local/java/jdk1.8.0_161/jre 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib 
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

PS:此种修改方式是系统级,即对所有用户生效,请在专属服务器上采用这种配置。

  1. 刷新配置,验证生效
    执行命令刷新环境变量配置信息:source /etc/profile
    验证JDK是否安装成功:java –version

如果能正常打印版本信息说明安装正常,恭喜你完成了第一步。

2.3 配置HOSTS映射

使用vim /etc/hosts,修改HOSTS文件,增加:

192.168.113.131 redis1
192.168.113.132 redis2
192.168.113.133 redis3

2.4 安装Zookeeper

2.4.1 准备和解压安装包

下载地址https://www.apache.org/dyn/closer.cgi/zookeeper/
选用zookeeper-3.4.10.tar.gz版本

将zookeeper安装包上传至192.168.113.132的 /home/zookeeper 路径下。
使用远程拷贝命令,拷贝至其他两台ZK机器。

scp ./zookeeper-3.4.10.tar.gz root@192.168.113.132:/home/zookeeper
scp ./zookeeper-3.4.10.tar.gz root@192.168.113.133:/home/zookeeper

以下命令需要在全部ZK节点执行
解压zookeeper至/usr/local 执行命令:

tar -zxvf /home/zookeeper/zookeeper-3.4.10.tar.gz -C /usr/local/

2.4.2 配置ZK环境变量(可选)

此步骤的目的是:每次启动服务就不需要定位到Zookeeper的bin目录了
使用vim /etc/profile 将以下语句写入全局配置文件中

#zookeeper 
export ZK_HOME=/usr/local/zookeeper-3.4.10
export PATH=$ZK_HOME/bin:$PATH

Codis3.2详细部署步骤_第2张图片

2.4.3 配置ZK

进入配置文件路径

cd $ZK_HOME/conf

拷贝安装包里面的示例配置:

cp zoo_sample.cfg zoo.cfg

编辑zoo.cfg文件,具体配置如下:

dataDir=/usr/local/zookeeper-3.4.10/data
clientPort=2181
server.0=192.168.113.131:2888:3888
server.1=192.168.113.132:2888:3888
server.2=192.168.113.133:2888:3888

标红部分为需要修改的地方,如图:
Codis3.2详细部署步骤_第3张图片

创建临时文件夹
在$ZK_HOME下创建data目录,并创建myid文件写入对应server的ID。
拿192.168.113.131举例来说,执行以下步骤:

  1. 进入目录cd $ZK_HOME

  2. 创建文件夹mkdir data

  3. 创建myid文件,vim myid
    然后写入0保存退出即可(其他服务器重复以上步骤,填入对应的serverid即可)

  4. 启动ZK
    确认防火墙已经关闭

关闭防火墙

  1. 永久性生效
    开启:chkconfig iptables on
    关闭:chkconfig iptables off
  2. 即时生效,重启后失效
    开启:service iptables start
    关闭:service iptables stop

确认防火墙已关闭

#命令:
service iptables status
#输出:
iptables: Firewall is not running.

如果防火墙处于安全上的考量不能关闭,请配置ZK相关端口可以通过防火墙(以下命令供参考)
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp –permanent
systemctl restart firewalld

确认防火墙关闭后
可以在任意目录运行(前提是配置了$ZK_HOME):zkServer.sh start,三台机器启动完成以后,运行zkServer.sh status,检查ZK服务是否正常。

2.5 安装GO

判断服务器平台,下载对应的GO语言包,本地使用X86平台,下载“go1.9.2.linux-amd64.tar.gz”包点此下载,将压缩包上传至/home/go/go1.9.2.linux-amd64.tar.gz

在/usr/local/路径下创建go目录,mkdir /usr/local/go,然后执行解压命令

tar -zxvf /home/go/go1.9.2.linux-amd64.tar.gz -C /usr/local/go

创建GO工作目录:mkdir $HOME/godir
配置环境变量,修改/etc/profile,添加如下语句:

#GO相关环境变量
export GOROOT=/usr/local/go
export GOPATH=$HOME/godir
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin

注意检查/usr/local/go路径下是否嵌套一层go目录,将文件转移到上一层目录。

检查GO是否安装成功,执行命令: go version
如果出现如下所示:
在这里插入图片描述
原因是安装错了二进制编译包,64位系统不能安装32位编译包。

如下结果表示安装正确
在这里插入图片描述
接下来将GO语言环境安装到全部的Codis集群节点。

2.6 安装Codis3.2

2.6.1 编译Codis源码

只需要在一台机器上编译,将编译完的文件拷贝至其他节点即可。

下载地址:https://github.com/CodisLabs/codis/releases
上传至:/home/go 执行解压命令:

unzip -o codis-release3.2.zip -d ./codis-release3.2

进入解压后的目录,执行make

如果提示如图:
Codis3.2详细部署步骤_第4张图片

没有安装git,下载地址https://mirrors.edge.kernel.org/pub/software/scm/git/

$ tar -zxvf git-1.7.2.2.tar.gz
$ cd git-1.7.2.2
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install

如果配置了本地yum源可直接使用:yum install git 安装,自动解析依赖关系,可以避免很多莫名其妙的问题。

下载Codis源码,执行:
Git命令:git clone https://github.com/CodisLabs/codis.git
或者:go get github.com/CodisLabs/codis,
会将文件下载至$GOPATH中,必须是这个路径$GOPATH/src/github.com/CodisLabs/,不然会编译失败。

codis-release-src-fromgit.zip是我本地基于x86_64平台编译完成的文件,建议读者自行编译。

编译完成后,将源码目录下bin和config文件夹拷贝至/usr/local/codis下的bin和config文件夹。

2.6.2 配置和启动Codis-Server

Codis3.2是基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改。

序号 IP 主机名 部署程序
01 192.168.113.131 redis1 codis-server:(6379&6380)
02 192.168.113.132 redis2 codis-server:(6379&6380)
03 192.168.113.133 redis3 codis-server:(6379&6380)

修改主配置

#cd /usr/local/codis/config/
#cp redis.conf redis-6379.conf # 主配置
#vim redis-6379.conf # 修改配置
#以下为修改项,配置文件较长,请看仔细。
#bind 127.0.0.1 #一定要注释掉这行,表示redis只接受本地访问无法远程访问
protected-mode no
port 6379 # 绑定端口
pidfile /usr/local/codis/proc/redis_6379.pid # 进程ID文件路径
loglevel warning#可选修改只打印warn及以上的日志
logfile "/usr/local/codis/log/redis_6379.log" # 日志文件路径
dbfilename dump_6379.rdb # dump文件 
dir /usr/local/codis/data/redis_data_6379 # dump路径 
masterauth "123456" #可选配置 Master密码(从主同步密码)
requirepass "123456" # 可选配置,鉴权密码(客户端连接密码)

修改从配置

#cd /usr/local/codis/config/
#cp redis.conf redis-6380.conf # 主配置
#vim redis-6380.conf # 修改配置
#以下为修改项,配置文件较长,请看仔细。
#bind 127.0.0.1 #一定要注释掉这行,表示redis只接受本地访问无法远程访问
protected-mode no # 关闭保护模式
port 6380 # 绑定端口
pidfile /usr/local/codis/proc/redis_6380.pid # 进程ID文件路径
loglevel warning #可选配置,只打印warning及以上的日志
logfile "/usr/local/codis/log/redis_6380.log" # 日志文件路径
dbfilename dump_6380.rdb # dump文件 
dir /usr/local/codis/data/redis_data_6380 # dump路径 
masterauth "123456" # 建议配置 Master密码(从主同步密码)
requirepass "123456" # 建议配置,鉴权密码(客户端连接密码)

所需目录logfile和dir对应文件夹需要自行创建

mkdir /usr/local/codis/proc
mkdir /usr/local/codis/log
mkdir /usr/local/codis/data
mkdir /usr/local/codis/data/redis_data_6379
mkdir /usr/local/codis/data/redis_data_6380

配置完成后,将codis文件夹拷贝至其他两台机器。

scp /usr/local/codis/* root@192.168.113.132:/usr/local/codis
scp /usr/local/codis/* root@192.168.113.133:/usr/local/codis

然后启动

cd /usr/local/codis
./bin/codis-server ./config/redis-6379.conf
./bin/codis-server ./config/redis-6380.conf

cd /usr/local/codis/log目录查看启动日志,是否正常启动。
ps –ef|grep codis,可以看到有两个codis进程如图:
在这里插入图片描述
#启动 Codis-Server 以后后续使用 Codis-fe 或者 Codis-admin 将节点添加到集群

2.7 安装Codis-dashboard

作用:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。

1.对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;
2.所有对集群的修改都必须通过 codis-dashboard 完成。

序号 IP 主机名 部署程序
01 192.168.113.131 redis1 codis-dashborad:18080、codis-fe:18090

修改配置
使用codis工具生成配置

#cd /usr/local/codis/bin/ 
./codis-dashboard --default-conifg | tee ../config/dashboard.conf #生成配置 

修改配置vim …/conf/dashboard.conf # 修改配置

coordinator_name = "zookeeper" # 外部存储类型 
coordinator_addr = "redis1:2181, redis2:2181, redis3:2181" # 外部存储IP列表
product_name = "mot-codis" # 项目名称 
product_auth = "123456" # 集群密码(注意:需要与redis配置中的requirepass保持一致)
admin_addr = "0.0.0.0:18080" # RESTful API 端口

启动程序

cd /usr/local/codis/bin 
#--ncpu=24表示dashboard可以使用的CPU个数
#--config表示dashboard使用的配置文件
nohup ./codis-dashboard --ncpu=24 --config=/usr/local/codis/config/dashboard.conf --log=/usr/local/codis/log/dashboard.log --log-level=WARN & #启动程序(注意:使用绝对路径)

验证一下:ss -ntplu |grep codis-dashboard,结果如图:
在这里插入图片描述
启动参数描述如下:

序号 参数 描述 备注
01 –ncpu 最大使用CPU个数 建议给当前服务器最大CPU数量
02 –config 指定加载的配置文件路径 使用绝对路径
03 –log 指定日志输出路径 使用绝对路径
02 –log-level 指定日志级别 取值:INFO、WARN、DEBUG、ERROR,推荐使用WRAN.

完成以上2个步骤后,便完成了对codis-config的安装。
关闭程序
如果想关闭dashboard服务,可执行:

cd /usr/local/codis/bin 
./codis-admin --dashboard=192.168.113.131:18080 --shutdown

2.8 安装Codis-proxy

作用:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。
1.对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;
2.不同 codis-proxy 之间由 codis-dashboard 保证状态同步。

部署:按照2.1中的用途规划,将在如下机器上部署该程序。

序号 IP 主机名 部署程序
01 192.168.113.131 redis1 codis-proxy

2.8.1 修改配置

使用codis-proxy生成一份默认配置

cd /usr/local/codis/bin/
./codis-proxy --default-config | tee ../config/proxy.conf #生成配置

修改默认配置

#vim ../proxy.conf #修改配置
product_name = "mot-codis" # 设置项目名 
product_auth = "" # 设置登录dashboard的密码(注意:与redis中requirepass一致)
# Set auth for client session
#   1. product_auth is used for auth validation among codis-dashboard,
#      codis-proxy and codis-server.
#   2. session_auth is different from product_auth, it requires clients
#      to issue AUTH  before processing any other commands.
session_auth = "" # codis客户端通过codis-proxy登录密码(注意:与redis中requirepass不一致) 
# Set bind address for admin(rpc), tcp only.dashboard.conf文件中admin_addr 
admin_addr = "0.0.0.0:11080" 
# Set bind address for proxy, proto_type can be “tcp”,”tcp4”, “tcp6”, “unix” or “unixpacket”. 
proto_type = "tcp4"
proxy_addr = "0.0.0.0:19000" #绑定端口(codis客户端连接此端口) 

# 外部存储 
jodis_name = "zookeeper" # 外部存储类型 
jodis_addr = "redis1:2181,redis2:2181,redis3:2181" # 外部存储列表(Zookeeper地址列表)
jodis_timeout = "20s"
#会话设置 
session_recv_timeout = "0s" #如果不为0可能导致应用程序出现”write: broken pipe”的问题
#备注:其他参数使用默认配置….

2.8.2 启动程序

nohup ./codis-proxy --ncpu=24 --config=../config/proxy.conf --log=../log/proxy.log --log-level=WARN &

程序codis-proxy启动后,仍然处于waiting状态,虽然侦听了proxy_addr端口,但是不会accept连接请求。只有将codis-proxy加入到集群并完成集群状态的同步,才能将状态改为online。最终才能accept连接请求。
在这里插入图片描述

2.9 安装Redis-sentinel

作用:Redis官方推荐的高可用性(HA)解决方案。它可以实现对Redis的监控、通知、自动故障转移。如果Master不能工作,则会自动启动故障转移进程,将其中的一个Slave提升为Master,其他的Slave重新设置新的Master服务。
部署:按照2.1中的部署规划,将在如下机器上部署该程序。

序号 IP 主机名 部署程序
01 192.168.113.131 redis1 redis-sentinel:26379
02 192.168.113.132 redis2 redis-sentinel:26379
03 192.168.113.133 redis3 redis-sentinel:26379

2.9.1 修改配置

cd /usr/local/codis/
vim ./config/sentinel.conf

修改为如下所示:

bind 0.0.0.0
protected-mode no
port 26379
dir /usr/local/codis/data

备注:其他结点的配置与此一致。

2.9.2 启动程序

cd /usr/local/codis/bin/ 
nohup ./redis-sentinel ../config/sentinel.conf &

2.10 安装Codis-fe

作用:集群管理界面。
1.多个集群实例共享可以共享同一个前端展示页面;
2.通过配置文件管理后端codis-dashboard列表,配置文件可自动更新。

部署:按照2.1中的用途规划,将在如下机器上部署该程序。

序号 IP 主机名 部署程序
01 192.168.113.131 redis1 codis-fe:18090

2.10.1 修改配置

生成配置
然后使用codis-admin工具生成一份配置文件

cd /usr/local/codis/bin
./codis-admin --dashboard-list --zookeeper=redis1:2181 | tee ../config/codis.json

将在/usr/local/codis/config下生成一个codis.json的文件

[
    {
        "name": "mot-codis",
        "dashboard": "redis1:18080"
    }
]

2.10.2 启动Codis-fe

nohup ./codis-fe --ncpu=4 --log=../log/fe.log --log-level=WARN --dashboard-list=../config/codis.json --listen=0.0.0.0:18090 &

打开浏览器,输入192.168.113.131:18090便可看到codis集群的监控界面 ,如图:
Codis3.2详细部署步骤_第5张图片

2.10.1 使用Codis-fe的WEB界面配置集群

2.10.1.1 添加Codis-proxy

输入codis-proxy的地址和端口,点击New Proxy
Codis3.2详细部署步骤_第6张图片
输入代理proxy服务器的IP和admin_addr端口,配置路径:/usr/local/codis/proxy.confCodis3.2详细部署步骤_第7张图片
添加完成后,效果如下图:
Codis3.2详细部署步骤_第8张图片

2.10.1.2 添加codis-server

Codis3.2详细部署步骤_第9张图片

  1. 先创建一个组,准备把相关的一组主从放进去(同一组内主从服务器请使用不同IP的机器)
  2. 点击按钮生成这个分组
  3. 添加真实redis-server地址,并选定一个分组,例如刚才创建的分组1
  4. 点击按钮生成配置
  5. 可以看到配置已经登记好,注意sync状态.
  6. 点击重新平衡所有slots数据块(任何添加和删除新旧节点都需要点击这个)

三台机器配置,主从分别配置在不同的服务器上,避免主备同时宕机造成数据丢失,示例图:
Codis3.2详细部署步骤_第10张图片

2.10.1.3 配置sentinel

Codis3.2详细部署步骤_第11张图片
1,添加真实的sentinel地址和端口
2,点击按钮添加
3,查看状态,这里有点不一样,他会自动添加当前主从组架构由多少台,控制切换

也正如我之前说的,他们自动去改配置文件,可以去看看sentinel的配置文件证实一下
Codis3.2详细部署步骤_第12张图片

2.11 测试Codis

执行usr/local/bin/redis-cli -h 192.168.113.131 -p 19000
进入Codis客户端,执行info

# Server
redis_version:3.2.11
redis_git_sha1:7191a280
redis_git_dirty:0
redis_build_id:fc848ed525d4f8ff
redis_mode:standalone
os:Linux 2.6.32-696.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.7
process_id:7453
run_id:606985fc0b57673f45b64d8b51cc8981ab0f4c91
tcp_port:6379
uptime_in_seconds:2797
uptime_in_days:0
hz:10
lru_clock:6751495
executable:/usr/local/codis/bin/./codis-server
config_file:/usr/local/codis/config/redis-6379.conf
# Clients
connected_clients:23
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:4224208
used_memory_human:4.03M
used_memory_rss:16338944
used_memory_rss_human:15.58M
used_memory_peak:4919344
used_memory_peak_human:4.69M
total_system_memory:1028214784
total_system_memory_human:980.58M
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:3.87
mem_allocator:jemalloc-4.0.3

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1533477784
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:67
total_commands_processed:1390981
instantaneous_ops_per_sec:6
total_net_input_bytes:63407284
total_net_output_bytes:74666125
instantaneous_input_kbps:0.30
instantaneous_output_kbps:3.59
rejected_connections:0
sync_full:1
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:100000
keyspace_misses:1
pubsub_channels:1
pubsub_patterns:0
latest_fork_usec:945
migrate_cached_sockets:0

# Replication
role:master
connected_slaves:1
slave0:ip=192.168.113.132,port=6380,state=online,offset=58456605,lag=0
master_repl_offset:58456753
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:57408178
repl_backlog_histlen:1048576

# CPU
used_cpu_sys:9.57
used_cpu_user:3.92
used_cpu_sys_children:0.01
used_cpu_user_children:0.00

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=2,expires=0,avg_ttl=0

2.12 配置TCP代理(可选)

在codis-proxy之上部署HAProxy,可以做到codis-proxy高可用。
需安装HAProxy或者Nginx等可以支持tcp协议负载工具。

HAProxy配置示例:
Codis3.2详细部署步骤_第13张图片

配置完成后即可使用代理服务器访问Codis集群。本地虚拟机服务器测试性能大概提升30%。

3 注意事项


3.1 密码配置

为了提高存储集群的安全性,就需要为集群配置数据存取密码和集群管理密码。

序号 密码类型 描述
01 数据存取密码 可通过修改proxy配置中session_auth调整数据存取密码。当使用redis-cli存取数据时,auth密码需要与session_auth一致。
02 集群管理密码 在proxy配置中的product_auth、codis-dashbroad配置中的product_auth需要与codis-server配置中的requirepass保持一致。

3.2 异常退出修复

修复异常退出的 Codis-dashboard

# 修复异常退出的 Codis-dashboard 
# dashboard 非正常退出,或者 kill -9 时使用
/usr/local/bin/codis-admin --remove-lock --product=mot-codis --zookeeper=redis1:2181

修复异常退出的 Codis-proxy

# 修复异常退出的 Codis-proxy
# proxy 非正常退出,或者 kill -9 时使用
/usr/local/bin/codis-admin --dashboard=dashboard_serverip:18080 --remove-proxy --addr=127.0.0.1:11080 –force

4 性能测试

用自带的redis-benchmark来压测性能,模拟500个并发和100万个请求.注意区分好登录的地址和端口,还有密码
压测codis-proxy的性能

/usr/local/codis/bin/redis-benchmark -h redis1 -p 19000 -a "你的session_auth" -c 500 -n 1000000 -q

压测单节点的性能

/usr/local/codis/bin/redis-benchmark -h redis1 -p 6379 -a "你的requirepass" -c 500 -n 1000000 -q

redis-benchmark参数解析:
-h ip地址
-p redis端口
-a 认证密码
-c 设定多少个并发连接
-n 总共多少个请求
-q 显示模式:简要模式

测试结果示例:
Codis3.2详细部署步骤_第14张图片

5 CODIS不支持的命令

codis不支持命令列表:

Command Type Command Name
Keys KEYS
- MIGRATE
- MOVE
- OBJECT
- RANDOMKEY
- RENAME
- RENAMENX
- SCAN
Strings BITOP
- MSETNX
Lists BLPOP
- BRPOP
- BRPOPLPUSH
Pub/Sub PSUBSCRIBE
- PUBLISH
- PUNSUBSCRIBE
- SUBSCRIBE
- UNSUBSCRIBE
Transactions DISCARD
- EXEC
- MULTI
- UNWATCH
- WATCH
Scripting SCRIPT
Server BGREWRITEAOF
- BGSAVE
- CLIENT
- CONFIG
- DBSIZE
- DEBUG
- FLUSHALL
- FLUSHDB
- LASTSAVE
- MONITOR
- RESTORE
- SAVE
- SHUTDOWN
- SLAVEOF
- SLOWLOG
- SYNC
- TIME
Codis Slot SLOTSCHECK
- SLOTSDEL
- SLOTSINFO
- SLOTSMGRTONE
- SLOTSMGRTSLOT
- SLOTSMGRTTAGONE
- SLOTSMGRTTAGSLOT

以下属于半支持命令, Codis不支持跨节点操作,因此您必须使用散列标签将可能显示在一个请求中的所有密钥放入同一个插槽中,然后您可以使用这些命令。 Codis不检查密钥是否有相同的标签,所以如果你不使用标签,client会得到错误的回应。

Command Type Command Name
Lists RPOPLPUSH
Sets SDIFF
- SINTER
- SINTERSTORE
- SMOVE
- SUNION
- SUNIONSTORE
Sorted Sets ZINTERSTORE
- ZUNIONSTORE
HyperLogLog PFMERGE
Scripting EVAL
- EVALSHA

你可能感兴趣的:(内存数据库)