Redis 3.2 & ZooKeeper 3.4.10 安装及使用
Codis 是一个分布式 Redis 解决方案,即由 ZooKeeper 管理的 Redis 集群。
集群中有一台服务器作为 Dashboard,不安装 ZooKeeper。
Redis
安装
- Go 环境
mkdir -p /opt/app/codis && \
cd /opt/app/codis && \
wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz && \
tar -xf go1.9.linux-amd64.tar.gz -C /usr/local
配置环境变量
vim /etc/profile
添加:
export GOROOT=/usr/local/go
# src 的父目录
export GOPATH=/opt/app/codis/codis
export PATH=$JAVA_HOME/bin:$GOROOT/bin:$GOPATH/bin:$PATH
source /etc/profile
验证
go version
- Redis
-
编译安装
mkdir -p /opt/app/codis/codis/src/github.com/CodisLabs /opt/app/codis/codis/{pid,logs,dbs} && \ git clone https://github.com/CodisLabs/codis.git -b release3.2 && \ make编译时如缺少 autoconf(ali)
yum install -y autoconf automake libtool -
拷贝已编译过的 Redis 数据
一般选择从三平台打包整个 Codis 目录进行拷贝,原因是数据量较少,耗时较短
解压后须清空 codis/codis/dbs 和 codis/codis/logs
进行系统优化
配置 /opt/app/codis/codis/src/github.com/CodisLabs/codis/config/{redis_9736.conf,redis_9746.conf}(9736、9746 为进程端口号)
-
bind 为本机内网 IP
-
port 为进程端口号
-
核对 pidfile、logfile 和 dir 对应的路径是否存在,codis 有无读写权限
-
maxmemory 设为云主机内存的 1/4
通过应用用户(codis)启动 redis 节点,以 9736、9746 为例
cd /opt/app/codis/codis/src/github.com/CodisLabs/codis && \
./bin/codis-server ./config/redis_9736.conf && \
./bin/codis-server ./config/redis_9746.conf
启动后,通过netstat -ntlp命令应可以看到本机的 9736、9746 端口能够被监听。
- Dashboard
选集群中的一台服务器。
- 生成配置文件
/opt/app/codis/codis/src/github.com/CodisLabs/codis/bin/codis-dashboard --default-config | tee ./config/dashboard.conf
- 修改配置
product_name:集群名称,往zk中注册
product_auth:requirepass密码,与redis配置中的一致
admin_addr:dashboard监听tcp端口
- 启动
nohup bin/codis-dashboard --ncpu=4 --config=./config/dashboard.conf --log-level=WARN &>> /opt/app/codis/codis/logs/dashboard.log 2>&1 &
--ncpu:CPU 个数
--config:配置文件
--log:日志存储路径
--log-level:日志输出信息级别
dashboard.log 应输出“dashboard is working ...”,ZooKeeper 应生成节点 /codis3/andtalk/topom
- Proxy
集群中所有服务器。
- 生成配置文件
/opt/app/codis/codis/src/github.com/CodisLabs/codis/bin/codis-proxy --default-config | tee ./config/proxy.conf
- 修改配置 proxy.conf
product_name:Dashboard 向 ZK 中注册的库,对应 productname
product_auth:服务端认证密码
sessios_aith:客户端认证密码
admin_addr:Proxy 监听 TCP 端口
proxy_addr:Proxy 端口地址
jodis_name:ZooKeeper 名称,固定填写“zk”
jodis_addr:ZooKeeper 集群地址
jodis_timeout:Proxy 注册至 ZK 超时时间
jodis_compatible:ZK 注册的路径,false 为 jodis,true 为 ZK,ZK 更好兼容以前的功能,建议为 true
proxy_max_clients:Proxy 的最大连接数
backend_ping_period:与 codis-server 心跳检测时间
session_send_timeout:Client 连接 Proxy 最大超时时间
-
启动
nohup bin/codis-proxy --ncpu=4 --config=./config/proxy.conf --log-level=WARN &>> /opt/app/codis/codis/logs/proxy.log 2>&1 &--ncpu:最大使用 CPU 数
--config:配置文件
--log:日志存储路径
--log-level:日志输出等级Proxy 启动后处于监听(waiting)状态,proxy.log 持续输出“proxy waiting online ...”,需要加入到集群中等候 accept 请求
cd /opt/app/codis/codis/src/github.com/CodisLabs/codis # 在对应主机上分别执行以下命令 ./bin/codis-admin --dashboard=10.101.33.66:18080 --create-proxy -x 10.101.33.73:11080 ./bin/codis-admin --dashboard=10.101.33.66:18080 --create-proxy -x 10.101.33.61:11080 ./bin/codis-admin --dashboard=10.101.33.66:18080 --create-proxy -x 10.101.33.127:11080 ./bin/codis-admin --dashboard=10.101.33.66:18080 --create-proxy -x 10.101.33.66:11080--dashboard:Dashboard 服务器 IP 和端口
--create-proxy:每个 Proxy 节点的IP 和端口成功加入后 proxy.log 会输出 “jodis create node /zk/codis/db_PRODUCT_NAME/proxy/...” 和 “proxy is working ...”
Porxy 添加至集群中 Dashboard 会做出以下操作:
a. 获取 Proxy 信息,对集群 productname 以及 auth 进行认证,并将其写入
b. 同步 solt 状态
c. 将 Proxy 标记为 online,此后 Proxy 开始 accept 连接并对外提供服务 -
验证
[zk: localhost:2181(CONNECTED) 0] ls /
[zk, codis3, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /zk/codis/db_andtalk/proxy/
0f395fd26052d12f7d9d512240f929a8 f78573c29694412c13643516ddac5ccf 8bdd757c6394946d2779a7d3dbb9de75 396a2b9cfcb638349694c3af56626e34 -
对 codis-server 服务分组(两两分组,交叉进行)
在 Dashboard 服务器上执行
分组
cd /opt/app/codis/codis/src/github.com/CodisLabs/codis && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --create-group --gid=1 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --create-group --gid=2 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --create-group --gid=3 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --create-group --gid=4
向分组添加节点
Group 1
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=1 --addr=10.101.33.73:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=1 --addr=10.101.33.61:9746
Group 2
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=2 --addr=10.101.33.61:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=2 --addr=10.101.33.127:9746
Group 3
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=3 --addr=10.101.33.127:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=3 --addr=10.101.33.66:9746
Group 4
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=4 --addr=10.101.33.66:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=4 --addr=10.101.33.73:9746
ZooKeeper 应生成节点 /codis3/PRODUCT_NAME/group/group-0001~0004
- 同步组内节点数据
在 Dashboard 服务器上执行
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.73:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.73:9746 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.61:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.61:9746 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.127:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.127:9746 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.66:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.66:9746
如同步成功,ZooKeeper /codis3/PRODUCT_NAME/group/group-0001~0004 对应值中的 state 应为 synced
如同步失败,state 为 synced_failed
[zk: localhost:2181(CONNECTED) 13] ls /
[jodis, codis3, zookeeper]
[zk: localhost:2181(CONNECTED) 14] ls /codis3
[CloudMas]
[zk: localhost:2181(CONNECTED) 15] ls /codis3/CloudMas/group
[group-0002, group-0003, group-0004, group-0001]
[zk: localhost:2181(CONNECTED) 16] get /codis3/CloudMas/group/group-000
group-0002 group-0003 group-0004 group-0001
[zk: localhost:2181(CONNECTED) 16] get /codis3/CloudMas/group/group-0001
通过 Redis info 查看集群状态
./bin/redis-cli -h 10.101.33.73 -p 9736 -a Umfintech_0PS info
# Replication
role:master
connected_slaves:1
slave0:ip=10.101.33.61,port=9746,state=online,offset=435,lag=1
master_repl_offset:435
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:434
./bin/redis-cli -h 10.101.33.61 -p 9746 -a Umfintech_0PS info
# Replication
role:slave
master_host:10.101.33.73
master_port:9736
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:533
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
- 配置 fe 服务,实现 WEB 查看 Redis 集群状态
在 Dashboard 服务器上执行
-
创建配置文件
mkdir -p /opt/app/codis/codis/src/github.com/CodisLabs/codis/conf && \ /opt/app/codis/codis/src/github.com/CodisLabs/codis/bin/codis-admin --dashboard-list --zookeeper=10.101.33.73:2181,10.101.33.61:2181,10.101.33.127:2181 | tee /opt/app/codis/codis/src/github.com/CodisLabs/codis/conf/codis.json -
启动
nohup ./bin/codis-fe --ncpu=4 --log-level=WARN --dashboard-list=./conf/codis.json --listen=192.168.1.144:18090 &>> /opt/app/codis/codis/logs/fe.log 2>&1 &ncpu:最大 CPU 数
log:日志存储路径
dashboard-list:配置文件路径
listen:fe 服务器 IP 及监听端口 -
验证
访问 https:$dashboard-IP:Port
-
配置 solt,对各分组分配 solt,未设置 solt 时不可通过 Proxy 端口访问
cd /opt/app/codis/codis/src/github.com/CodisLabs/codis && \ ./bin/codis-admin --dashboard=10.101.33.66:18080 --slot-action --create-range --beg=0 --end=255 --gid=1 && \ ./bin/codis-admin --dashboard=10.101.33.66:18080 --slot-action --create-range --beg=256 --end=511 --gid=2 && \ ./bin/codis-admin --dashboard=10.101.33.66:18080 --slot-action --create-range --beg=512 --end=767 --gid=3 && \ ./bin/codis-admin --dashboard=10.101.33.66:18080 --slot-action --create-range --beg=768 --end=1023 --gid=4slot 范围 0-1023,组内均分
solt 值可去 ZK 查看,同理查看组节点数据
基本命令
- 查看集群信息
/opt/app/codis/codis/src/github.com/CodisLabs/codis/bin/redis-cli -h $ip -p $port -a $password info
-
导出数据
-
命令行导出。只能导出 key,适用于确认数据类型
./bin/redis-cli --raw -h $ip -a $password -p $port --scan --pattern "*:*" &>> ./temp.log*