欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Codis

程序员文章站 2022-05-20 19:35:17
...

一、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


官网下载地址:https://github.com/CodisLabs/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          ###查看启动日志

Codis

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

Codis

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按钮即可,如下图所示

Codis

Codis
Codis

6、通过fe初始化slot

新增的集群slot状态是offline,因此我们需要对它进行初始化(将1024个slot分配到各个group),而初始化最快的方法可通过fe提供的 rebalance all slots 按钮来做,如下图所示,点击此按钮,我们即快速完成了一个集群的搭建。

Codis

Codis

Codis

六、通过配置启动


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

Codis

(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

Codis

(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进行访问测试!!!