codis集群部署实战 - 入门篇

一、codis简介

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。
Codis 的架构图如下所示:
这里写图片描述
Codis Proxy 提供 Redis 集群的接入口,Dashboard 是 Codis的管理工具,下层提供 Redis 服务。也可以对 Codis Proxy 实现高可用,使得集群更加完善。

二、组件

Codis 基本框架由以下组件组成:
1、Codis Proxy
客户端连接的 Redis 代理服务, 实现了 Redis 协议。除部分命令不支持以外,表现的和原生的 Redis 没有区别。
2、Codis Dashboard
集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。
3、Codis Server
基于 Redis 开发,增加了额外的数据结构,提供下层的 Redis 服务。

三、 Codis集群的搭建与使用

1.实验环境

实验所用虚拟机为redhat6.5

ip地址角色hostname
172.25.27.2Codis-redis-masterserver2
172.25.27.4Codis-redis-slaveserver4
172.25.27.3codis-proxy -server3

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

1.下载 GO 安装包,将其解压在/usr/local 目录下,并且设置环境变

量。

[root@server3 ~]# ls
anaconda-ks.cfg  codis-release3.2.zip  go1.8.linux-amd64.tar.gz  install.log  install.log.syslog
[root@server3 ~]# tar -zxf go1.8.linux-amd64.tar.gz  -C /usr/local/
[root@server3 ~]# vim /etc/profile

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

[root@server3 ~]# source /etc/profile
[root@server3 ~]# go version
go version go1.8 linux/amd64
2、设置编译环境

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

[root@server3 ~]# mkdir -p $GOPATH/src/github.com/CodisLabs
[root@server3 ~]# unzip codis-release3.2.zip
[root@server3 ~]# mv codis-release3.2 $GOPATH/src/github.com/CodisLabs/codis
[root@server3 ~]# cd $GOPATH/src/github.com/CodisLabs/codis
[root@server3 codis]# ls
admin    config  Dockerfile  Godeps           pkg        vendor
ansible  deploy  example     Makefile         README.md  version
cmd      doc     extern      MIT-LICENSE.txt  scripts    wandoujia_license.txt
3、编译 Codis 源码

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

[root@server3 codis]# yum install -y gcc git autoconf
[root@server3 codis]#  make MALLOC=libc

当看到如下内容,编译成功。
这里写图片描述

3.配置一个集群

Codis 源 码 编 译 完 成 后 , 组 件 的 启 动 脚 本 在 GOPATH/src/github.com/CodisLabs/codis/admin GOPATH/src/github.com/CodisLabs/codis/config 目录下。日志在$GOPATH/src/github.com/CodisLabs/codis/log 目录下。

这里写图片描述

1.进行集群配置

(1) codis-proxy 配置

  • 安装JDK
[root@server3 ~]# yum install -y jdk-8u121-linux-x64.rpm

[root@server3 ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
[root@server3 ~]# javac -version
javac 1.8.0_121
  • 安装zookeeper
[root@server3 ~]# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
[root@server3 ~]# tar -xzf zookeeper-3.4.6.tar.gz -C /usr/local/
[root@server3 ~]# vim /etc/profile
export GOPATH=/usr/local/codis
export GOROOT=/usr/local/go
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6/
export PATH=$PATH:/usr/local/go/bin:$ZOOKEEPER_HOME/bin
[root@server3 ~]# source /etc/profile
  • 配置zookeeper,修改配置文件:
[root@server3 ~]# cp /usr/local/zookeeper-3.4.6/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.6/conf/zoo.cfg
[root@server3 ~]# 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
[root@server3 ~]# mkdir -p /data/zookeeper/data
[root@server3 ~]# 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:

[root@server3 ~]# zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@server3 ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: standalone

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

[root@server3 ~]# cat zookeeper.out
[root@server3 ~]# vim /usr/local/codis/config.ini
zk=localhost:2181
product=test
proxy_id=proxy_1
net_timeout=5
dashboard_addr=localhost:18087
coordinator=zookeeper

解释一下配置文件含义

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
2.启动顺序
  1. start zookeeper //启动zookeeper服务
  2. change config items in config.ini //修改codis配置文件
  3. ./start_dashboard.sh //启动 dashboard
  4. ./start_redis.sh //启动redis实例
  5. ./add_group.sh //添加redis组,一个redis组只能有一个master
  6. ./initslot.sh //初始化槽
  7. ./start_proxy.sh //启动proxy
  8. ./set_proxy_online.sh //上线proxy项目
  9. open browser to http://localhost:18087/admin //访问web
3.启动各个组件
  • zookeeper
    • 启动zookeeper
[root@server3 ~]# zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@server3 ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: standalone
  • Codis Dashboard
    • 启 动CodisDashboard组 件 , 查 看 日 志 文 件codis-dashboard.log.2017-10-18 是否启动成功。
[root@server3 ~]# cd $GOPATH/src/github.com/CodisLabs/codis
[root@server3 codis]# ./admin/codis-dashboard-admin.sh start

/usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/dashboard.toml
starting codis-dashboard ... 

[root@server3 codis]# cat log/codis-dashboard.log.2017-10-19 

2017/10/19 09:57:34 main.go:116: [WARN] option --pidfile = /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-dashboard.pid
2017/10/19 09:57:34 fsclient.go:195: [INFO] fsclient - create /codis3/codis-demo/topom OK
2017/10/19 09:57:34 main.go:140: [WARN] [0xc4202579e0] dashboard is working ...
2017/10/19 09:57:34 topom.go:424: [WARN] admin start service on [::]:18080

这里写图片描述

  • Codis Proxy
    • 启动CodisProxy组件,查看日志codis-proxy.log.2017-10-18 是否启动成功。
[root@server3 codis]# ./admin/codis-proxy-admin.sh start

/usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/proxy.toml
starting codis-proxy ... 

[root@server3 codis]# tail log/codis-proxy.log.2017-10-19 

2017/10/19 10:00:47 proxy.go:293: [WARN] [0xc420089130] set sentinels = []
2017/10/19 10:00:47 main.go:323: [WARN] rpc online proxy seems OK
2017/10/19 10:00:48 main.go:213: [WARN] [0xc420089130] proxy is working ...

这里写图片描述

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

/usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/redis.conf
starting codis-server ... 
[root@server3 codis]# tail /tmp/redis_6379.log 


5939:M 19 Oct 10:03:00.258 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
5939:M 19 Oct 10:03:00.258 * The server is now ready to accept connections on port 6379

这里写图片描述

  • Codis Fe
    • 启动 Codis Fe 组件,查看日志 codis-fe.log.2017-10-18 文件是否
      启动成功。
[root@server3 codis]# ./admin/codis-fe-admin.sh start

starting codis-fe ... 
[root@server3 codis]# tail log/codis-fe.log.2017-10-19 
2017/10/19 10:04:52 main.go:101: [WARN] set ncpu = 1
2017/10/19 10:04:52 main.go:104: [WARN] set listen = 0.0.0.0:9090
2017/10/19 10:04:52 main.go:120: [WARN] set assets = /usr/local/codis/src/github.com/CodisLabs/codis/bin/assets
2017/10/19 10:04:52 main.go:155: [WARN] set --filesystem = /tmp/codis
2017/10/19 10:04:52 main.go:209: [WARN] option --pidfile = /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe.pid

这里写图片描述

4.安装redis(redis-master)

[root@server2 ~]# tar -zxf redis-4.0.1.tar.gz
[root@server2 ~]# cd redis-4.0.1
[root@server2 redis-4.0.1]# make
[root@server2 redis-4.0.1]# make install

这里写图片描述

[root@server2 redis-4.0.1]# mkdir -p /data/cluster/7000
[root@server2 redis-4.0.1]# cp redis.conf /data/cluster/7000/
[root@server2 redis-4.0.1]# vim /data/cluster/7000/redis.conf

#port 6379
port 6379

#daemonize no
daemonize yes

[root@server2 redis-4.0.1]# redis-server /data/cluster/7000/redis.conf

17970:C 19 Oct 11:25:39.117 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
17970:C 19 Oct 11:25:39.117 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=17970, just started
17970:C 19 Oct 11:25:39.117 # Configuration loaded

[root@server2 ~]# ps -ef |grep 7000
root     17936     1  0 11:23 ?        00:00:00 redis-server 127.0.0.1:7000               

redis-master已经启动成功了

5.安装配置redis-slave,操作同上

[root@server4 redis-4.0.1]# make && make install
[root@server4 redis-4.0.1]# vim redis.conf
#port 6379
port 6379

#daemonize no
daemonize yes

[root@server4 redis-4.0.1]# redis-server redis.conf

1492:C 19 Oct 11:31:16.496 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1492:C 19 Oct 11:31:16.497 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1492, just started
1492:C 19 Oct 11:31:16.497 # Configuration loaded

[root@server4 redis-4.0.1]# ps -ef |grep 7001

root      1493     1  0 11:31 ?        00:00:00 redis-server 127.0.0.1:7001
root      1498  1052  0 11:31 pts/0    00:00:00 grep 7001

redis-slave已经正常启动。实例已经配置完,可以去web页面操作了。

6.web 界面

1.访问

在浏览器中输入”http://172.25.27.3:9090”可以进入 web 管理页面,如下所示:
这里写图片描述
其中可以看到 proxy 的状态已经开启。

2.添加组ID

添加组ID,为组添加主从实例,一个组里只能有一个redis-master:在 group 栏 中 , 先 添 加 一 个 group 组 “1” , 再 添 加 主”172.25.27.2”和端口”6379”及从”172.25.27.4”和端口”6379”

最后点击 slots 下的”Rebalance ALL Slots”,一个简单的 Codis集群就配置完成了

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值