Codis 3.2 with Zookeeper集群搭建

简介Codis

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。
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 可自行扩展。

集群搭建主机环境(rhel6.5 x86_64bit)

172.25.8.1 redis-master
172.258.2 redis-master
172.25.8.3 redis-slaver of 1,2


所有主机均安装Zookeeper(3.4.6)、golang(1.8)、JDK(7u79)、Codis(3.2)

go环境的搭建请参阅上篇分分钟快速构建一个单机版测试 codis 集群
java环境的配置请参阅 Tomcat+Memcache
Codis的编译安装请参阅上篇

  1. Zookeeper环境搭建(3台主机同步)
[root@server1 ~]# tar xvf zookeeper-3.4.6.tar.gz -C /usr/local/
[root@server1 ~]# ln -s /usr/local/zookeeper-3.4.6/ /usr/local/zookeeper
[root@server1 ~]# cd /usr/local/zookeeper/conf
[root@server1 conf]# cp zoo_sample.cfg zoo.cfg
[root@server1 ~]# sed -n ‘/#/!p’ /usr/local/zookeeper/conf/zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/db
dataLogDir=/data/zookeeper/log
clientPort=2181
server.1=172.25.8.1:2888:3888
server.2=172.25.8.2:2888:3888
server.3=172.25.8.3:2888:3888
[root@server1 ~]# mkdir /data/zookeeper/{db,log} -p

[root@server1 ~]#echo 1 > /data/zookeeper/db/myid
[root@server2 ~]# echo 2 > /data/zookeeper/db/myid
[root@server3 ~]# echo 3 > /data/zookeeper/db/myid
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
export GOPATH=/home/user/go
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin:/home/user/go/src/github.com/CodisLabs/codis/bin/:/data/codis/redis/bin
[root@server1 ~]# source /etc/profile
[root@server2 ~]# source /etc/profile
[root@server3 ~]# source /etc/profile
[root@server1 ~]# zkServer.sh start
[root@server2 ~]# zkServer.sh start
[root@server3 ~]# zkServer.sh start

[root@server3 ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg 

Mode: leader

[root@server2 ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg 

Mode: follower

[root@rhel65-lockey1 ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg 
  1. Codis目录重建
[root@server1 ~]# mkdir -p /data/codis/sh
[root@server1 ~]# mkdir -p /data/codis/conf
[root@server1 ~]# mkdir -p /data/codis/log
[root@server1 ~]# mkdir -p /data/codis/run
[root@server1 ~]# mkdir -p /data/codis/redis/bin
[root@server1 ~]# mkdir -p /data/codis/redis/redis-6379
[root@server1 ~]# mkdir -p /data/codis/redis/redis-6380
[root@server1 ~]# cd $GOPATH/src/github.com/CodisLabs/codis/extern/redis-3.2.8/src/

配置启动Codis各组件—-启动Redis
主库:/data/codis/redis/redis-6379/redis.conf

[root@servery1 ~]# sed -n ‘/#/!p’ /data/codis/redis/redis-6379/redis.conf 
daemonize yes
pidfile /data/codis/run/redis-6379.pid
port 6379
tcp-backlog 65535
bind 0.0.0.0
timeout 0
tcp-keepalive 0
loglevel notice
logfile "/data/codis/log/redis-6379.log"
databases 16
lua-time-limit 5000
maxclients 10000

slowlog-log-slower-than 10000
slowlog-max-len 128

maxmemory 3G
maxmemory-policy noeviction

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
latency-monitor-threshold 0
从库:/data/codis/redis/redis-6380/redis.conf
[root@server1 ~]# sed -n ‘/#/!p’ /data/codis/redis/redis-6380/redis.conf 
daemonize yes
pidfile /data/codis/run/redis-6380.pid
port 6380
tcp-backlog 65535
bind 0.0.0.0
timeout 0
tcp-keepalive 0
loglevel notice
logfile "/data/codis/log/redis-6380.log"
databases 16
lua-time-limit 5000
maxclients 10000

slowlog-log-slower-than 10000
slowlog-max-len 128

maxmemory 3G
maxmemory-policy noeviction


no-appendfsync-on-rewrite yes
appendonly yes
appendfilename "appendonly.aof"
appendfsync no
auto-aof-rewrite-min-size 512mb
auto-aof-rewrite-percentage 100
aof-load-truncated yes
aof-rewrite-incremental-fsync yes

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
latency-monitor-threshold 0

使用codis-server启动redis
server1,server2,server3同时设置

[root@server1 ~]# codis-server /data/codis/redis/redis-6379/redis.conf
[root@server1 ~]# codis-server /data/codis/redis/redis-6380/redis.conf
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页