参考文档:
(1)https://blog.csdn.net/lockey23/article/details/78287606
(2)https://blog.csdn.net/sszgg2006/article/details/78443733
(3)https://blog.csdn.net/gold2008/article/details/69948892
简介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@rhl65-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: follower2. 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/
- 1
- 2
-
配置启动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