codis集群部署

一、codis介绍

codis是一个分布式redis集群解决方案,对于上层的应用来说, 连接到codis-proxy和连接原生的redis-server没有明显的区别。

上层应用可以像使用单机的redis一样使用,codis底层会处理请求的转发,不停机的数据迁移等工作。所有后边的一切事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的redis服务。

codis由四部分组成:

codis proxy(codis-proxy)                    codis dashboard(codis-config)

codis redis(codis-server)                    zookeeper/etcd

codis-proxy是客户端连接的redis代理服务,codis-proxy本身实现 了redis协议,表现得和一个原生的redis没什么区别(就像twemproxy),对于一个业务来说,可以部署多个codis- proxy,codis-proxy本身是无状态的。

codis-config是codis的管理工具,支持包括:添加/删除redis节点,添加/删除proxy节点,发起数据迁移等操作。

codis-config本身还自带了一个http-server,会启动一个dashboard,用户可以直接在浏览器上观察codis集群的运行状态。

codis-server是codis项目维护的一个redis分支,基于redis2.8.21开发,加入了slot的支持和原子的数据迁移指令。codis上层的codis-proxy和codis-config只能和这个版本的redis交互才能正常运行。

codis依赖zookeeper来存放数据路由表和codis-proxy节点的元信息,codis-config发起的命令都会通过zookeeper同步到各个存活的codis-proxy。

codis支持按照namespace区分不同的产品,拥有不同的product name的产品,各项配置都不会冲突。

codis架构图如下:

codis集群部署_第1张图片

Codis Proxy 提供 Redis 集群的接入口,Dashboard 是 Codis的管理工具,下层提供 Redis 服务。也可以对 Codis Proxy 实现高可用,使得集群更加完善。

二、环境准备

codis集群的搭建,需要zookeeper集群。除了zookeeper集群之外,我们还需要安装go语言环境,因为codis是基于go语言开发的。

实验环境(rhel6.5):

172.25.45.2     Codis-redis-master      server2
172.25.45.3     codis-proxy -                  server3
172.25.45.4     Codis-redis-slave         server4

三、 Codis集群的搭建与使用

1. 安装go环境(所有节点均须安装,在server3上做演示,其他节点相同)

tar -zxf go1.8.linux-amd64.tar.gz  -C /usr/local/

vim /etc/profile      

      ##最后面添加以下几行
      export GOPATH=/usr/local/codis
      export GOROOT=/usr/local/go
      export PATH=$PATH:/usr/local/go/bin

source /etc/profile

 go version     ##显示go版本

2、设置编译环境

在$GOPATH 目录里建立 codis 编译目录,将 codis 下载后解压到此目录

mkdir -p $GOPATH/src/github.com/CodisLabs

unzip codis-release3.2.zip

codis集群部署_第2张图片

mv codis-release3.2 $GOPATH/src/github.com/CodisLabs/codis

cd $GOPATH/src/github.com/CodisLabs/codis

ls
codis集群部署_第3张图片

3、编译 Codis 源码

在编译之前需要安装依赖包

yum install -y gcc git autoconf
make MALLOC=libc

codis集群部署_第4张图片

当看到如下内容,编译成功。

codis集群部署_第5张图片

3.配置集群

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 配置

  • 安装JDK

yum install -y jdk-8u121-linux-x64.rpm

java -version

codis集群部署_第6张图片

  • 安装zookeeper

tar -xzf zookeeper-3.4.6.tar.gz -C /usr/local/

vim /etc/profile

 source /etc/profile

  • 配置zookeeper,修改配置文件:

cp /usr/local/zookeeper-3.4.6/conf/zoo_sample.cfg   /usr/local/zookeeper-3.4.6/conf/zoo.cfg
vim /usr/local/zookeeper-3.4.6/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
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 -p /data/zookeeper/data

echo "1" > /data/zookeeper/data/myid

设置myid:
设置myid在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件配置的srver.X中的X为什么数字,则myid文件就输入这个数字,我只有一台zk,所以配置文件里可以不配置server.X,但还是要配置myid的,echo一个数字1进去即可。如果有多台zk,则分别在zk服务器上echo对应的数字进对应的myid文件

    启动zookeeper

因为环境变量里已经添加了路径,直接执行命令即可,执行zkServer.sh start后,要等一会再执行zkServer status:

zkServer.sh start

zkServer.sh status

codis集群部署_第7张图片

在那个目录下启动,就在那个目录下产生一个启动的日志zookeeper.out,查看这个日志可以查看是否正常启动了。由于单个zookeeper,所以这里指示Mode: standalone,如果有多个zk节点,就只有一个Mode: leader的状态,别的都是Mode: follower状态。

cat zookeeper.out

 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 的 RESTful API,所以必须启动

coordinator=zookeeper ##如果用etcd,则将zookeeper替换为etcd
 

codis集群部署_第8张图片

2).启动顺序

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

3).启动各个组件

zkServer.sh start     ##启动zookeeper

zkServer.sh status

cd $GOPATH/src/github.com/CodisLabs/codis
./admin/codis-dashboard-admin.sh start    ##启 动CodisDashboard组 件 , 查 看 日 志 文
件codis/dashboard.log.2018-10-27 是否启动成功。

cat log/codis-dashboard.log.2018-10-27

./admin/codis-proxy-admin.sh start     ##启动CodisProxy组件,查看日志codis-proxy.log.2018-20-27 是否启动成功

 tail log/codis-proxy.log.2018-10-27

./admin/codis-server-admin.sh start    ##启动 Codis Server 组件,查看日志/tmp/redis_6379.log 文件是否启动成功。

tail /tmp/redis_6379.log

./admin/codis-fe-admin.sh start           ##启动 Codis Fe 组件,查看日志 codis-fe.log.2018-10-27 文件是否

tail log/codis-fe.log.2018-10-27

codis集群部署_第9张图片

codis集群部署_第10张图片

codis集群部署_第11张图片

codis集群部署_第12张图片

4).安装redis(redis-master):在server2上

tar -zxf redis-4.0.1.tar.gz
cd redis-4.0.1

yum install gcc -y
make && make install

 mkdir -p /data/cluster/7000

cp redis.conf /data/cluster/7000/

vim /data/cluster/7000/redis.conf

redis-server /data/cluster/7000/redis.conf

ps -ef |grep 7000

redis-master已经启动成功了

codis集群部署_第13张图片

codis集群部署_第14张图片

5).安装配置redis-slave(server4)操作同上

codis集群部署_第15张图片

6).web 界面

1.在浏览器中输入http://172.25.45.3:9090可以进入 web 管理页面,如下所示:

codis集群部署_第16张图片

其中可以看到 proxy 的状态已经开启。

codis集群部署_第17张图片

你可能感兴趣的:(codis集群部署)