codis集群部署
Codis简介
codis集群
Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.
基本架构
codis-proxy
codis-proxy 是客户端连接的 Redis 代理服务, codis-proxy 本身实现了 Redis 协议, 表现得和一个原生的 Redis 没什么区别 (就像 Twemproxy), 对于一个业务来说, 可以部署多个 codis-proxy, codis-proxy 本身是无状态的.
codis-config
codis-config 是 Codis 的管理工具, 支持包括, 添加/删除 Redis 节点, 添加/删除 Proxy 节点, 发起数据迁移等操作. codis-config 本身还自带了一个 http server, 会启动一个 dashboard, 用户可以直接在浏览器上观察 Codis 集群的运行状态.
codis-server
codis-server 是 Codis 项目维护的一个 Redis 分支, 基于 2.8.13 开发, 加入了 slot 的支持和原子的数据迁移指令. Codis 上层的 codis-proxy 和 codis-config 只能和这个版本的 Redis 交互才能正常运行.
ZooKeeper
Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息, codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy.
Codis 将槽位关系存储在 zk 中,并且提供了一个 Dashboard 可以用来观察和修改槽位关系,当槽位关系变化时,Codis Proxy 会监听到变化并重新同步槽位关系,从而实现多个
Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.
搭建codis集群所需的软件
(1) go codis依赖语言包
go1.9.1.linux-amd64.tar.gz(下载地址为:https://studygolang.com/dl/golang/go1.9.1.linux-amd64.tar.gz)
(2) codis codis集群套件
codis-release3.2.zip
(3) jdk zookeeper依赖语言包
jdk-8u121-linux-x64.rpm
(4) zookeeper 用于存放数据配置路由表
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
Codis集群部署
实验前须关闭redis
安装codis集群工具
解压go和codis
tar zxf go1.9.1.linux-amd64.tar.gz -C /usr/local/ /解压
cd /usr/local
[root@vm1 ~]# mkdir -p $GOPATH/src/github.com/CodisLabs
[root@vm1 ~]# yum install unzip -y
[root@vm1 ~]# unzip codis-release3.2.zip -d $GOPATH/src/github.com/CodisLabs
[root@vm1 ~]# cd $GOPATH/src/github.com/CodisLabs
[root@vm1 CodisLabs]# mv codis-release3.2/ codis
配置环境变量
vim /etc/profile 配置环境变量
77 export GOROOT=/usr/local/go
78 export GOPATH=/usr/local/codis
79 export PATH=$PATH:/usr/local/go/bin
source /etc/profile
编译安装codis
[root@vm1 codis]# pwd
[root@vm1 codis]# yum install gcc git autoconf -y
/usr/local/codis/src/github.com/CodisLabs/codis
[root@vm1 codis]# make
安装 jdk 和 解压zookeeper
[root@vm1 ~]# yum install jdk-8u201-linux-x64.rpm -y
[root@vm1 ~]# tar zxf zookeeper-3.4.14.tar.gz -C /usr/local/
[root@vm1 ~]# cd /usr/local/
[root@vm1 local]# ls
[root@vm1 local]# mv zookeeper-3.4.14/ zookeeper
配置环境变量
[root@vm1 local]# vim /etc/profile
77 export GOROOT=/usr/local/go
78 export GOPATH=/usr/local/codis
79 export ZOOKEEPER_HOME=/usr/local/zookeeper
80 export PATH=$PATH:/usr/local/go/bin:$ZOOKEEPER_HOME/bin
[root@vm1 local]# source /etc/profile
配置zookeeper
修改zookeeper的配置文件
[root@server3 ~]# cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
[root@server3 ~]# cd /usr/local/zookeeper/conf/
[root@server3 conf]# vim zoo.cfg
设置myid并启动zk
设置myid在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字(该数字的取值范围是1-255),用来标识当前主机
[root@vm1 conf]# mkdir /data/zookeeper/data -p
[root@vm1 conf]#echo "1" > /data/zookeeper/data/myid
[root@vm1 conf]# zkServer.sh start 启动zookeeper
对codis进行配置,并启动codis的各个组件
启动dashboard前,必须启动zookeepe
[root@vm1 conf]# vim /usr/local/codis/config.ini
1 zk=localhost:2181 //zookeeper的地址
2 product=test //产品名称
3 proxy_id=proxy_1 //proxy会读取, 用于标记proxy的名字
4 net_timeout=5 //检测状态时间间隔
5 dashboard_addr=localhost:18087 //dashboard 服务的地址
6 coordinator=zookeeper //如果用etcd,则将zookeeper替换为etcd
启动codis的各个组件
[root@vm1 conf]# cd $GOPATH/src/github.com/CodisLabs/codis/admin
[root@vm1 admin]# ./codis-dashboard-admin.sh start 启动codis-dashboard组件
[root@vm1 admin]# ./codis-proxy-admin.sh start 启动codis-proxy组件
[root@vm1 admin]# ./codis-fe-admin.sh start 启动codis-fe组件
[root@vm1 admin]# ./codis-server-admin.sh start 启动codis-server组件
netstat -antuple
配置vm2:
解压go和codis(同vm1)
配置环境变量 (同vm1)
编译codis (同vm1)
配置并启动codis:
[root@vm2 CodisLabs]# cd /usr/local/codis/src/github.com/CodisLabs/codis/config/
[root@vm2 config]# ls
dashboard.toml proxy.toml redis.conf sentinel.conf
[root@vm2 config]# vim redis.conf
[root@vm2 config]#
[root@vm2 config]# cd /usr/local/codis/src/github.com/CodisLabs/codis/admin
[root@vm2 admin]# ./codis-server-admin.sh start
配置vm3:
配置过程同vm2
验证实验结果
浏览器上输入192.168.1.1:9090
表示codis-proxy已经激活
添加组和服务器