Codis
一、Codis介绍
1、简介
Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。我们可以通过官网查看其信息以及安装方式。
2、组成部分
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 可自行扩展。
3、codis优势
Redis获得动态扩容/缩容的能力,增减redis实例对client完全透明、不需要重启服务,不需要业务方担心 Redis 内存爆掉的问题. 也不用担心申请太大, 造成浪费. 业务方也不需要自己维护 Redis.
Codis支持水平扩容/缩容,扩容可以直接界面的 “Auto Rebalance” 按钮,缩容只需要将要下线的实例拥有的slot迁移到其它实例,然后在界面上删除下线的group即可。
二、GO环境安装
1、下载
下载地址:https://www.golangtc.com/download
百度网盘链接: https://pan.baidu.com/s/1Wq7y8cMnaeGrYHvXsEm8bA 密码: 5pjk
[root@server1 ~]# wget https://www.golangtc.com/static/go/1.8.5/go1.8.5.linux-amd64.tar.gz
2、添加环境变量
[root@server1 ~]# tar xf go1.8.5.linux-amd64.tar.gz -C /usr/local/
[root@server1 ~]# vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/usr/local/codis
[root@server1 ~]# . /etc/profile
3、测试
[root@server1 ~]# go version
go version go1.8.5 linux/amd64
[root@server1 ~]# go env GOPATH ###go项目所在目录
/usr/local/codis
三、编译安装Codis
1、安装
[root@server1 ~]# yum install -y gcc unzip
[root@server1 ~]# mkdir -p $GOPATH/src/github.com/CodisLabs
[root@server1 ~]# unzip codis-release3.2.zip
[root@server1 ~]# mv codis-release3.2 /usr/local/codis/src/github.com/CodisLabs/codis
[root@server1 ~]# cd /usr/local/codis/src/github.com/CodisLabs/codis
[root@server1 ~]# make
2、编译报错
(1)报错
[aaa@qq.com ~]# make
...
make[2]: Leaving directory `/usr/local/codis/src/github.com/CodisLabs/codis/extern/redis-3.2.11/src'
make[1]: Leaving directory `/usr/local/codis/src/github.com/CodisLabs/codis/extern/redis-3.2.11'
version: line 3: git: command not found
autoconf
./autogen.sh: line 5: autoconf: command not found
Error 0 in autoconf
make[2]: *** [config] Error 1
make[1]: *** [build] Error 2
make: *** [codis-deps] Error 2
(2)解决方案
[root@server1 codis]# yum install -y autoconf
[root@server1 codis]# make ###再次执行成功
五、单机版集群
1、启动 codis-dashboard
使用codis-dashboard-admin.sh脚本启动dashboard,并查看 dashboard日志确认启动是否有异常。
[aaa@qq.com codis]# pwd
/usr/local/codis/src/github.com/CodisLabs/codis
[aaa@qq.com codis]# ./admin/codis-dashboard-admin.sh start
/usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/dashboard.toml
starting codis-dashboard ...
[aaa@qq.com codis]# tail -100 ./log/codis-dashboard.log.2018-09-01 ###查看启动日志
2、启动codis-proxy
使用codis-proxy-admin.sh脚本启动codis-proxy,并查看proxy日志确认启动是否有异常。
[aaa@qq.com codis]# ./admin/codis-proxy-admin.sh start
/usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/proxy.toml
starting codis-proxy ...
[aaa@qq.com codis]# tail -100 ./log/codis-proxy.log.2018-09-01
3、启动 codis-server
使用codis-server-admin.sh脚本启动codis-server,并查看redis日志确认启动是否有异常。
[aaa@qq.com codis]# ./admin/codis-server-admin.sh start
/usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/redis.conf
starting codis-server ...
[aaa@qq.com codis]# tail -100 /tmp/redis_6379.log
...
2086:M 01 Sep 11:42:39.032 * DB loaded from disk: 0.000 seconds
2086:M 01 Sep 11:42:39.032 * The server is now ready to accept connections on port 6379
4、启动codis-fe
使用 codis-fe-admin.sh 脚本启动 codis-fe,并查看 fe 日志确认启动是否有异常。
[aaa@qq.com codis]# ./admin/codis-fe-admin.sh start
starting codis-fe ...
[aaa@qq.com codis]# tail -100 ./log/codis-fe.log.2018-09-01
2018/09/01 11:47:39 main.go:101: [WARN] set ncpu = 1
2018/09/01 11:47:39 main.go:104: [WARN] set listen = 0.0.0.0:9090
2018/09/01 11:47:39 main.go:120: [WARN] set assets = /usr/local/codis/src/github.com/CodisLabs/codis/bin/assets
2018/09/01 11:47:39 main.go:162: [WARN] set --filesystem = /tmp/codis
2018/09/01 11:47:39 main.go:216: [WARN] option --pidfile = /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe.pid
5、通过fe添加group
浏览器:http://10.10.10.1:9090,选择我们刚搭建的集群codis-demo,在Proxy栏可看到我们已经启动的 Proxy, 但是 Group 栏为空,因为我们启动的 codis-server 并未加入到集群 添加NEW GROUP,NEW GROUP行输入 1,再点击NEW GROUP即可 添加Codis Server,Add Server 行输入我们刚刚启动的codis-server地址,添加到我们刚新建的Group,然后再点击Add Server按钮即可,如下图所示
6、通过fe初始化slot
新增的集群slot状态是offline,因此我们需要对它进行初始化(将1024个slot分配到各个group),而初始化最快的方法可通过fe提供的 rebalance all slots 按钮来做,如下图所示,点击此按钮,我们即快速完成了一个集群的搭建。
六、通过配置启动
1、关闭上面启动的服务
redis所在目录:/usr/local/codis/src/github.com/CodisLabs/codis/extern/redis-3.2.11
[root@server1 codis]# pwd
/usr/local/codis/src/github.com/CodisLabs/codis
[root@server1 codis]# ./admin/codis-dashboard-admin.sh stop
[root@server1 codis]# ./admin/codis-proxy-admin.sh stop
[root@server1 codis]# ./admin/codis-server-admin.sh stop
[root@server1 codis]# ./admin/codis-fe-admin.sh stop
2、启动dashboard
初始化配置:./bin/codis-proxy –default-config | tee dashboard.toml
(1)配置dashboard
[root@server1 codis]# vim /usr/local/codis/src/github.com/CodisLabs/codis/config/dashboard.toml
(2)启动
[aaa@qq.com codis]# nohup ./bin/codis-dashboard --ncpu=1 --config=dashboard.toml --log=dashboard.log --log-level=WARN &
3、启动Codis Proxy
初始化配置:./bin/codis-proxy –default-config | tee proxy.toml
(1)配置Codis Proxy
[root@server1 codis]# vim /usr/local/codis/src/github.com/CodisLabs/codis/config/proxy.toml
(2)启动
[aaa@qq.com codis]# nohup ./bin/codis-proxy --ncpu=1 --config=proxy.toml --log=proxy.log --log-level=WARN &
4、启动codis Server
[root@server1 codis]# ./bin/codis-server
5、Codis FE启动
[aaa@qq.com codis]# nohup ./bin/codis-fe --ncpu=1 --log=fe.log --log-level=WARN --zookeeper=10.10.10.1:2181 --listen=10.10.10.1:8080 &
此时我们就可以通过http://10.10.10.1:8080进行访问测试!!!