使用codis-admin搭建codis集群
目的
在Redis Codis 部署安装的文章中,介绍了通过fe在web上搭建codis的基本步骤和方法,也介绍了codis-admin的相关说明,为了更好的熟悉codis-admin的使用,本文将使用codis-admin直接搭建codis集群(和fe进行相关的对比)。这样做的另一个目的是为实现自动化脚本部署的时候做相关的准备。
环境
和Redis Codis 部署安装中的环境一样,包括各个服务的IP和端口,以及安装方法。
|
机器 |
服务 |
端口 |
端口说明 |
依赖 |
|
192.168.163.131/132/133(Ubuntu 16.04) |
Codis |
7021/7022 |
server端口:主/从(三台) |
GO |
|
11080 |
proxy管理端口(三台) |
|||
|
18080 |
dashboard管理端口(一台) |
|||
|
10890 |
fe管理端口(一台) |
|||
|
10086 |
sentinel(三台) |
|||
|
192.168.163.131/132/133(Ubuntu 16.04) |
zookeeper |
2181 |
zk客户端监听端口(三台) |
JDK |
|
2888 |
zk内部通讯端口(三台) |
|||
|
3888 |
zk选举端口(三台) |
开始
首先要保证ZooKeeper、Dashboard、Proxy、Server、Sentine、fe等都已经开启。根据Redis Codis 部署安装文章的安装和配置,进行codis相关组件的开启、关闭(ZK通过上篇文文章说明):
开启关闭进程
1)codis-server
开启(三台)
codis-server /etc/codis/codis-server/redis7021.conf
codis-server /etc/codis/codis-server/redis7022.conf
关闭(三台)
进入到redis里面进行shutdown或则kill。
2)dashboard
开启(一台)
codis-dashboard --ncpu= --config=/etc/codis/codis-dashboard/dashboard.toml --log=/usr/local/codis/logs/dashboard.log --log-level=warn &
关闭(一台)
codis-admin --dashboard=192.168.163.131: --shutdown
3)codis-fe
开启(一台)
cd /etc/codis/codis-fe/ codis-admin --dashboard-list --zookeeper=192.168.163.131: | tee codis.json codis-fe --ncpu= --dashboard-list=/etc/codis/codis-fe/codis.json --listen=192.168.163.131: --log=/usr/local/codis/logs/fe.log --log-level=warn --assets-dir=/usr/local/codis/bin/assets/ &
关闭(一台)
ps -ef|grep codis-fe|grep -v grep|awk '{print $2}'|xargs kill
4)Proxy
开启(三台)
codis-proxy --ncpu= --config=/etc/codis/codis-proxy/proxy.toml --log=/usr/local/codis/logs/proxy.log --log-level=warn &
关闭(三台)
codis-admin --proxy=192.168.163.131: --shutdown
codis-admin --proxy=192.168.163.132: --shutdown
codis-admin --proxy=192.168.163.133: --shutdown
codis-admin应用
1)Proxy
① 添加Proxy到Dashboard,并且设置成Online(3个)。
Proxy进程起来之后一直处于proxy waiting online ...状态,不会接受请求(该状态不会注册到zk的codis3和jodis里)。先加入到Dashboard、注册到zk(jodis、codis3)并设置成online:
codis-admin --dashboard=192.168.163.131: --create-proxy --addr=192.168.163.131:
codis-admin --dashboard=192.168.163.132: --create-proxy --addr=192.168.163.131:
codis-admin --dashboard=192.168.163.133: --create-proxy --addr=192.168.163.131:
等于codis-fe的操作:

执行完毕之后,api会调用:
[WARN] [0xc4202bf440] API call /api/topom/proxy/create/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.133: from 192.168.163.131: [192.168.163.1]
[WARN] create proxy-[cfa02d4002da74e6b1f3b51f1416aa1d]
可以在日志里看到 proxy is working ...
②:从Dashboard上删除掉Proxy。
codis-admin --dashboard=192.168.163.131: --remove-proxy --addr=192.168.163.133:
等于codis-fe的操作:

执行完毕之后,api会调用:
[WARN] [0xc4202bf440] API call /api/topom/proxy/remove/4c0ca749efb5aad2b20b8d84b1bb6905/cfa02d4002da74e6b1f3b51f1416aa1d/ from 192.168.163.132: []
[WARN] remove proxy-[cfa02d4002da74e6b1f3b51f1416aa1d]
需要注意的是,执行该操作之后,不仅从DashBoard退出,而且也会把进程退出掉,后续要开启才能加入。
③:重新同步所有的slots,当Proxy的slots出现异常的时候执行。
codis-admin --dashboard=192.168.163.131: --reinit-proxy --addr=192.168.163.131:
等于codis-fe的操作:

执行完毕之后,api会调用:
[WARN] [0xc4202bf440] API call /api/topom/proxy/reinit/4c0ca749efb5aad2b20b8d84b1bb6905/4f07158ae347d67b1af825fd8e84b2f9 from 192.168.163.131: [192.168.163.1]
[WARN] proxy-[4f07158ae347d67b1af825fd8e84b2f9] reinit:
2)Group
① 添加Group到Dashboard(3个)
codis-admin --dashboard=192.168.163.131: --create-group --gid=
codis-admin --dashboard=192.168.163.131: --create-group --gid=
codis-admin --dashboard=192.168.163.131: --create-group --gid=
等于codis-fe的操作:

执行完毕之后,api会调用:
[WARN] [0xc4202bf440] API call /api/topom/group/create/4c0ca749efb5aad2b20b8d84b1bb6905/ from 192.168.163.132: []
[WARN] create group-[]:
{
"id": ,
"servers": [],
"promoting": {},
"out_of_sync": false
}
...
② 删除Group
codis-admin --dashboard=192.168.163.131: --remove-group --gid=
等于codis-fe的操作:

执行完毕之后,api会调用:
[WARN] [0xc4202bf440] API call /api/topom/group/remove/4c0ca749efb5aad2b20b8d84b1bb6905/ from 192.168.163.132: []
[WARN] remove group-[]:
{
"id": ,
"servers": [],
"promoting": {},
"out_of_sync": false
}
③ 添加Server到Group
#group1
codis-admin --dashboard=192.168.163.131: --group-add --gid= --addr=192.168.163.131:
codis-admin --dashboard=192.168.163.131: --group-add --gid= --addr=192.168.163.132: #group2
...
#group3
...
等于codis-fe的操作:

执行完之后,api会调用:
[WARN] [0xc4202bf440] API call /api/topom/group/add/4c0ca749efb5aad2b20b8d84b1bb6905//192.168.163.132: from 192.168.163.132: []
[WARN] update group-[]:
{
"id": ,
"servers": [
{
"server": "192.168.163.131:7021",
"datacenter": "",
"action": {},
"replica_group": false
},
{
"server": "192.168.163.132:7022",
"datacenter": "",
"action": {},
"replica_group": false
}
],
"promoting": {},
"out_of_sync": false
}
...
③ 移除Group中的Server
codis-admin --dashboard=192.168.163.131: --group-del --gid= --addr=192.168.163.132:
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/group/del/4c0ca749efb5aad2b20b8d84b1bb6905//192.168.163.132: from 192.168.163.132: []
[WARN] update group-[]:
{
"id": ,
"servers": [
{
"server": "192.168.163.131:7021",
"datacenter": "",
"action": {},
"replica_group": false
}
],
"promoting": {},
"out_of_sync": false
}
④ 给Group添加Server
需要注意,做高可用的话每个Group里需要至少2个Server,一主一从。默认第2个Server是从。
codis-admin --dashboard=192.168.163.131: --sync-action --create --addr=192.168.163.132:7022 --第2个server
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/group/action/create/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.132: from 192.168.163.132: []
[WARN] update group-[]
...
[WARN] server-[192.168.163.132:] action prepare
[WARN] update group-[]
...
[WARN] sync-[192.168.163.132:] process action
[WARN] server-[192.168.163.132:] action failed = false
[WARN] update group-[]:
{
"id": ,
"servers": [
{
"server": "192.168.163.131:7021",
"datacenter": "",
"action": {},
"replica_group": false
},
{
"server": "192.168.163.132:7022",
"datacenter": "",
"action": {
"state": "synced"
},
"replica_group": false
}
],
"promoting": {},
"out_of_sync": false
}
⑤ 提升Group的一个Slave为Master
codis-admin --dashboard=192.168.163.131: --promote-server --gid= --addr=192.168.163.133:
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/group/promote/4c0ca749efb5aad2b20b8d84b1bb6905//192.168.163.133: from 192.168.163.132: []
[WARN] group-[] will promote index =
[WARN] update group-[]
"state": "preparing"
...
[WARN] group-[] resync to prepared
[WARN] update group-[]:
"state": "prepared"
...
[WARN] update group-[]:
"state": "finished"
...
[WARN] group-[] resync to finished
[WARN] update group-[]:
{
"id": ,
"servers": [
{
"server": "192.168.163.133:7021",
"datacenter": "",
"action": {},
"replica_group": false
},
{
"server": "192.168.163.131:7022",
"datacenter": "",
"action": {},
"replica_group": false
}
],
"promoting": {},
"out_of_sync": false
}
这里还要注意,Slave提升成Master之后,老Master还需要执行slaveof才能进行新的复制。
codis-admin --dashboard=192.168.163.131: --sync-action --create --addr=192.168.163.131:
3)Slots
注意:此时,所有的slots都处在offline状态,需要进行分配slots。否则客户端会报错:
ERR handle request, slot is not ready, may be offline
① 分配slots,离开offline状态。迁移某一段范围的slots到指定的group,分配所有的slots到Group中。
codis-admin --dashboard=192.168.163.131: --slot-action --create-range --beg= --end= --gid= codis-admin --dashboard=192.168.163.131: --slot-action --create-range --beg= --end= --gid= codis-admin --dashboard=192.168.163.131: --slot-action --create-range --beg= --end= --gid=
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/action/create-range/4c0ca749efb5aad2b20b8d84b1bb6905/// from 192.168.163.131: [192.168.163.1]
[WARN] update slot-[]:
"state": "pending",
...
[WARN] slot-[] action prepare:
"state": "pending",
[WARN] update slot-[]:
"state": "preparing",
...
[WARN] slot-[] resync to prepared
"state": "prepared",
...
[WARN] slot-[] resync to migrating
"state": "migrating",
...
[WARN] slot-[] process action
[WARN] slot-[] action complete
"state": "migrating",
...
[WARN] slot-[] resync to finished
"state": "finished",
...
注意:正在迁移的slots中的key被访问,该key会被立马迁移到新的group,才能被访问。迁移好之后的slots通过--slots-status查看,发生了变化:
{
"id": ,
"backend_addr": "192.168.163.131:7021", --迁移后新增
"backend_addr_group_id": , --迁移后新增
"forward_method":
},
② 迁移slots,迁移指定数量的slots从一个Group到另一个Group。
从Group2中迁移100个slots到Group3中:
codis-admin --dashboard=192.168.163.131: --slot-action --create-some --gid-from= --gid-to= --num-slots=
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/action/create-some/4c0ca749efb5aad2b20b8d84b1bb6905/// from 192.168.163.132: []
"state": "pending",
...
[WARN] slot-[] action prepare:
"state": "pending",
...
"state": "preparing",
[WARN] slot-[] resync to prepared
"state": "prepared",
[WARN] slot-[] resync to migrating
"state": "migrating",
[WARN] slot-[] resync to finished
"state": "finished",
...
注意,勾选Action Status可以查看迁移的进度。
③ 停止、开启Slots迁移。
停止:
codis-admin --dashboard=192.168.163.131: --slot-action --disabled=
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/action/disabled/4c0ca749efb5aad2b20b8d84b1bb6905/ from 192.168.163.132: []
[WARN] set action disabled = true
开启:
codis-admin --dashboard=192.168.163.131: --slot-action --disabled=
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/action/disabled/4c0ca749efb5aad2b20b8d84b1bb6905/ from 192.168.163.132: []
[WARN] set action disabled = false
④ 平均分配slots,各个Group平均分配1024个slots。
codis-admin --dashboard=192.168.163.131: --rebalance --confirm
--confirm 表示执行rebalance,不加表示查看(不执行)
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/rebalance/4c0ca749efb5aad2b20b8d84b1bb6905/ from 192.168.163.132: []
...
[WARN] slot-[] resync to finished
...
⑤ slots迁移的时间间隔
codis-admin --dashboard=192.168.163.131: --slot-action --interval=
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/action/interval/4c0ca749efb5aad2b20b8d84b1bb6905/ from 192.168.163.132: []
[WARN] set action interval =
4)Sentinel 高可用
① 添加Sentinel(3个)
codis-admin --dashboard=192.168.163.131: --sentinel-add --addr=192.168.163.131:
codis-admin --dashboard=192.168.163.131: --sentinel-add --addr=192.168.163.132:
codis-admin --dashboard=192.168.163.131: --sentinel-add --addr=192.168.163.133:
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/sentinels/add/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.131: from 192.168.163.132: []
[WARN] update sentinel:
{
"servers": [
"192.168.163.131:10086"
],
"out_of_sync": true
}
...
为了保证Sentinel服务的正常,需要再resync下sentinel:
codis-admin --dashboard=192.168.163.131: --sentinel-resync
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/sentinels/resync-all/4c0ca749efb5aad2b20b8d84b1bb6905 from 192.168.163.132: []
[WARN] rewatch sentinels = [192.168.163.131: 192.168.163.132: 192.168.163.133:]
② 移除Sentinel
codis-admin --dashboard=192.168.163.131: --sentinel-del --addr=192.168.163.133:
等于codis-fe的操作:

执行时,调用的api:
[WARN] [0xc4202bf440] API call /api/topom/sentinels/del/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.133:/ from 192.168.163.132: []
到此,通过codis-admin已经完成了Codis的搭建。
总结
通过本文的说明,进一步理顺了codis-admin的各个命令。可以不依赖fe的web界面进行Codis集群的搭建,可以为自动化的一些脚本做好更好的支持工作。
使用codis-admin搭建codis集群的更多相关文章
- 使用Codis搭建redis集群服务
转(http://www.jianshu.com/p/f8e968e57863) 一. 应用场景 redis 作为数据结构存储引擎,有着很多优点 高性能单机引擎可以达到5-10W qps 数据结构全面 ...
- 使用Windows Azure的VM安装和配置CDH搭建Hadoop集群
本文主要内容是使用Windows Azure的VIRTUAL MACHINES和NETWORKS服务安装CDH (Cloudera Distribution Including Apache Hado ...
- 搭建mongodb集群(副本集+分片)
搭建mongodb集群(副本集+分片) 转载自:http://blog.csdn.net/bluejoe2000/article/details/41323051 完整的搭建mongodb集群(副本集 ...
- Linux 搭建Hadoop集群 成功
内容基于(自己的真是操作步骤编写) Linux 搭建Hadoop集群---Jdk配置 Linux 搭建Hadoop集群 ---SSH免密登陆 一:下载安装 Hadoop 1.1:下载指定的Hadoop ...
- centos7搭建kafka集群-第二篇
好了,本篇开始部署kafka集群 Zookeeper集群搭建 注:Kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群(也可以用kafka自带的ZK,但不推荐) 1.软 ...
- Kafka学习之(六)搭建kafka集群
想要搭建kafka集群,必须具备zookeeper集群,关于zookeeper集群的搭建,在Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建博客有说明.需要具备两台以上装有zook ...
- kubeadm搭建kubernetes集群之二:创建master节点
在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...
- 搭建Activemq集群
首先搭建zookeeper集群: 参考URL: http://www.cnblogs.com/feiyun126/p/7244394.html 三台服务器:先设置hosts 10.0.0.231 n ...
- kubeadm 搭建 K8S集群
kubeadm是K8s官方推荐的快速搭建K8s集群的方法. 环境: Ubuntu 16.04 1 安装docker Install Docker from Ubuntu’s repositories: ...
- mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 区域
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
随机推荐
- centos docker 升级至最新稳定版--摘自官网
亲测好使 删除老版本的docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ do ...
- P2V后,VMWare ESX 上RedHat AS5网络不通问题的解决办法
现象: 机器在启动eth0后,可以ping通eth0的IP,但是很快就无法访问了. 原因: red hat 5.x 默认系统安装完成后为xen内核,那么xen内核引导启动后就会有虚拟网卡(vethx. ...
- 自行搭建私有云kodexplorer
kodexplorer是一款开源的私有云框架,可以通过它实现个人网盘的功能,如果拥有一个性能不错的VPS,那么就可以摆脱奇慢无比的百度云等网盘啦!最近百度网盘还发出申明,说要限制使用空间.用别人的东西 ...
- Shell 脚本处理用户输入
传递参数 跟踪参数 移动变量 处理选项 将选项标准化 获得用户的输入 bash shell提供了一些不同的方法来从用户处获取数据,包括命令行参数(添加在命令后数据),命令行选项(可以修改命令行为的单个 ...
- es5中的for in 与es6中的for of的用法与区别
for in 用与循环遍历对象中的属性键值 for of用于循环遍历出数组中的属性值 for in 也可以遍历数组,但是局限是他会把数组的其他属性键值也会遍历出,例如给数组添加一个属性arr.name ...
- Android双击Home键返回桌面
转载自:http://blog.csdn.net/dl10210950/article/details/60866407 2中方式,都是监听返回键 一种 1 private long time; /* ...
- 依赖注入[7]: .NET Core DI框架[服务注册]
包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IServiceProvider对象.服务注册就是创建出现相应的ServiceDescriptor对象并将其添加到 ...
- Spring Cloud,Dubbo及HSF对比
Round 1:背景 Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点.阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm捐赠给Apa ...
- Redis两种方式实现限流
案例-实现访问频率限制: 实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次. 非脚本实现 private boolean accessLimit(String ip, int ...
- InputStream和Reader,FileInputStream和 FileReader的区别
一.InputStream和Reader的区别 InputStream和Reader都可以用来读数据(从文件中读取数据或从Socket中读取数据),最主要的区别如下: InputStream用来读取二 ...