zhmg23

我们是如此的不同

codis3.0.2安装部署使用

一、安装说明

Codis 由四部分组成:

1、Codis Proxy (codis-proxy) 是客户端连接的 Redis 代理服务

2、Codis Manager (codis-config) 是 Codis 的管理工具, 支持包括, 添加/删除 Redis 节点, 添加/删除 Proxy 节点, 发起数据迁移等

3、Codis Redis (codis-server) 是 Codis 项目维护的一个 Redis 分支, 基于 2.8.13 开发, 加入了 slot 的支持和原子的数据迁移指令

4、ZooKeeper 同步到各个存活的 codis-proxy


二、安装步骤及配置

1、安装go 


wget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz

tar -C /usr/local/ -zxvf go1.6.linux-amd64.tar.gz 


设置环境变量

#  vim /etc/profile


export PATH=$PATH:/usr/local/go/bin

export GOROOT=/usr/local/go

export PATH=$PATH:/gopath/bin


# source /etc/profile

# go version

go version go1.6 linux/amd64


2、安装zookeeper 

本次测试因环境服务器不够,所以选择zk部署为单实例,生产环境务必保持>=3台的奇数台机器,建议5台

wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

tar zxvf zookeeper-3.4.6.tar.gz

mv zookeeper-3.4.6 /usr/local/zookeeper

mkdir -p /usr/local/zookeeper/logs

cd  /usr/local/zookeeper/conf

cp zoo_sample.cfg zoo.cfg

vi zoo.cfg     修改配置文件

修改 dataDir

dataDir=/usr/local/zookeeper/data


并增加 日志

dataLogDir=/usr/local/zookeeper/logs

启动 zookeeper

/usr/local/zookeeper/bin/zkServer.sh start


3、安装codis  3.0.2

cd /usr/local

mkdir codis

go get -u -d github.com/CodisLabs/codis

 

# 执行上面如果报错:package github.com/wandoulabs/codis: cannot download, $GOPATH not set. For more details see: go help gopath,那要检查你的环境变量设置是否正确

# imports github.com/wandoulabs/codis: no buildable Go source files in/usr/local/codis/src/github.com/wandoulabs/codis  可无视

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

make

make gotest


会在bin下生成codis-config、codis-proxy、codis-server三个可执行文件

# ll bin/

total 39832

drwxr-xr-x 4 root root     4096 Mar  8 16:49 assets

-rwxr-xr-x 1 root root 17319392 Mar  8 16:49 codis-config

-rwxr-xr-x 1 root root 17145512 Mar  8 16:48 codis-proxy

-rwxr-xr-x 1 root root  6312973 Mar  8 16:50 codis-server


编辑配置文件

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

# vi config.ini

zk=192.168.85.44:2181

dashboard_addr=192.168.85.44:18087


4、启动 dashboard

执行bin/codis-config dashboard 将会看到一个页面

cd /usr/local/codis/src/github.com/CodisLabs/codis

bin/codis-config dashboard

访问https://192.168.85.44:18087/admin/


后台启动

# bin/codis-config dashboard &



5、初始化 slots  该命令会在zookeeper上创建slot相关信息

cd /usr/local/codis/src/github.com/CodisLabs/codis/

bin/codis-config slot init


执行成功,都会返回:

{

  "msg": "OK",

  "ret": 0

}



6、启动 Codis Redis

这里redis没有使用codis集成的,而是单独使用的redis2.8版本,配置的主从



7、添加 Redis Server Group

每一个 Server Group 作为一个 Redis 服务器组存在, 只允许有一个 master, 可以有多个 slave, group id 仅支持大于等于1的整数


添加group_1,group的id为1

bin/codis-config server add 1 192.168.85.44:6379 master

bin/codis-config server add 1 192.168.85.45:6379 slave




添加group_2,group的id为2

bin/codis-config server add 2 192.168.85.44:6479 master

bin/codis-config server add 2 192.168.85.45:6480 slave


执行成功,都会返回:


{

  "msg": "OK",

  "ret": 0

}




8、设置 server group 服务的 slot 范围

设置编号为[0, 511]的 slot 由 server group 1 提供服务, 编号 [512, 1023] 的 slot 由 server group 2 提供服务

注,设置之前,要先初始化,上面第五步是初始化slot


bin/codis-config slot range-set 0 511 1 online

bin/codis-config slot range-set 512 1023 2 online



# bin/codis-config slot range-set 0 511 1 online

{

  "msg": "OK",

  "ret": 0

}


# ./bin/codis-config slot range-set 512 1023 2 online

{

  "msg": "OK",

  "ret": 0

}



9、启动codis-proxy

# ./bin/codis-proxy -c config.ini -L ./log/proxy.log  --cpu=1 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000


  _____  ____    ____/ /  (_)  _____

 / ___/ / __ \  / __  /  / /  / ___/

/ /__  / /_/ / / /_/ /  / /  (__  )

\___/  \____/  \__,_/  /_/  /____/

codis3.0.2安装部署使用 - zhm - 合肥运维

 


如果是刚启动的 codis-proxy 是处于 offline状态的, 要设置 proxy 为 online 状态, 只有处于 online 状态的 proxy 才会对外提供服务

# bin/codis-config -c config.ini proxy online <proxy_name>  <---- proxy的id, 如 proxy_1



10、测试分片及负载

# redis-cli –h 127.0.0.1  -p 19000

127.0.0.1:19000> set a 1 

OK

127.0.0.1:19000> set b 2

OK

127.0.0.1:19000> set c 3

OK

127.0.0.1:19000> set d 4

OK

127.0.0.1:19000> set f 5

OK

127.0.0.1:19000> set g 6

OK

127.0.0.1:19000> set h 7

OK

127.0.0.1:19000> set i 8

OK

127.0.0.1:19000> set j 9

OK

127.0.0.1:19000> set k 10

OK

打开管理系统https://192.168.85.44:18087/admin 刷新一下,可以看到数据全部写到group_2

codis3.0.2安装部署使用 - zhm - 合肥运维

 

使用脚本批量插入一些数据

codis3.0.2安装部署使用 - zhm - 合肥运维

 

然后看下管理系统的OP/S

codis3.0.2安装部署使用 - zhm - 合肥运维

 

以观察一下两个group,可以看到现在两边数据都进行了存储

codis3.0.2安装部署使用 - zhm - 合肥运维

 



11、关于启动codis-ha

go get github.com/ngaut/codis-ha

cd codis-ha

go build

codis-ha --codis-config=localhost:18087 --productName=test

此步骤未验证,暂时记录一下!可能是我网络问题,导致一直下载不了codis-ha

下载地址:https://github.com/ngaut/codis-ha

不过,关于codis高可用,也可以尝试使用keepalived,配置codis的高可用


三、FAQ

1、启动dashboard失败

 ./bin/codis-config  dashboard

2016/03/10 09:39:14 dashboard.go:160: [INFO] dashboard listening on addr: :18087

2016/03/10 09:39:15 dashboard.go:234: [PANIC] create zk node failed

[error]: dashboard already exists: {"addr": "192.168.85.44:18087", "pid": 21121}

[stack]: 

    3   /usr/local/codis/src/github.com/CodisLabs/codis/cmd/cconfig/dashboard.go:234

            main.runDashboard

    2   /usr/local/codis/src/github.com/CodisLabs/codis/cmd/cconfig/dashboard.go:54

            main.cmdDashboard

    1   /usr/local/codis/src/github.com/CodisLabs/codis/cmd/cconfig/main.go:85

            main.runCommand

    0   /usr/local/codis/src/github.com/CodisLabs/codis/cmd/cconfig/main.go:152

            main.main

        ... ...


解决办法:

zk: node already exists


无论是proxy还是dashboard,都会在zk上注册自己的节点,同时在程序正常退出的时候会删掉对应的节点,但如果异常退出或试用kill -9 {pid}就会导致zk的节点无法删除,在下一次启动的时候会报“zk: node already exists”的错误。

因此关闭服务的时候直接用kill {pid}不要-9,同时如果无法启动并且确认没有其他运行中的进程占用zk上的节点,可以在zk上手动删除/zk/codis/db_test/dashboard 或/zk/codis/db_test/fence/{host:port}.

# ./zkCli.sh  -server 127.0.0.1:2181

[zk: 127.0.0.1:2181(CONNECTED) 0] ls /zk/codis/db_test

[migrate_tasks, actions, LOCK, ActionResponse, slots, fence, proxy, servers, dashboard]

[zk: 127.0.0.1:2181(CONNECTED) 1]  rmr /zk/codis/db_test/dashboard

[zk: 127.0.0.1:2181(CONNECTED) 4] quit   退出


2、zk:node does not exist 


2016/03/10 13:05:44 server_group.go:182: [INFO] {offline 1 192.168.85.45:6379}

2016/03/10 13:21:52 dashboard_apis.go:464: [ERROR] set slot range [0,1023] failed

[error]: zk: node does not exist

    2   /usr/local/codis/src/github.com/CodisLabs/codis/pkg/models/slot.go:85

            github.com/CodisLabs/codis/pkg/models.GetSlot

    1   /usr/local/codis/src/github.com/CodisLabs/codis/pkg/models/slot.go:146

            github.com/CodisLabs/codis/pkg/models.SetSlotRange

    0   /usr/local/codis/src/github.com/CodisLabs/codis/cmd/cconfig/dashboard_apis.go:462

            main.apiSlotRangeSet

        ... ...

[stack]: 

    0   /usr/local/codis/src/github.com/CodisLabs/codis/cmd/cconfig/dashboard_apis.go:464

            main.apiSlotRangeSet

        ... ...

解决办法:

删除清空zk所有数据,重新开始(现网请慎重操作)

或者重新配置zk,这个原因与第一个类同


3、从Codis 2.x 升级至Codis 3.x

Codis 3.x 修改了 codis-dashboard 与 codis-proxy 之间的通信方式,因此 Codis 2.x 并不兼容。但是官方提供了手动升级方案。

注意1:升级时,需要保证所有 slot 都处在 online 状态。即没有任何数据迁移操作正在进行。


注意2:升级完成后,需要手动关闭 Codis 2.x 的所有 proxy 和 config 组件。


step 1. 导出配置文件


$ ./bin/codis-admin --config-dump --product=codis_v2.0 --zookeeper=127.0.0.1:2181 -1 | tee codis_v2.0.json

该命令会从 zookeeper 上拉取 /zk/codis/db_codis_v2.0 下全部的文件,并组织成 json 格式并输出。


选项 -1 表示配置文件是 Codis 1.x 版本,缺省是 Codis 3.x 版本。


step 2. 转换配置文件


$ ./bin/codis-admin --config-convert codis_v2.0.json | tee codis_v3.0.json

该命令会将 Codis 1.x 版本的配置文件中有效信息提取出来,并转成 Codis 3.x 版本的配置文件并输出。


step 3. 更新配置文件


注意:更新配置文件时,请确保 Codis 3.x 中该集群不存在,否则可能导致更新失败或者集群状态异常。


$ ./bin/codis-admin --config-restore=codis_v3.0.json --product=codis_v3.0 --zookeeper=127.0.0.1:2181 --confirm

该命令会将 Codis 3.x 版本的配置文件提交到 /codis3/codis_v3.0 目录下。


选项 --confirm 选项表示确认提交,缺省时该命令仅仅打印配置文件作为调试。


step 4. 启动 Codis 3.x dashboard 以及 proxy


过程参考之前章节。因为集群信息已经存在,所以可以安全启动 codis-dashboard,并逐一添加 codis-proxy 到集群中。


step 5. 关闭 Codis 2.x dashboard 以及 proxy


Codis 3.x 的组件兼容 Jodis 协议。


因为 Codis 2.x 与 Codis 3.x 在外部存储中的组织结构不同,所以可以安全的 kill 掉全部 Codis 2.x 组件。


注意:关闭过程请不要使用 kill -9,因为旧组件在退出时会自动清理部分注册信息。


4、参考地址

https://github.com/CodisLabs/codis

https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.md

https://www.cenhq.com/2015/09/15/codis-cluster-structures/

源码下载地址:https://github.com/CodisLabs/codis/archive/3.0.2.tar.gz



评论