codis分布式集群部署
1.codis简介
Codis是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.
2.codis组件
Codis基本框架由以下组件组成:
1、Codis Proxy
客户端连接的 Redis 代理服务, 实现了 Redis 协议。除部分命令不支持以外,表现的和原生的 Redis没有区别。
2、CodisDashboard
集群管理工具,支持codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。
3、Codis Server
基于 Redis 开发,增加了额外的数据结构,提供下层的 Redis 服务。
2.系统环境介绍
实验用系统皆为centos7.1
ip role hostname
192.168.8.71 codis-proxy atlan4
192.168.8.72 codis-server atlan5
192.168.8.73 codis-server atlan6
3.安装go语言环境(三台都做)
1.下载go语言二进制包
wgethttps://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz
2.解压go语言包
tar zxfhttps://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz -C /usr/local/
3.配置环境变量
vi /etc/profile.d/go.sh
exportGOPATH=/usr/local/codis
exportGOROOT=/usr/local/go
exportPATH=$PATH:/usr/local/go/bin
source/etc/profile.d/go.sh
4.设置编译环境
mkdir -p$GOPATH/src/github.com/CodisLabs
4.下载codis源码包并编译
wgethttps://codeload.github.com/CodisLabs/codis/zip/release3.2
unzip codis-release3.2.zip
mv codis-release3.2$GOPATH/src/github.com/CodisLabs/codis
cd$GOPATH/src/github.com/CodisLabs/codis
ls
admin bin config doc dump.rdb extern kubernetes Makefile pkg scripts version
ansible cmd deploy Dockerfile example Godeps log MIT-LICENSE.txt README.md vendor wandoujia_license.txt
yum install -ygcc git autoconf
make MALLOC=libc
5.配置一个集群
Codis源 码 编 译 完 成 后 , 组 件 的 启 动 脚 本 在GOPATH/src/github.com/CodisLabs/codis/admin目录下。配置文件在GOPATH/src/github.com/CodisLabs/codis/config目录下。日志在$GOPATH/src/github.com/CodisLabs/codis/log 目录下。
1.codis-proxy配置
1。安装jdk
yum -y install yum -y install java-1.8.0-openjdk*
2.安装zookeeper
wget http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
tar zxfzookeeper-3.4.12.tar.gz -C /usr/local/
vim/etc/profile.d/zookeeper.sh
exportZOOKEEPER_HOME=/usr/local/zookeeper-3.4.12
exportPATH=$PATH:/usr/local/go/bin:$ZOOKEEPER_HOME/bin
source/etc/profile.d/zookeeper.sh
3.配置zookeeper,修改配置文件
cp /usr/local/zookeeper-3.4.12/conf/zoo_sample.cfg/usr/local/zookeeper-3.4.12/conf/zoo.cfg
vim/usr/local/zookeeper-3.4.12/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
clientPort=2181
#server.1=codis-1:2888:3888
#server.2=codis-2:2888:3888
#server.2=codis-3:2888:3888
mkdir -pv/data/zookeeper
echo"1" > /data/zookeeper/myid
设置myid:
设置myid在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件配置的srver.X中的X为什么数字,则myid文件就输入这个数字,我只有一台zk,所以配置文件里可以不配置server.X,但还是要配置myid的,echo一个数字1进去即可。如果有多台zk,则分别在zk服务器上echo对应的数字进对应的myid文件
4.codis结合zookeeper
vim /usr/local/codis/config.ini
zk=localhost:2181 //zookeeper的地址, 如果是zookeeper集群,可以这么写:zk=hostname1:2181,hostname2:2181,hostname3:2181,hostname4:2181,hostname5:2181,如果是etcd,则写成http://hostname1:port,http://hostname2:port,http://hostname3:port
product=test //产品名称, 这个codis集群的名字, 可以认为是命名空间, 不同命名空间的codis没有交集
proxy_id=proxy_1 //proxy会读取, 用于标记proxy的名字, 针对多个proxy的情况, 可以使用不同的config.ini, 只需要更改 proxy_id 即可
net_timeout=5 //检测状态时间间隔
dashboard_addr=localhost:18087 //dashboard 服务的地址,CLI 的所有命令都依赖于 dashboard 的 RESTfu
coordinator=zookeeper //如果用etcd,则将zookeeper替换为etcd
6.启动顺序
start zookeeper //启动zookeeper服务
change config items in config.ini //修改codis配置文件
./start_dashboard.sh //启动 dashboard
./start_redis.sh //启动redis实例
./add_group.sh //添加redis组,一个redis组只能有一个master
./initslot.sh //初始化槽
./start_proxy.sh //启动proxy
./set_proxy_online.sh //上线proxy项目
open browser to http://localhost:18087/admin //访问web
7.启动各个组件
启动zookeeper
[root@atlan4conf]# zkServer.sh start
ZooKeeperJMX enabled by default
Usingconfig: /usr/local/zookeeper-3.4.12/bin/../conf/zoo.cfg
Startingzookeeper ... STARTED
[root@atlan4conf]# zkServer.sh status
ZooKeeperJMX enabled by default
Usingconfig: /usr/local/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode:standalone
启动codisproxy
[root@atlan4 conf]#/usr/local/codis/src/github.com/CodisLabs/codis/admin/codis-proxy-admin.shstart
/usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/proxy.toml
startingcodis-proxy ...
[root@atlan4codis]# pwd
/usr/local/codis/src/github.com/CodisLabs/codis
[root@atlan4codis]# tail log/codis-proxy.log.2018-06-30
2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306ca7e0] to192.168.8.72:6379, db-11 round-[0]
2018/06/3018:46:49 backend.go:258: [WARN] backend conn [0xc4306ca960] to192.168.8.72:6379, db-13 start service
2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306ca960] to192.168.8.72:6379, db-13 round-[0]
2018/06/3018:46:49 backend.go:258: [WARN] backend conn [0xc4306caa20] to 192.168.8.72:6379,db-14 start service
2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306caa20] to192.168.8.72:6379, db-14 round-[0]
2018/06/3018:46:49 proxy_api.go:44: [WARN] [0xc4200c08f0] API call/api/proxy/start/56883e0042494adb5852cd65a754130f from 192.168.8.71:54920 []
2018/06/3018:46:49 proxy_api.go:44: [WARN] [0xc4200c08f0] API call/api/proxy/sentinels/56883e0042494adb5852cd65a754130f from 192.168.8.71:54920[]
2018/06/3018:46:49 proxy.go:293: [WARN] [0xc4200c08f0] set sentinels = []
2018/06/3018:46:49 main.go:343: [WARN] rpc online proxy seems OK
2018/06/3018:46:50 main.go:233: [WARN] [0xc4200c08f0] proxy is working ...
启动codis-server(三台都启动)
[root@atlan4codis]# ./admin/codis-server-admin.sh start
/usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/redis.conf
startingcodis-server ...
[root@atlan4codis]# tail /tmp/redis_6379.log
1803:M 30Jun 18:50:36.064 * Background saving terminated with success
1803:M 30Jun 18:50:36.064 * Synchronization with slave 192.168.8.72:6379 succeeded
1803:M 30Jun 18:50:36.089 * Slave 192.168.8.73:6379 asks for synchronization
1803:M 30Jun 18:50:36.089 * Partial resynchronization not accepted: Runid mismatch(Client asked for runid 'd585494bee79e778b05737b465dacffc29dd520e', my runid is'3ce28d86c88e2713dae1180d390e685949873248')
1803:M 30Jun 18:50:36.089 * Starting BGSAVE for SYNC with target: disk
1803:M 30Jun 18:50:36.089 * Background saving started by pid 1808
1808:C 30Jun 18:50:36.090 * DB saved on disk
1808:C 30Jun 18:50:36.091 * RDB: 0 MB of memory used by copy-on-write
1803:M 30Jun 18:50:36.165 * Background saving terminated with success
1803:M 30Jun 18:50:36.165 * Synchronization with slave 192.168.8.73:6379 succeeded
启动codisFe
[root@atlan4 codis]#./admin/codis-fe-admin.sh start
startingcodis-fe ...
[root@atlan4codis]# tail log/codis-fe.
codis-fe.log.2018-06-30 codis-fe.out
[root@atlan4codis]# tail log/codis-fe.log.2018-06-30
2018/06/3016:58:50 main.go:101: [WARN] set ncpu = 1
2018/06/3016:58:50 main.go:104: [WARN] set listen = 0.0.0.0:9090
2018/06/3016:58:50 main.go:120: [WARN] set assets =/usr/local/codis/src/github.com/CodisLabs/codis/bin/assets
2018/06/3016:58:50 main.go:162: [WARN] set --filesystem = /tmp/codis
2018/06/3016:58:50 main.go:216: [WARN] option --pidfile =/usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe.pid
2018/06/3018:53:27 main.go:101: [WARN] set ncpu = 1
2018/06/3018:53:27 main.go:104: [WARN] set listen = 0.0.0.0:9090
2018/06/3018:53:27 main.go:120: [WARN] set assets =/usr/local/codis/src/github.com/CodisLabs/codis/bin/assets
2018/06/3018:53:27 main.go:162: [WARN] set --filesystem = /tmp/codis
2018/06/3018:53:27 main.go:216: [WARN] option --pidfile =/usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe.pid
8.web界面
浏览器访问http://192.168.8.71:9090即可进入web管理页面
codis-proxy已经激活
配置新的codis集群
添加主机
Data center在此处不需要填,在codis server address中填入codis主机的IP和端口
Group填如你刚才创建的组我的1
完成之后是这样的
至此codis集群已经创建完成