codis集群环境部署测试


codis介绍前端

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来讲, 链接到 Codis Proxy 和链接原生的 Redis Server 没有显著区别 , 上层应用能够像使用单机的 Redis 同样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工做, 全部后边的一切事情, 对于前面的客户端来讲是透明的, 能够简单的认为后边链接的是一个内存无限大的 Redis 服务。java

image001

codis组件node

codis server:基于redis-3.2.8 分支开发。增长了额外的数据结构,以支持slot有关的操做以及数据迁移指令linux

codis proxy:客户端链接的redis代理服务,实现了redis协议。除部分命令不支持之外(不支持的命令列表),表现的和原生的redis没有区别。对于同一个业务集群而言,能够同时部署多个codis-proxy实例;不一样codis-proxy之间由codis-dashboard保证状态同步。git

codis dashboard:集群管理工具,支持codis-proxy、codis-server的添加、删除、以及数据迁移操做。在集群状态发生改变时,codis-dashboard维护集群下全部codis-proxy的状态一致性,对于同一个业务集群而言,同一时刻codis-dashboard只能有0个或者1个,全部对集群的修改都必须经过codis-dashboard完成。github

codis FE:集群管理界面,多个集群实例共享能够共享同一个前端展现页面,经过配置文件管理后端codis-dashboard列表,配置文件可自动更新。golang

storage:提供namespace概念,不一样集群会按照不一样product name进行组织;目前仅提供了zookeeper、etcd、fs三种实现,可是提供了抽象的interface可自行扩展。web

codis分片:Codis 采用 Pre-sharding 的技术来实现数据的分片, 默认分红 1024 个 slots (0-1023), 对于每一个key来讲, 经过如下公式肯定所属的 Slot Id : SlotId = crc32(key) % 1024。redis

每个 slot 都会有一个且必须有一个特定的 server group id 来表示这个 slot 的数据由哪一个 server group 来提供。数据的迁移也是以slot为单位的。apache


codis 集群部署


机器环境分布

节点
IP
系统
测试配置
node1
192.168.0.198
centos7.2 (最小化安装)
2核2G --30G盘
node2
192.168.0.199 centos7.2 (最小化安装) 2核2G --30G盘
node3
192.168.0.200 centos7.2 (最小化安装) 2核2G --30G盘


codis部署架构图(来源网络-西门飞兵)

image003

codis 主从分布

image004


系统环境三台机器准备


安装centos7.2系统,最小化安装

设置好网络和防火墙  网络须要能访问外网,

下面关闭防火墙

setenforce 0

systemctl stop firewalld

systemctl disable firewalld

sed -i 's/enforcing/disabled/g' /etc/sysconfig/selinux


设置yum源

cd /etc/yum.repos.d/

wget http://mirrors.aliyun.com/repo/Centos-7.repo

wget http://mirrors.aliyun.com/repo/epel-7.repo

yum -y install epel-release 

yum -y install vim wget lrzsz net-tools

----------------------------------------------------------------------


安装JDK (zk须要jdk(三台机器)

yum install java-1.8.0-openjdk.x86_64 -y

yum install java-1.8.0-openjdk*-y


安装zookeeper集群(三台机器)


下载zk包(三台机器)

cd /usr/local/src

wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.14.tar.gz   ##zk版本在变化,链接可能失效

tar zxf zookeeper-3.4.14.tar.gz -C /usr/local/


配置环境变量(三台机器)

vim /etc/profile

ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.14
export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /etc/profile  ##生效


建立zk的数据日志目录及配置文件(三台机器)

mkdir -p /data/zookeeper/{data,log}

cp /usr/local/zookeeper-3.4.14/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.14/conf/zoo.cfg

vim /usr/local/zookeeper-3.4.14/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/log
clientPort=2181
maxClientCnxns=300
server.1=192.168.0.198:2888:3888
server.2=192.168.0.199:2888:3888
server.3=192.168.0.200:2888:3888

建立myid文件(三台机器)

三台机器分别为:

echo 1 > /data/zookeeper/data/myid       ##198机器

echo 2 > /data/zookeeper/data/myid       ##199机器

echo 3 > /data/zookeeper/data/myid       ##200机器


启动zk服务

/usr/local/zookeeper-3.4.14/bin/zkServer.sh start   ##启动
/usr/local/zookeeper-3.4.14/bin/zkServer.sh status   ##查看状态

[root@localhost ]# /usr/local/zookeeper-3.4.14/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
[root@localhost ]# /usr/local/zookeeper-3.4.14/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader

======================================

安装go环境(三台机器)

yum -y install golang

配置go环境

mkdir /data/go -p

vim /etc/profile

export GOPATH=/data/go
export PATH=$PATH:$GOPATH/bin

source /etc/profile  ##生效

安装godep

yum -y install git

go get -u github.com/tools/godep && which godep

#/data/go/bin/godep


安装codis3.2 (三台机器)


下载编译安装

yum install gcc autoconf automake libtool -y

cd /data/go/src/github.com/CodisLabs

git clone https://github.com/CodisLabs/codis.git -b release3.2
cd codis/
make


修改配置

dashboard配置修改(三台机器)

vim config/dashboard.toml

coordinator_name = "zookeeper"
coordinator_addr = "192.168.0.200:2181,192.168.0.199:2181,192.168.0.198:2181"
product_name = "test-codis"

codis-proxy配置修改(三台机器)

vim config/proxy.toml

product_name = "test-codis"

jodis_name = "zookeeper"
jodis_addr = "192.168.0.200:2181,192.168.0.199:2181,192.168.0.198:2181"
jodis_auth = ""
jodis_timeout = "20s"
jodis_compatible = true

codis-server配置 (三台机器)

cd /data/go/src/github.com/CodisLabs/codis/extern/redis-3.2.11


建立配置目录(三台机器)

mkdir /data/redis

mkdir /data/redis/redis_6379 -p
mkdir /data/redis/redis_6380 -p
mkdir /data/redis/redis_6381 -p


先在198上修改三个配置文件,后面复制到其余机器

建立配置文件

cp redis.conf /data/redis/redis-6379.conf
cp redis.conf /data/redis/redis-6380.conf
cp redis.conf /data/redis/redis-6381.conf


修改配置文件

vim /data/redis/redis-6379.conf

bind 0.0.0.0
port 6379
pidfile "/tmp/redis_6379.pid"
logfile "/tmp/redis_6379.log"
dbfilename "dump_6379.rdb"
dir "/data/redis/redis_6379"

vim /data/redis/redis-6380.conf
bind 0.0.0.0
port 6380
pidfile "/tmp/redis_6380.pid"
logfile "/tmp/redis_6380.log"
dbfilename "dump_6380.rdb"
dir "/data/redis/redis_6380"

vim /data/redis/redis-6381.conf
bind 0.0.0.0
port 6381
pidfile "/tmp/redis_6381.pid"
logfile "/tmp/redis_6381.log"
dbfilename "dump_6381.rdb"
dir "/data/redis/redis_6381"


复制配置文件到其余两个机器

scp /data/redis/*.conf 192.168.0.199:/data/redis/

scp /data/redis/*.conf 192.168.0.200:/data/redis/


服务启动及集群初始化


cd /data/go/src/github.com/CodisLabs/codis


启动codis-dashboard  (选一台机器198)

nohup ./bin/codis-dashboard --ncpu=1 --config=config/dashboard.toml --log=dashboard.log --log-level=WARN >> /var/log/codis_dashboard.log &

启动codis-proxy (三台机器)

nohup ./bin/codis-proxy --ncpu=1 --config=config/proxy.toml --log=proxy.log --log-level=WARN >> /var/log/codis_proxy.log &

启动codis-server(三台机器)

nohup ./bin/codis-server /data/redis/redis-6379.conf &
nohup ./bin/codis-server /data/redis/redis-6380.conf &
nohup ./bin/codis-server /data/redis/redis-6381.conf &

启动codis-fe (选一台机器198)

nohup ./bin/codis-fe --ncpu=1 --log=fe.log --log-level=WARN --zookeeper=192.168.0.198:2181,192.168.0.199:2181,192.168.0.200:2181 --listen=192.168.0.198:8090 &


访问管理界面并配置

浏览器打开192.168.0.198:8090

QQ截图20190417110527.png

选择test-codis,并增长三个proxy,(填写11080端口才能够增长)

QQ截图20190417110412.png

接着添加 group和server

先添加123group  而后把server加入到group中

QQ截图20190417112824.png

QQ截图20190417114311.png


而后初始化solt

新增的集群 slot 状态是 offline,所以咱们须要对它进行初始化(将 1024 个 slot 分配到各个 group),而初始化最快的方法可经过 fe 提供的 rebalance all slots 按钮来作,点击按钮,咱们便可快速完成了一个集群的搭建。也能够填写不一样的solt范围进行分配,本例将逐一分配solt)点migrate range按钮

QQ截图20190417115329.png

QQ截图20190417115417.png

上图已经将solt分配到三个group了



经过链接codis-proxy进行验证

[root@localhost codis]# ./bin/redis-cli -h 192.168.0.199 -p 19000
192.168.0.199:19000> info
能够查看集群代理信息
192.168.0.199:19000> set test 999
OK
192.168.0.199:19000> get test
"999"

压力测试

./bin/redis-benchmark -h 192.168.0.200 -p 19000 -c 100 -d 100 -t set -n 10000 -r 10000
上述命令的意思是,使用redis-benchmark压力测试命令链接codis集群,
同时并发10000个(-c),测试set操做(-t),每一个测试数据集是100字节(-d),
请求数是100000(-n),使用使用随机数插入数值(-r)


压测后能够看到分到后端group的数据均衡状况

QQ截图20190417125145.png



基于redis-sentinel实现HA

修改sentinel配置文件(三台机器)

mkdir /data/redis/logs/
mkdir /data/redis/db/

cd /data/go/src/github.com/CodisLabs/codis

cp extern/redis-3.2.11/sentinel.conf  /data/redis/


先在一台机器上修改配置,而后复制到其余机器

vim /data/redis/sentinel.conf
bind 0.0.0.0
port 26379
pidfile "/data/redis/logs/sentinel.pid"
logfile "/data/redis/logs/sentinel.log"
dir "/data/redis/db"
sentinel monitor codis-server-01 192.168.0.198 6379 2
sentinel down-after-milliseconds codis-server-01 5000
sentinel failover-timeout codis-server-01 60000
sentinel parallel-syncs codis-server-01 2
 
sentinel monitor codis-server-02 192.168.0.199 6380 2
sentinel down-after-milliseconds codis-server-02 5000
sentinel failover-timeout codis-server-02 60000
sentinel parallel-syncs codis-server-02 2
 
sentinel monitor codis-server-03 192.168.0.200 6381 2
sentinel down-after-milliseconds codis-server-03 5000
sentinel failover-timeout codis-server-03 60000
sentinel parallel-syncs codis-server-03 2


复制配置到其余机器

scp /data/redis/sentinel.conf 192.168.0.199:/data/redis/
scp /data/redis/sentinel.conf 192.168.0.200:/data/redis/


启动sentinel(三台机器)

cd /data/go/src/github.com/CodisLabs/codis

nohup ./bin/redis-sentinel /data/redis/sentinel.conf &


而后回到web管理界面添加sentinel,添加时的端口为26379


QQ截图20190417140430.png

QQ截图20190417140446.png

配置完成后能够在group中看到明显的HA标志

QQ截图20190417140559.png


到此基本完成了codis集群搭建

更多内容可参考Codis的github:https://github.com/CodisLabs/codis

以及http://www.fblinux.com/?p=1463   https://blog.51cto.com/brucewang/2159131等文章

相关文章
相关标签/搜索