# 集群操作
# 1、功能概述
开发sudis_adm命令行程序,是用作Sudis Cluster Manager(以下简称 manager)的客户端。用户可通过sudis_adm向manage、agent发送约定好的消息,进而操作集群。
# 2、安装使用
sudis_adm是编译好的Linux命令行程序,伴随sudis的安装,会出现在/opt/sudis/bin目录下,若系统权限允许,可直接运行。
# 3、功能列表
# 3.1、Agent服务
# 命令列表
命令 | 说明 |
---|---|
ping | ping agent |
createmanager | 创建manager服务,创建成功时自动启动 |
getmachinestats | 获取物理机器的资源使用情况 |
gethoststats | 获取服务的资源占用情况 |
startmanager | 使用配置文件启动主从manager |
stopmanger | 停止一个manager |
# 命令详细说明:
# ping
该命令用于ping agent服务是否可连接,用于操作集群
参数说明:
- --addr:agent服务地址,格式为:ip:port
示例:ping 地址为127.0.0.1 端口号为16384的agent服务
/opt/sudis/bin/sudis_adm agent ping --addr 127.0.0.1:16384
[sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent ping --addr 127.0.0.1:16384 meta: id: 10 code: 0 msg: Success
# createmanager
该命令用于创建集群管理服务manager
参数说明:
- --port:通过此端口连接agent(默认为16384)
- --master:主管理器的IP地址,格式为:ip:port:agentport
- --slave:从管理器的IP地址,格式为:ip:port:agentport
示例:创建一个manager主机端口为16667,从机端口为16668
/opt/sudis/bin/sudis_adm agent createmanager --master 127.0.0.1:16667:16384 --slave 127.0.0.1:16668:16384
[sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent createmanager --master 127.0.0.1:16667:16384 --slave 127.0.0.1:16668:16384 meta: id: 11 code: 0 msg: Success
# getmachinestats
该命令用于获取agent机器的资源使用情况
参数说明:
- --addr:通过此端口连接agent(默认为16384)
示例:获取主机为127.0.0.1端口号为16384的agent主机资源使用情况
/opt/sudis/bin/sudis_adm agent getmachinestats --addr 127.0.0.1:16384
[sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent getmachinestats --addr 127.0.0.1:16384 meta: id: 17 code: 0 msg: Success stats: cpu_stats: idle: 99.3700027 mem_stats: total_size: 67265400832 avail_size: 45177835520 stor_stats: total_size: 48842928128 avail_size: 26244808704 sudis_instances: 7 host_name: web2
# gethoststats
该命令用于获取agent机器的资源占用情况
参数说明:
- --addr:要连接的agent地址
- --port:需要查询的服务端口
示例:获取主机为127.0.0.1端口号为16384的agent主机的10001端口资源占用情况
/opt/sudis/bin/sudis_adm agent gethoststats --addr 127.0.0.1:16384 --port 10001
[sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent gethoststats --addr 127.0.0.1:16384 --port 10001 meta: id: 12 code: 0 msg: Success stats: cpu_stats: idle: 100 mem_stats: total_size: 67265400832 avail_size: 660979712 stor_stats: total_size: 0 avail_size: 0
# startmanager
该命令用于启动主从manager
参数说明:
- --dirid: 可选,指定启动manager的目录id,可选1、2,默认1;用于在测试环境下,两个manager需要被部署在同一台机器上时,是启动1还是2;当addrs提供两个地址时,该参数无效
- --addrs: 主从manager所在机器上的agent地址,eg:192.168.1.1:16384 192.168.1.2:16384,允许一次只启动一个cms,提供一个地址即可
示例:启动127.0.0.1机器上的manager
/opt/sudis/bin/sudis_adm agent startmanager --addrs 127.0.0.1:16384
[sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent startmanager --addrs 127.0.0.1:16384 meta: id: 18 code: 0 msg: Success
# stopmanger
该命令用于停止一个manager
参数说明:
- --addr:manager所在机器上的agent地址+manager端口,eg: 127.0.0.1:16384:16667
示例:停止16667主
/opt/sudis/bin/sudis_adm agent stopmanager --addr 127.0.0.1:16384:16667
[sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent stopmanager --addr 127.0.0.1:16384:16667 meta: id: 18 code: 0 msg: Success
# 3.2、Manager服务
# 命令列表
命令 | 说明 |
---|---|
--addr | 可选,指定manager地址与端口号,默认127.0.0.1:16667,注意:manager相关命令必须发送给manager master,如果默认地址不对,请携带这个参数 |
listmanagers | 获取主从manager信息(ip、port、role、state、cfg_path) |
listclusters | 获取当前manager上的所有集群的id及name |
createcluster | 创建集群,必须满足hostsnumber = master+slave*master |
showcluster | 获取cluster信息 |
scaleupcluster | 集群扩容 |
scaledowncluster | 集群缩容 |
deletecluster | 删除id为cluster_id的集群,若集群未停止,会先stop |
listhosts | 显示集群所包含的hosts信息 |
addhost | 增加节点到指定cluster,作为谁的slave |
removehost | 移除cluster_id上节点id为host_id的host |
listslots | 显示集群上从offset开始的count个slots信息(keys、datasize) |
assignslots | 手动分派slots,createcluster后,可使用此命令修改默认分配 |
migrateslot | 迁移slot到新host |
startcluster | 启动cluster服务 |
stopcluster | 停止cluster服务 |
# 命令详细说明:
# --addr
可选,指定manager地址与端口号,默认为127.0.0.1:16667,命令使用master执行
# listmanagers
获取manager信息
示例:获取主机为127.0.0.1端口号为16667的manager信息
/opt/sudis/bin/sudis_adm manager --addr 127.0.0.1:16667 listmanagers
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager listmanagers meta: id: 20 code: 0 msg: Success id: 0 port: 16667 ip_addr: 127.0.0.1 role: HOST_ROLE_MANAGER_MASTER state: 2 cfg_path: /opt/sudis/cms/1/manager_config.yaml peer_port: 16668 peer_ip_addr: 127.0.0.1
# listclusters
获取当前manager上的所有集群列表
示例:获取主机为127.0.0.1端口号为16667的manager的集群列表
/opt/sudis/bin/sudis_adm manager listclusters
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager listclusters meta: id: 6 code: 0 msg: Success identitys: - name: clustertest cluster_id: 1
# createcluster
创建集群
参数说明:
- --type:可选,集群类型,参数可填0或1,默认是0;0:cluster 1:sentinel
- --name:可选,集群名称
- --port:可选,在data node使用的统一data port时使用
- --hosts: ip1:agentport1[:dataport1] ··· 节点ip及及对应机器上的agent port[及节点data port]
- --masternum:主节点个数
- --replicas:每个主节点所带从节点个数
示例:创建一个集群四个节点,两主两从
/opt/sudis/bin/sudis_adm manager --addr 127.0.0.1:16667 createcluster --name clustertest2 --masternum 2 --replicas 1 --hosts 127.0.0.1:16384:9996 127.0.0.1:16384:9995 127.0.0.1:16384:9994 127.0.0.1:16384:9993
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager --addr 127.0.0.1:16667 createcluster --name clustertest2 --masternum 2 --replicas 1 --hosts 127.0.0.1:16384:9996 127.0.0.1:16384:9995 127.0.0.1:16384:9994 127.0.0.1:16384:9993 meta: id: 1 code: 0 msg: Success cluster_id: 2
# showcluster
获取指定集群详细信息
参数说明:
- --cluster_id:集群ID
示例:获取ID为2的集群详细信息
/opt/sudis/bin/sudis_adm manager showcluster --cluster_id 2
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager showcluster --cluster_id 2 meta: id: 2 code: 0 msg: Success state: 1 config: name: clustertest2 master_num: 2 replica: 1 db_usage: keys: 0 data_size: 0 hosts_details: - host: id: 1 port: 9996 ip_addr: 127.0.0.1 agent_port: 16384 role: HOST_ROLE_DATA_MASTER state: NODE_STATE_INIT slots_str: "[0,8191]" master_id: 0 db_usage: keys: 0 data_size: 0 - host: id: 2 port: 9995 ip_addr: 127.0.0.1 agent_port: 16384 role: HOST_ROLE_DATA_SLAVE state: NODE_STATE_INIT slots_str: "" master_id: 1 db_usage: keys: 0 data_size: 0 - host: id: 3 port: 9994 ip_addr: 127.0.0.1 agent_port: 16384 role: HOST_ROLE_DATA_MASTER state: NODE_STATE_INIT slots_str: "[8192,16383]" master_id: 0 db_usage: keys: 0 data_size: 0 - host: id: 4 port: 9993 ip_addr: 127.0.0.1 agent_port: 16384 role: HOST_ROLE_DATA_SLAVE state: NODE_STATE_INIT slots_str: "" master_id: 3 db_usage: keys: 0 data_size: 0
# listhosts
获取指定集群的hosts信息
参数说明:
- --cluster_id:集群ID
示例:获取ID为2的集群的hosts信息
/opt/sudis/bin/sudis_adm manager listhosts --cluster_id 2
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager listhosts --cluster_id 2 meta: id: 5 code: 0 msg: Success hosts_details: - host: id: 1 port: 9996 ip_addr: 127.0.0.1 agent_port: 16384 role: HOST_ROLE_DATA_MASTER state: NODE_STATE_INIT slots_str: "[0,8191]" master_id: 1 db_usage: keys: 0 data_size: 0 - host: id: 2 port: 9995 ip_addr: 127.0.0.1 agent_port: 16384 role: HOST_ROLE_DATA_SLAVE state: NODE_STATE_INIT slots_str: "" master_id: 1 db_usage: keys: 0 data_size: 0 - host: id: 3 port: 9994 ip_addr: 127.0.0.1 agent_port: 16384 role: HOST_ROLE_DATA_MASTER state: NODE_STATE_INIT slots_str: "[8192,16383]" master_id: 3 db_usage: keys: 0 data_size: 0 - host: id: 4 port: 9993 ip_addr: 127.0.0.1 agent_port: 16384 role: HOST_ROLE_DATA_SLAVE state: NODE_STATE_INIT slots_str: "" master_id: 3 db_usage: keys: 0 data_size: 0
# addhost
为指定的集群增加节点
参数说明:
- --cluster_id:集群ID
- --host: 需要增加的节点的ip:agentport:dataport
示例:为集群ID为2的集群增加一个节点
/opt/sudis/bin/sudis_adm manager addhost --cluster_id 2 --host 127.0.0.1:16384:9992
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager addhost --cluster_id 2 --host 127.0.0.1:16384:9992 meta: id: 7 code: 0 msg: Success host_id: 5
# removehost
移除指定集群上的节点
参数说明:
- --cluster_id:集群ID
- --host_id: 需要移除的host_id
示例:移除ID为2集群上host_id为5的节点
/opt/sudis/bin/sudis_adm manager removehost --cluster_id 2 --host_id 5
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager removehost --cluster_id 2 --host_id 5 meta: id: 8 code: 0 msg: Success
# listslots
显示指定集群上从offset开始的count个slots信息
参数说明:
- --cluster_id:集群ID
- --offset:可选,起始位置
- --count:可选,长度
示例:获取集群ID为2区间为1024-1028的slots信息
/opt/sudis/bin/sudis_adm manager listslots --cluster_id 2 --offset 1024 --count 5
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager listslots --cluster_id 2 --offset 1024 --count 5 meta: id: 9 code: 0 msg: Success slots: - id: 1024 host_id: 1 keys: 0 data_size: 0 - id: 1025 host_id: 1 keys: 0 data_size: 0 - id: 1026 host_id: 1 keys: 0 data_size: 0 - id: 1027 host_id: 1 keys: 0 data_size: 0 - id: 1028 host_id: 1 keys: 0 data_size: 0
# assignslots
手动分配slots,在创建集群之后,启动之前使用
参数说明:
- --cluster_id:集群ID
- --slots_range:slots区间
- --host_id:master节点ID
示例:将集群ID为2的1024-8191slots分配给ID为3的master
/opt/sudis/bin/sudis_adm manager assignslots --cluster_id 2 --slots_range [1024,8191] --host_id 3
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager assignslots --cluster_id 2 --slots_range [1024,8191] --host_id 3 meta: id: 13 code: 0 msg: Success
# startcluster
启动指定集群
参数说明:
- --cluster_id:集群ID
示例:启动ID为2的集群
/opt/sudis/bin/sudis_adm manager startcluster --cluster_id 2
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager startcluster --cluster_id 2 meta: id: 15 code: 0 msg: Success
# stopcluster
停止指定集群
参数说明:
- --cluster_id:集群ID
示例:停止ID为2的集群
/opt/sudis/bin/sudis_adm manager stopcluster --cluster_id 2
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager stopcluster --cluster_id 2 meta: id: 16 code: 0 msg: Success
# deletecluster
删除指定集群
参数说明:
- --cluster_id:集群ID
示例:删除ID为2的集群
/opt/sudis/bin/sudis_adm manager deletecluster --cluster_id 2
[sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager deletecluster --cluster_id 2 meta: id: 4 code: 0 msg: Successs
# scaleupcluster
集群扩容
参数说明:
- --cluster_id: 集群ID
- --hosts: 新增节点(ip:agentport:dataport)
示例:为ID为1的集群新增2个节点
/opt/sudis/bin/sudis_adm manager --addr 192.168.1.213:16667 scaleupcluster --cluster_id 1 --hosts 192.168.1.215:16384:10001 192.168.1.220:16384:10001
[root@192-168-1-213 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.213:16667 scaleupcluster --cluster_id 1 --hosts 192.168.1.215:16384:10001 192.168.1.220:16384:10001 meta: id: 3 code: 0 msg: Success host_id: - 3 - 4
# scaledowncluster
集群缩容
参数说明:
- --cluster_id: 集群ID
- --host_id: 集群节点ID
示例:对集群中master节点3进行缩容
/opt/sudis/bin/sudis_adm manager --addr 192.168.1.213:16667 scaledowncluster --cluster_id 1 --host_id 3
[root@192-168-1-213 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.213:16667 scaledowncluster --cluster_id 1 --host_id 3 4 meta: id: 18 code: 0 msg: Success
# 3.3、集群扩缩容场景演示
# 准备机器
ip示例:192.168.1.225、192.168.1.226、192.168.1.227、192.168.1.228。
准备2台机器,用于创建一主一从的集群。
IP为:192.168.1.225、192.168.1.226。
# 启动agent服务
启动192.168.1.225、192.168.1.226的agent服务
[root@192-168-1-225 ~]# systemctl start sudis_agent
# 查看状态
[root@192-168-1-225 ~]# systemctl status sudis_agent
● sudis_agent.service - sudis_agent Service
Loaded: loaded (/usr/lib/systemd/system/sudis_agent.service; linked; vendor preset: disabled)
Active: active (running) since Wed 2024-06-26 18:21:52 CST; 1 day 20h ago
Main PID: 3865353 (sudis_agent)
Tasks: 12 (limit: 23672)
Memory: 76.1M
CGroup: /system.slice/sudis_agent.service
└─3865353 /opt/sudis/bin/sudis_agent -c /opt/sudis/agent/agent_config.yaml
# 创建manager服务
在192.168.1.225机器上创建manager服务
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm agent createmanager --master 192.168.1.225:16667:16384 --slave 192.168.1.226:16668:16384
meta:
id: 11
code: 0
msg: Success
在192.168.1.225上查看主从manager信息
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager listmanagers
meta:
id: 20
code: 0
msg: Success
id: 0
port: 16667
agent_port: 16384
ip_addr: 192.168.1.225
role: HOST_ROLE_MANAGER_MASTER
state: 2
cfg_path: /opt/sudis/cms/1/manager_config.yaml
peer_port: 16668
peer_ip_addr: 192.168.1.226
# 创建1主1从集群
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.225:16667 createcluster --name testcluster --masternum 1 --replicas 1 --hosts 192.168.1.225:16384:10001 192.168.1.226:16384:10001
meta:
id: 1
code: 0
msg: Success
cluster_id: 1
查看集群创建信息
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.225:16667 listclusters
meta:
id: 6
code: 0
msg: Success
identitys:
- name: testcluster
cluster_id: 1
查看集群详细信息
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager showcluster --cluster_id 1
meta:
id: 2
code: 0
msg: Success
state: 1
config:
type: CLUSTER_TYPE_CLUSTER
name: testcluster
master_num: 1
replica: 1
db_usage:
keys: 0
data_size: 0
hosts_details:
- host:
id: 1
port: 10001
ip_addr: 192.168.1.225
agent_port: 16384
cport: 0
role: HOST_ROLE_DATA_MASTER
state: NODE_STATE_INIT
slots_str: "[0,16383]"
master_id: 0
db_usage:
keys: 0
data_size: 0
- host:
id: 2
port: 10002
ip_addr: 192.168.1.226
agent_port: 16384
cport: 0
role: HOST_ROLE_DATA_SLAVE
state: NODE_STATE_INIT
slots_str: ""
master_id: 1
db_usage:
keys: 0
data_size: 0
# 启动集群
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager startcluster --cluster_id 1
meta:
id: 15
code: 0
msg: Success
查看集群详细信息
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager showcluster --cluster_id 1
meta:
id: 2
code: 0
msg: Success
state: 4
config:
type: CLUSTER_TYPE_CLUSTER
name: testcluster
master_num: 1
replica: 1
db_usage:
keys: 0
data_size: 0
hosts_details:
- host:
id: 1
port: 10001
ip_addr: 192.168.1.225
agent_port: 16384
cport: 0
role: HOST_ROLE_DATA_MASTER
state: NODE_STATE_OK
slots_str: "[0,16383]"
master_id: 0
db_usage:
keys: 0
data_size: 0
- host:
id: 2
port: 10002
ip_addr: 192.168.1.226
agent_port: 16384
cport: 0
role: HOST_ROLE_DATA_SLAVE
state: NODE_STATE_OK
slots_str: ""
master_id: 1
db_usage:
keys: 0
data_size: 0
# 扩展集群
1、在192.168.1.225机器上进行扩展
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.225:16667 scaleupcluster --cluster_id 1 --hosts 192.168.1.227:16384:10001 192.168.1.228:16384:10001
meta:
id: 3
code: 0
msg: Success
host_id:
- 3
- 4
查看集群的日志
1、当日志停止后代表扩容成功
[root@192-168-1-225 ~]# tail -f /opt/sudis/cms/1/cluster_service.log
扩容成功后查看集群信息
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager showcluster --cluster_id 1
meta:
id: 2
code: 0
msg: Success
state: 5
config:
type: CLUSTER_TYPE_CLUSTER
name: mytest
master_num: 2
replica: 1
db_usage:
keys: 56550
data_size: 7843671
hosts_details:
- host:
id: 1
port: 10001
ip_addr: 192.168.1.225
agent_port: 16384
cport: 0
role: HOST_ROLE_DATA_MASTER
state: NODE_STATE_OK
slots_str: "[109,16383]"
master_id: 0
db_usage:
keys: 0
data_size: 0
- host:
id: 2
port: 10001
ip_addr: 192.168.1.226
agent_port: 16384
cport: 0
role: HOST_ROLE_DATA_SLAVE
state: NODE_STATE_OK
slots_str: ""
master_id: 1
db_usage:
keys: 0
data_size: 0
- host:
id: 3
port: 10001
ip_addr: 192.168.1.227
agent_port: 16384
cport: 0
role: HOST_ROLE_DATA_MASTER
state: NODE_STATE_OK
slots_str: "[0,108]"
master_id: 0
db_usage:
keys: 56550
data_size: 7843671
- host:
id: 4
port: 10001
ip_addr: 192.168.1.228
agent_port: 16384
cport: 0
role: HOST_ROLE_DATA_SLAVE
state: NODE_STATE_OK
slots_str: ""
master_id: 5
db_usage:
keys: 0
data_size: 0
# 缩容集群
执行缩容命令
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.215:16667 scaledowncluster --cluster_id 1 --host_id 3
meta:
id: 18
code: 0
msg: Success
查看225的cms log日志
1、当日志停止后代表缩容成功
[root@192-168-1-225 ~]# tail -f /opt/sudis/cms/1/cluster_service.log
缩容后查看集群详细信息
[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager showcluster --cluster_id 1
meta:
id: 2
code: 0
msg: Success
state: 4
config:
type: CLUSTER_TYPE_CLUSTER
name: testcluster
master_num: 1
replica: 1
db_usage:
keys: 0
data_size: 0
hosts_details:
- host:
id: 1
port: 10001
ip_addr: 192.168.1.225
agent_port: 16384
cport: 0
role: HOST_ROLE_DATA_MASTER
state: NODE_STATE_OK
slots_str: "[0,16383]"
master_id: 0
db_usage:
keys: 0
data_size: 0
- host:
id: 2
port: 10002
ip_addr: 192.168.1.226
agent_port: 16384
cport: 0
role: HOST_ROLE_DATA_SLAVE
state: NODE_STATE_OK
slots_str: ""
master_id: 1
db_usage:
keys: 0
data_size: 0
← 命令支持