您的位置:首页 > 其它

Codis 3.2 with Zookeeper集群搭建

2017-10-19 17:45 363 查看

简介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.5.91 redis-master

172.25.5.92 redis-master

172.25.5.93 redis-slaver of 1,2

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

go环境的搭建请参阅上篇分分钟快速构建一个单机版测试 codis 集群

java环境的配置请参阅 Tomcat+Memcache

Codis的编译安装请参阅上篇

本为直接从Zookeeper开始搭建环境

1. Zookeeper环境搭建(3台主机同步)

[root@rhel65-lockey1 ~]# tar xvf zookeeper-3.4.6.tar.gz -C /usr/local/

[root@rhel65-lockey1 ~]# ln -s /usr/local/zookeeper-3.4.6/ /usr/local/zookeeper

[root@rhel65-lockey1 ~]# cd /usr/local/zookeeper/conf

[root@rhel65-lockey1 conf]# cp zoo_sample.cfg zoo.cfg

[root@rhel65-lockey1 ~]# 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.5.91:2888:3888
server.2=172.25.5.92:2888:3888
server.3=172.25.5.93:2888:3888


[root@rhel65-lockey1 ~]# mkdir /data/zookeeper/{db,log} -p

[root@rhel65-lockey1 ~]#echo 1 > /data/zookeeper/db/myid

[root@rhel65-lockey2 ~]# echo 2 > /data/zookeeper/db/myid

[root@rhel65-lockey3 ~]# 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@rhel65-lockey* ~]# source /etc/profile

启动服务查看状态:



[root@rhel65-lockey* ~]# zkServer.sh start

[root@rhel65-lockey3 ~]# zkServer.sh status

JMX enabled by default

Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: leader

[root@rhel65-lockey2 ~]# 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

Mode: follower

2. Codis目录重建

[root@rhel65-lockey1 ~]# mkdir -p /data/codis/sh

[root@rhel65-lockey1 ~]# mkdir -p /data/codis/conf

[root@rhel65-lockey1 ~]# mkdir -p /data/codis/log

[root@rhel65-lockey1 ~]# mkdir -p /data/codis/run

[root@rhel65-lockey1 ~]# mkdir -p /data/codis/redis/bin

[root@rhel65-lockey1 ~]# mkdir -p /data/codis/redis/redis-6379

[root@rhel65-lockey1 ~]# mkdir -p /data/codis/redis/redis-6380

[root@rhel65-lockey1 ~]# cd $GOPATH/src/github.com/CodisLabs/codis/extern/redis-3.2.8/src/


配置启动Codis各组件—-启动Redis

主库:/data/codis/redis/redis-6379/redis.conf

[root@rhel65-lockey1 ~]# 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@rhel65-lockey1 ~]# 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

[root@rhel65-lockey* ~]# codis-server /data/codis/redis/redis-6379/redis.conf

[root@rhel65-lockey* ~]# codis-server /data/codis/redis/redis-6380/redis.conf

3.配置启动Codis各组件

启动dashboard

首先生成默认的配置文件:

[root@rhel65-lockey1 ~]# codis-dashboard --default-config | tee /data/codis/conf/dashboard.toml


启动

[root@rhel65-lockey1 ~]# nohup codis-dashboard --ncpu=2 --config=/data/codis/conf/dashboard.toml --log=/data/codis/log/dashboard.log --log-level=WARN &


启动codis-proxy(集群中所有节点)

生成配置文件

[root@rhel65-lockey1 ~]#  codis-proxy --default-config | tee /data/codis/conf/proxy.toml


启动

[root@rhel65-lockey1 ~]# nohup codis-proxy --ncpu=2 --config=/data/codis/conf/proxy.toml --log=/data/codis/log/proxy.log --log-level=WARN &


启动codis-fe

首先生成默认的配置文件,配置文件codis.json可以手动编辑,也可以通过codis-admin从外部存储(这里是zookeeper)中拉取,如下操作:

[root@rhel65-lockey1 ~]#  codis-admin --dashboard-list --zookeeper=127.0.0.1:2181 | tee /data/codis/conf/codis.json


启动

[root@rhel65-lockey1 ~]#   nohup `which codis-fe` --ncpu=2 --log=/data/codis/log/fe.log --log-level=WARN --dashboard-list=/data/codis/conf/codis.json --listen=0.0.0.0:8080 &


关闭proxy

codis-admin --proxy=172.25.5.91:11080  --shutdown


或者

codis-admin --dashboard=10.0.60.152:18080 --remove-proxy --addr=127.0.0.1:11080 --force


建组

codis-admin –dashboard=172.25.5.91:18080 –create-group –gid=1

codis-admin –dashboard=172.25.5.91:18080 –create-group –gid=2



往组内加redis实例

codis-admin –dashboard=172.25.5.91:18080 –group-add –gid=1 –addr=172.25.5.92:6379

codis-admin –dashboard=172.25.5.91:18080 –group-add –gid=1 –addr=172.25.5.94:6379



设置同步

codis-admin –dashboard=172.25.5.91:18080 –sync-action –create –addr=172.25.5.93:6379

加slave

codis-admin –dashboard=172.25.5.91:18080 –promote-server –gid=1 –addr=172.25.5.93:6379

创建slot

codis-admin –dashboard=10.0.60.152:18080 –slot-action –create-range –beg=0 –end=511 –gid=1

$ codis-admin –dashboard=10.0.60.152:18080 –slot-action –create-range –beg=512 –end=1023 –gid=2

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: