一。名词解释:
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
网友评论