Codis学习笔记--Codis 3.2 集群搭建

关于codis的安装请看上篇文章:https://blog.csdn.net/Hudonyo/article/details/88740726

本次搭建所使用的各组件版本说明

codis-3.2

zookeeper-3.4.12

jdk1.8.0_181

go1.9.1

codis 3.x 相比之前的版本,重构了整个集群组件通信方式,废弃了codis-config,所以基于codis 3.x 的集群搭建方式相比之前版本也有些不同。

1、启动zookeeper

因为这里使用zookeeper作为集群元数据的外部存储,所以需要启动zookeeper,默认使用filesystem

修改配置文件:

[root@iZwz977ogd6jecq7rowvtsZ conf]# cp zoo_sample.cfg zoo.cfg
[root@iZwz977ogd6jecq7rowvtsZ conf]# vim zoo.cfg

这里是单机zk

Codis学习笔记--Codis 3.2 集群搭建_第1张图片

在dataDir配置的目录下新建一个myid文件,并写入1,用来标志当前主机,至于为什么,后面补充

[root@iZwz977ogd6jecq7rowvtsZ zookeeper]# vim myid
[root@iZwz977ogd6jecq7rowvtsZ conf]# echo "1" > /data/zookeeper/myid

启动zk:

[root@iZwz977ogd6jecq7rowvtsZ ~]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /apps/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

查看启动的zk启动状态:

[root@iZwz977ogd6jecq7rowvtsZ config]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /apps/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: standalone

在哪个目录启动,就会在哪个目录下生成zk启动日志zookeeper.out 

因为这里只启动了单机zk,所以Mode为standalone,如果是多台,最先启动的为leader,其他为follower

 2、启动codis-dashboard

修改dashboard.toml配置:

[root@iZwz977ogd6jecq7rowvtsZ config]# cd /apps/codis/src/github.com/CodisLabs/codis/config
[root@iZwz977ogd6jecq7rowvtsZ config]# ls
dashboard.toml  proxy.toml  redis.conf  sentinel.conf
[root@iZwz977ogd6jecq7rowvtsZ config]# vim dashboard.toml

Codis学习笔记--Codis 3.2 集群搭建_第2张图片

启动codis-dashboard:

[root@iZwz977ogd6jecq7rowvtsZ CodisLabs]# cd codis/
[root@iZwz977ogd6jecq7rowvtsZ codis]# ls
admin    cmd                       deploy      example  kubernetes       nohup.out  scripts  wandoujia_license.txt
ansible  config                    doc         extern   Makefile         pkg        vendor
bin      dashboard.log.2019-03-26  Dockerfile  Godeps   MIT-LICENSE.txt  README.md  version

[root@iZwz977ogd6jecq7rowvtsZ codis]# nohup ./bin/codis-dashboard --ncpu=1 --config=./config/dashboard.toml --log=dashboard.log --log-level=debug &
nohup: ignoring input and appending output to ‘nohup.out’

#或者
[root@iZwz977ogd6jecq7rowvtsZ codis]# nohup ./bin/codis-dashboard -c ./config/dashboard.toml -l dashboard.log --log-level=debug &

nohup命令:忽略挂断信号,&命令:后台运行,两者结合使用使该进程在后台永久执行。

--ncpu:最大使用cpu个数

--config/-c:启动的配置文件

--log/-l:日志输出文件,配置文件在哪里,日志文件输出到哪里

--log-level:日志级别,默认INFO,推荐WARN

Codis学习笔记--Codis 3.2 集群搭建_第3张图片

[root@iZwz977ogd6jecq7rowvtsZ bin]# zkCli.sh

[zk: localhost:2181(CONNECTED) 5] ls /codis3/codis-demo/topom
[]
[zk: localhost:2181(CONNECTED) 6] 

可见,当 codis-dashboard启动时,会在外部存储(这里是zk)上存放一条数据,用于存储dashboard信息,同时作为LOCK存在,当codis-dashboard安全退出时,会主动删除该数据。但当异常退出时,这些数据有可能不会被删除,会导致下次重启失败,解决办法见下面的codis-dashboard异常退出的修复

停止codis-dashboard:

[root@iZwz977ogd6jecq7rowvtsZ codis]# ./bin/codis-admin --dashboard=0.0.0.0:18080 --shutdown

Codis学习笔记--Codis 3.2 集群搭建_第4张图片

codis-dashboard异常退出的修复,有两种办法:

1.使用codis-admin命令行工具强制删除LOCK(推荐):

首先确认codis-dashboard进程已经退出(很重要):ps -ef|grep codis

然后执行codis-admin命令:

[root@iZwz977ogd6jecq7rowvtsZ codis]# ./bin/codis-admin --remove-lock --product=codis-demo --zookeeper=127.0.0.1:2181

2.直接到zk中删除对应节点信息

#删除整个节点信息
[root@iZwz977ogd6jecq7rowvtsZ src]# rmr /codis3

 3、启动codis-proxy

修改proxy.toml配置:

[root@iZwz977ogd6jecq7rowvtsZ codis]# vim ./config/proxy.toml

Codis学习笔记--Codis 3.2 集群搭建_第5张图片

注:从配置文件里的注释可以看出,如果配置了jodis信息,默认Codis 3会将jodis节点注册在/jodis/{product_name}下,所以如果想兼容Codis 2的格式的话,可以考虑将jodis_compatible设置成true 

启动codis-proxy:

[root@iZwz977ogd6jecq7rowvtsZ codis]# nohup ./bin/codis-proxy --ncpu=1 -c ./config/proxy.toml -l /apps/logs/codis/proxy.log --log-level=
debug &

可以看出,codis-proxy启动后,处于waiting状态,监听proxy-addr地址,但是不会accept连接,添加到集群并完成集群状态的同步后,才能改变状态为online状态。添加到集群的方法有以下两种:

1.通过codis-fe集群管理界面添加,将admin_addr加入到集群中,下面会详细讲如何添加。

2.通过codis-admin命令行工具添加,方法如下:

[root@iZwz977ogd6jecq7rowvtsZ codis]# ./bin/codis-admin --dashboard=127.0.0.1:18080 --create-proxy -x 127.0.0.1:11080

 其中--dashboard=127.0.0.1:18080和--create-proxy -x 127.0.0.1:11080分别为dashboard和proxy的admin_addr地址。

proxy启动日志:

可以看出,proxy状态由waiting online状态变成online状态了 。

dashboard读取proxy信息,并在zk中创建proxy节点信息,如果配置了jodis且使用zk做外部存储时,还会创建jodis节点: 

Codis学习笔记--Codis 3.2 集群搭建_第6张图片

添加proxy节点到集群过程中,dashboard会完成如下一系列动作:

1.获取proxy信息,对集群name以及auth进行验证,并将其信息写入到外部存储(这里是zk)中

2.同步slots状态

3.标记proxy状态为online,此后proxy开始accept连接并开始提供服务。

停止codis-proxy:

[root@iZwz977ogd6jecq7rowvtsZ codis]# ./bin/codis-admin --proxy=0.0.0.0:11080 --shutdown

codis-proxy异常退出修复:

通常codis-proxy都是通过codis-dashboard进行移除, 移除过程中codis-dashboard为了安全会向codis-proxy发送offline指令,成功后才会将proxy信息从外部存储中移除。如果codis-proxy异常退出,该操作会失败,。此时可以通过codis-admin命令行工具进行移除:

首先确认codis-proxy进程已经退出(很重要):ps -ef | grep codis

然后运行codis-admin命令删除proxy:

./bin/codis-admin --dashboard=127.0.0.1:18080 --remove-proxy --addr=127.0.0.1:11080 --force
##选项--force表示,无论offline操作是否成功,都从外部存储中将该节点删除。

4、启动codis-server

修改redis.conf配置文件,我这里主要设置redis绑定ip、日志输出目录:

[root@iZwz977ogd6jecq7rowvtsZ codis]# vim ./config/proxy.toml

Codis学习笔记--Codis 3.2 集群搭建_第7张图片

启动codis-redis:

[root@iZwz977ogd6jecq7rowvtsZ codis]# ./bin/codis-server ./config/redis.conf

 启动成功日志:

Codis学习笔记--Codis 3.2 集群搭建_第8张图片

通过redis-cli连接codis-server,并set一个值进去进行测试:

注意,此时的codis-redis并未加入到集群,可通过codis-fe集群管理界面将该codis-redis加入到GROUP中,下面介绍如何添加group

5、启动codis-fe(可选组件)

codis-fe组件主要提供集群管理界面的。启动命令: 

[root@iZwz977ogd6jecq7rowvtsZ codis]# nohup ./bin/codis-fe --ncpu=1 -l /apps/logs/codis/fe.log --log-level=debug --zookeeper=127.0.0.1:2181 --listen=0.0.0.0:8080 &

Codis学习笔记--Codis 3.2 集群搭建_第9张图片

如果开启了防火墙,需检查启动的端口是否开放:

#查看所有开放的端口
[root@iZwz977ogd6jecq7rowvtsZ zookeeper-3.4.12]# firewall-cmd --zone=public --list-ports
#查看某一个端口是否开放
[root@iZwz977ogd6jecq7rowvtsZ zookeeper-3.4.12]# firewall-cmd --zone=public --query-port=80/tcp
yes
#添加一个开放端口
[root@iZwz977ogd6jecq7rowvtsZ zookeeper-3.4.12]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
success
#添加完后重新载入使其生效
[root@iZwz977ogd6jecq7rowvtsZ zookeeper-3.4.12]# firewall-cmd --reload
success

浏览器访问codis-fe集群管理界面:

Codis学习笔记--Codis 3.2 集群搭建_第10张图片

管理proxy节点:

管理Group、codis-server节点:

Codis学习笔记--Codis 3.2 集群搭建_第11张图片

初始化slots:

新增的集群slots状态是offline,因此我们需要对它进行初始化(将1024个slot分配到各个Group)

Codis学习笔记--Codis 3.2 集群搭建_第12张图片

至此,一个简单的单机版(一个codis-proxy节点、一个codis-server、一台zk)的codis集群就搭建好了,后续有时间会搭一个多节点的codis集群,并做一个可用性、数据一致性、压力测试。

下篇笔记写如何使用jodis连接codis-proxy

你可能感兴趣的:(Codis)