codis 小结 ( 部署)

2018-12-23  本文已影响0人  杰杰微电

一。名词解释:

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 可自行扩展。

安装包下载

#go: wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

#zookeeper: wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

#codis: git clone https://github.com/CodisLabs/codis.git -b release3.2

一。 codis 部署

1:解压:

tar -xf zookeeper-3.4.12.tar.gz

mv zookeeper-3.4.12 /usr/local/zookeeper

2:编辑配置文件:

cd /usr/local/zookeeper/conf

cp zoo_sample.cfg zoo.cfg

配置文件(zoo.cfg)见下面,对比单机模式多了server.ID

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/zookeeper/data

dataLogDir=/data/zookeeper/log

clientPort=2181

#要是一台装三个zk,可以按照端口区分:192.168.163.131:2887:3887/192.168.163.132:2887:3887/192.168.163.133:2887:3887

server.1=192.168.163.131:2888:3888

server.2=192.168.163.132:2888:3888

server.3=192.168.163.133:2888:3888

注意:2888表示zookeeper监听端口,3888表示zookeeper选举通信端口;以上server.1 server.2 server.3都要配置到三台zookeeper的zoo.cfg文件。

配置说明:

集群模式中, 集群中的每台机器都需要感知其它机器, 在 zoo.cfg 配置文件中, 可以按照如下格式进行配置, 每一行代表一台服务器配置:server.id=host:port:port

id 被称为 Server ID, 用来标识服务器在集群中的序号。同时每台 ZooKeeper 服务器上, 都需要在数据目录(即 dataDir 指定的目录) 下创建一个 myid 文件, 该文件只有一行内容, 即对应于每台服务器的Server ID。

ZooKeeper 集群中, 每台服务器上的 zoo.cfg 配置文件内容一致。

server.1 的 myid 文件内容就是 "1"。每个服务器的 myid 内容都不同, 且需要保证和自己的 zoo.cfg 配置文件中 "server.id=host:port:port" 的 id 值一致。

id 的范围是 1 ~ 255。

创建myid文件:设置zookeeper的id,和server.ID对应。

在 dataDir 指定的目录下 (即 /data/zookeeper/data 目录) 创建名为 myid 的文件, 文件内容和 zoo.cfg 中当前机器的 id 一致。根据上述配置, master 的 myid 文件内容为 1。

按照相同步骤, 为 132 和 133 配置 zoo.cfg 和 myid 文件。zoo.cfg文件内容相同, 132 的 myid 文件内容为 2, 133 的 myid 文件内容为 3。

#在第1台zookeeper(192.168.163.131)上设置id=1

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

#在第2台zookeeper(192.168.163.132)上设置id=2

echo "2" >/data/zookeeper/data/myid

#在第3台zookeeper(192.168.163.133)上设置id=3

echo "3" >/data/zookeeper/data/myid

三台启动:zkServer.sh start

# zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

zkServer.sh status

root@test1:~# zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: leader

root@test2:~# zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: follower

root@test3:~# zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: follower

关闭:zkServer.sh stop

root@test2:~#zkServer.sh stop

ZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Stopping zookeeper ... STOPPED

到此Zookeeper安装完毕。



新建codis-server(redis):三台上都安装

cp/usr/local/codis/extern/redis-3.2.11/redis.conf /etc/codis/codis-server/redis7021.conf

修改redis7021.conf:

# bind 127.0.0.1

protected-mode no

port 7021

daemonize yes

pidfile /var/lib/redis_7021/redis_7021.pid

logfile "/var/lib/redis_7021/redis_7021.log"

dbfilename 7021dump.rdb

dir /var/lib/redis_7021/

appendfilename  "7021appendonly.aof"

创建配置文件里所需的目录:

mkdir/var/lib/redis_7021

再新建一个codis-server:

cd /etc/codis/codis-server

cp redis7021.conf redis7022.conf 

sed-i"s/7021/7022/g" redis7022.conf mkdir/var/lib/redis_7022

开启codis-server:

codis-server /etc/codis/codis-server/redis7021.conf

codis-server /etc/codis/codis-server/redis7022.conf

说明:每台机器上有2个codis-server实例,端口为:7021、7022,没有做主从。为了防止单点的问题,可以交错的设置主从,防止一台服务器挂掉,codis-server不可用。如下表格所示:

Group      主                                                  从

1            192.168.163.131:7021                    192.168.163.132:7022

2            192.168.163.132:7021                    192.168.163.133:7022

3            192.168.163.133:7021                    192.168.163.131:7022

通过codis-fe  添加各个Group节点:需要先开启 codis-dashboard 和 codis-fe,在 ⑤ 之后操作。

③ 配置codis-dashboard(一台)

cd /etc/codis/codis-dashboard/ 

cp/usr/local/codis/config/dashboard.toml  /etc/codis/codis-dashboard/

修改配置:vim /etc/codis/codis-dashboard/dashboard.toml

##################################################

#                                                #

#                  Codis-Dashboard              #

#                                                #

##################################################

# Set Coordinator, only accept "zookeeper"&"etcd"&"filesystem".

# forzookeeper/etcd, coorinator_auth accept"user:password"

# Quick Start

#coordinator_name ="filesystem"

#coordinator_addr ="/tmp/codis"

coordinator_name ="zookeeper"

coordinator_addr ="192.168.163.131:2181,192.168.163.132:2181,192.168.163.133:2181"  

#zk地址,多个逗号隔开

#coordinator_auth =""

# Set Codis Product Name/Auth.

product_name ="codis-testX" 

#集群名称product_auth =""      #集群密码

# Set bind address foradmin(rpc), tcp only.

admin_addr ="192.168.163.131:18080"         #restful api地址

# Set arguments fordata migration (only accept'sync'&'semi-async').

migration_method ="semi-async"

migration_parallel_slots =100

migration_async_maxbulks =200

migration_async_maxbytes ="32mb"

migration_async_numkeys =500

migration_timeout ="30s"

# Set configs for redis sentinel.

sentinel_client_timeout ="10s"

sentinel_quorum =2

sentinel_parallel_syncs =1

sentinel_down_after ="30s"

sentinel_failover_timeout ="5m"

sentinel_notification_script =""

sentinel_client_reconfig_script =""

参数说明

coordinator_name外部存储类型,接受 zookeeper/etcd

coordinator_addr外部存储地址

product_name集群名称,满足正则\w[\w\.\-]*

product_auth集群密码,默认为空

admin_addrRESTful API 端口

创建codis日志目录(存放codis所有log):

mkdir/usr/local/codis/logs

启动codis-dashboard服务:(一台)

codis-dashboard --ncpu=1--config=/etc/codis/codis-dashboard/dashboard.toml --log=/usr/local/codis/logs/dashboard.log --log-level=warn &

参数说明:##--ncpu=N 最大使用 CPU 个数;

## -c  CONF, --config=CONF 指定启动配置文件;

## -l  FILE, --log=FILE 设置 log 输出文件;

##--log-level=LEVEL 设置 log 输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN;

##对于同一个业务集群而言,可以同时部署多个codis-proxy 实例;

##不同 codis-proxy 之间由 codis-dashboard 保证状态同步。

关闭codis-dashboard服务:

codis-admin --dashboard=192.168.163.131:18080--shutdown

④:配置codis-proxy(三台):每台配置一个Proxy,也可以一台配置多个Proxy。

注意参数:proxy_max_clients

cd /etc/codis/codis-proxy/cp/usr/local/codis/config/proxy.toml /etc/codis/codis-proxy/

修改配置:vim /etc/codis/codis-proxy/proxy.toml

##################################################

#                                                #

#                  Codis-Proxy                  #

#                                                #

##################################################

# Set Codis Product Name/Auth.

product_name ="codis-testX"           #和dashboard对应

product_auth =""

# Set auth for client session

#  1. product_auth is usedforauth validation among codis-dashboard,

#      codis-proxy and codis-server.

#  2. session_auth is different from product_auth, it requires clients

#      to issue AUTH before processing any other commands.

session_auth =""

# Set bind address foradmin(rpc), tcp only.

admin_addr ="192.168.163.131:11080"          #同一台服务器可以根据端口创建多个Proxy

# Set bind address forproxy, proto_type can be"tcp","tcp4","tcp6","unix"or"unixpacket".

proto_type ="tcp4"

proxy_addr ="192.168.163.131:19000"           #同一台服务器可以根据端口创建多个Proxy

# Set jodis address & session timeout

#  1. jodis_name isshortforjodis_coordinator_name, only accept"zookeeper"&"etcd".

#  2. jodis_addr isshortfor jodis_coordinator_addr

#  3. jodis_auth isshortforjodis_coordinator_auth,forzookeeper/etcd,"user:password" is accepted.

#  4. proxy will be registered as node:

#        ifjodis_compatible =true (not suggested):

#          /zk/codis/db_{PRODUCT_NAME}/proxy-{HASHID} (compatible with Codis2.0)

#        or else#          /jodis/{PRODUCT_NAME}/proxy-{HASHID}

jodis_name ="zookeeper"

jodis_addr="192.168.163.131:2181,192.168.163.132:2181,192.168.163.133:2181"

jodis_auth =""

jodis_timeout ="20s"

jodis_compatible =false...

...

参数                                         说明:

product_name                          集群名称,参考 dashboard 参数说明

product_auth                            集群密码,默认为空

admin_addr                              RESTful API 端口

proto_typeRedis                       端口类型,接受 tcp/tcp4/tcp6/unix/unixpacket

proxy_addrRedis                       端口地址或者路径

jodis_addr                                  Jodis 注册 zookeeper 地址

jodis_timeoutJodis                      注册 session timeout 时间,单位 second

jodis_compatibleJodis                 注册 zookeeper 的路径

backend_ping_period                   与 codis-server 探活周期,单位 second,0 表示禁止

session_max_timeout与 client       连接最大读超时,单位 second,0 表示禁止

session_max_bufsize与 client         连接读写缓冲区大小,单位 byte

session_max_pipeline与 client         连接最大的 pipeline 大小

session_keepalive_period                 与 client 的 tcp keepalive 周期,仅 tcp 有效,0 表示禁止

启动codis-proxy服务(三台):

codis-proxy --ncpu=1--config=/etc/codis/codis-proxy/proxy.toml --log=/usr/local/codis/logs/proxy.log --log-level=warn &

codis-proxy 启动后,处于waitingonline 状态(日志查询),监听proxy_addr地址,但是不会accept连接,添加到集群并完成集群状态的同步,才能改变状态为online。添加的方法有以下两种:

通过 codis-fe 添加:通过Add Proxy按钮,将admin_addr加入到集群中;⑤之后。

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

codis-admin --dashboard=192.168.163.131:18080 --create-proxy -x 192.168.163.131:11080

其中192.168.163.131:18080以及192.168.163.131:11080分别为 dashboard 和 proxy 的admin_addr地址;可以在后面的codis-fe里看到

添加过程中,dashboard 会完成如下一系列动作:

获取 proxy 信息,对集群 name 以及 auth 进行验证,并将其信息写入到外部存储中(zookeeper);

同步 slots 状态;

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

停止codis-proxy服务:

codis-admin --proxy=192.168.163.131:11080 --shutdown

注意:直接kill Proxy进程zk的codis3里会有残留数据,建议codis-admin方式停codis-proxy服务 

⑤:配置codis-fe(一台)

配置文件 codis.json 可以手动编辑,也可以通过 codis-admin 从外部存储中拉取:

cd /etc/codis/codis-fe/

codis-admin --dashboard-list --zookeeper=192.168.163.131:2181 | teecodis.json

启动codis-fe:

codis-fe --ncpu=1--dashboard-list=/etc/codis/codis-fe/codis.json --listen=192.168.163.131:18090--log=/usr/local/codis/logs/fe.log --log-level=warn --assets-dir=/usr/local/codis/bin/assets/ &

关闭codis-fe:

ps-ef | grep codis-fe| grep-v grep| awk'{print $2}'| xargs   kill

上一篇下一篇

猜你喜欢

热点阅读