集群使用
集群启停
启动集群
1、启动dcs,启动dcs第一个节点时会出现阻塞,第二个节点启动后退出阻塞。
在各服务器执行:
systemctl start dcs
2、先启动主库has,再启动备库has。注意,必须先保证dcs已经启动。
在各服务器执行:
systemctl start has
停止集群
停止集群需要按特定步骤,以避免出现不必要的问题,具体如下:
先停has,再停dcs,注意,先停备库,再停主库,防止先停主库发生不必要的自动切换。
1、在各服务器执行:
systemctl stop has
2、在各服务器执行:
systemctl stop dcs
查看集群
使用数据库用户在安装有has的机器上进入安装目录下的bin目录执行./hasctl -c <yml配置文件> list <集群名>
,其中<集群名>
可以省略。后续默认hasctl都在在目录下运行。
例如:
./hasctl -c /home/vastbase/has/etc/vastbase.yml list vastbase
执行成功后会显示主备库各节点的信息,下图为一主两备的情况:
主备切换
参考集群日常维护。
故障切换
在主库机器故障时,备库自动升级为主库。模拟该故障的情况可以使用kill
命令杀掉管理主库的has进程或关掉安装有主库的机器等其它类似操作,然后在安装有备库的机器上执行集群查看命令查看备库节点的信息,此时备库的角色会显示为leader。
故障发生后时,使用数据库用户查询各节点信息显示如下:
- 集群初始阶段
- 主库停止阶段,state显示stopped,备库role显示为leader:
- 无法获取前主库的信息,只显示当前存活节点信息:
hasctl
命令行工具 hasctl 主要用于与 HAS 的 REST API 和 DCS 交互,它使得在集群中执行操作变得更容易。
以下介绍 hasctl 的部分常用选项。
常用选项
hasctl 本身有以下命令行参数:
-c / --config-file
为 hasctl 指定配置文件的路径。
-d / --dcs-url / --dcs
为 HAS 使用的 DCS 提供连接字符串。
-k / --insecure
绕过 REST API 服务器 SSL 证书验证的标志。
hasctl edit-config
功能描述
hasctl edit-config
会更改群集的动态配置,并据此更新 DCS。
语法格式
edit-config
[ CLUSTER_NAME ]
[ { -q | --quiet } ]
[ { -s | --set } CONFIG="VALUE" [, ... ] ]
[ { --apply | --replace } CONFIG_FILE ]
[ --force ]
参数说明
CLUSTER_NAME
HAS 集群的名称。
如果没有指定,hasctl 将尝试从
scope
配置(如果存在)中获取。-q / --quiet
跳过显示配置差异的标志。
-s / --set
用给定值设置给定的动态配置选项。
CONFIG 是 YAML 动态配置路径的名称。
VALUE 是 CONFIG 的值,如果为空,则 CONFIG 将从动态配置中删除。
--apply
应用给定文件中的动态配置。
这类似于为
-s / --set CONFIG_FILE
中的每个配置指定了多个选项。--replace
用给定文件中指定的动态配置替换 DCS 中的动态配置。
--force
在更改动态配置时跳过确认提示的标志。
此选项在 hasctl 被脚本使用时十分有用。
hasctl show-config
功能描述
hasctl show-config
显示存储在 DCS 中的群集动态配置。
语法格式
show-config
[ CLUSTER_NAME ]
参数说明
CLUSTER_NAME:
HAS 集群的名称。
如果没有给出,将尝试从配置(如果存在)中获取。
hasctl list
功能描述
hasctl list
显示 HAS 集群及其成员的信息。
输出信息
Cluster
HAS 集群的名称。
Member
HAS 集群成员的名称。
Host
HAS 集群成员所在的主机IP。
Role
集群成员的当前角色。
可以是以下其中之一:
Leader: 常规集群的当前领导;
Standby Leader:HAS 备集群的当前领导;其行为与常规集群领导者非常相似,只是它从远程主服务器复制。
Sync Standby:同步备库;
Replica:HAS 集群的常规备库。
State
当前 HAS 集群中 Vastbase 的状态。
可能的状态包括:
running:Vastbase 当前正在运行;
streaming:replica 备上的 Vastbase 当前正在从主节点流式传输 WAL;
in archive recovery:replica 备上的 Vastbase 当前正在从归档中获取 WAL;
stoped:Vastbase 已关闭;
crashed:Vastbase 已崩溃。
TL
HAS 成员中当前的 Vastbase 时间轴。
Lag in MB
HAS 成员与其上游之间的复制滞后值(兆字节)。
System identifier
Vastbase 的系统标识符。
Pending restart
表示节点需要重启才能使某些 Vastbase 配置生效。空值表示节点不需要重启。
Scheduled restart
HAS 成员管理的 Vastbase 实例计划重启的时间戳。空值表示该成员没有计划重启。
Tags
包含为 HAS 成员设置的标记。空值表示没有配置标签,或配置的是默认值。
Scheduled switchover
HAS 集群计划切换的时间戳(如果有)。
语法格式
list
[ CLUSTER_NAME [, ... ] ]
[ { -e | --extended } ]
[ { -t | --timestamp } ]
[ { -f | --format } { pretty | tsv | json | yaml } ]
[ { -W | { -w | --watch } TIME } ]
参数说明
CLUSTER_NAME
HAS 集群的名称。
-e / --extended
显示扩展信息。
-t / --timestamp
在打印集群及其成员信息之前打印时间戳。
-f / --format
如何格式化输出中的事件列表。
支持的格式包括:
pretty:将历史记录输出成梅花后的表格形式(默认);
tsv:以表格形式打印历史信息,使用
;
或者\t
作为列的分隔符。json:以 JSON 格式打印历史记录;
yaml:以 YAML 格式打印历史记录。
-W
每 2 秒自动刷新一次信息。
-w / --watch
以指定的时间间隔自动刷新信息。
TIME 是刷新间隔时间,单位为秒。
hasctl reload
功能描述
hasctl reload
请求为一个或多个 HAS 成员重新加载本地配置。
它还会触发受管 Vastbase 实例的 vb_ctl reload
,即使没有任何变化。
语法格式
reload
CLUSTER_NAME
[ MEMBER_NAME [, ... ] ]
[ { -r | --role } { leader | primary | standby-leader | replica | standby | any } ]
[ --force ]
参数说明
CLUSTER_NAME
HAS 集群的名称。
MEMBER_NAME
为指定成员重新加载 HAS 配置。
可指定多个成员。如果没有指定成员,则更新所有成员。
-r / --role
选择具有指定角色的成员。
角色可以是:
Leader: 常规集群或备集群的当前Leader;
primary:常规 HAS 集群的Leader。
standby-leader:备集群的Leader。
Replica:HAS 集群的副本。
standby:与
Replica
相同。any:任何角色。与省略该参数的效果相同。
--force
用于在请求重新加载本地配置时跳过确认提示的标志。
此选项在 hasctl 被脚本使用时十分有用。
hasctl restart
功能描述
hasctl restart
请求重启由 HAS 集群成员管理的 Vastbase 实例。
重启可以立即进行,也可以安排在稍后进行。
语法格式
restart
CLUSTER_NAME
[ MEMBER_NAME [, ...] ]
[ { -r | --role } { leader | primary | standby-leader | replica | standby | any } ]
[ --any ]
[ --pg-version PG_VERSION ]
[ --pending ]
[ --timeout TIMEOUT ]
[ --scheduled TIMESTAMP ]
[ --force ]
参数说明
CLUSTER_NAME
HAS 集群的名称。
-r / --role
选择具有指定角色的成员。
角色可以是:
Leader: 常规集群或备集群的当前Leader;
primary:常规 HAS 集群的Leader。
standby-leader:备集群的Leader。
Replica:HAS 集群的副本。
standby:与
Replica
相同。any:任何角色。与省略该参数的效果相同。
--any
从符合给定筛选条件的节点中随机重启一个节点。
--pg-version
只选择所管理的 Vastbase 实例版本比给定版本早的成员。
PG_VERSION 是要比较的 Vastbase 版本。
--pending
只选择标记为“待重启”的成员。
timeout
如果重启时间超过指定的超时时间,则中止重启;如果问题出在主系统上,则故障转移到副本。
TIMEOUT 是终止重启前需要等待的秒数。
--scheduled
安排在给定的时间戳重新启动。
TIMESTAMP 是重启时间戳。请以明确的格式指定,最好带有时区。也可以使用字面意义的 now 来表示重启立即执行。
--force
在请求重启操作时跳过确认提示的标志。
此选项在 hasctl 被脚本使用时十分有用。
hasctl failover
功能描述
hasctl failover
可在群集中执行手动故障切换。
它用在集群状态不健康的情况下,例如:
没有领导者;
同步群集中没有可用的同步备库;
如果同步模式已启用,failover 还允许故障切换到异步节点。
语法格式
failover
[ CLUSTER_NAME ]
[ { --leader | --primary } LEADER_NAME ]
--candidate CANDIDATE_NAME
[ --force ]
参数说明
CLUSTER_NAME
HAS 集群的名称。
如果没有给出,hasctl 将尝试从
scope
配置(如果存在)中获取。--leader / --primary
指明在 failover 时谁是预期的领导者。
如果给定,将执行切换而不是故障转移。
LEADER_NAME 应与群集中当前领导者的名称一致。
--candidate
failover 时要升级的节点。
CANDIDATE_NAME 是要升级的节点名称。
--force
执行 failover 时跳过确认提示的标志。
此选项在 hasctl 被脚本使用时十分有用。
hasctl switchover
功能描述
hasctl switchover
在群集中执行手动主备切换。
它用于集群状态健康时,例如:
集群有一个Leader;
同步集群中有同步备库。
语法格式
switchover
[ CLUSTER_NAME ]
[ { --leader | --primary } LEADER_NAME ]
--candidate CANDIDATE_NAME
[ --force ]
参数说明
CLUSTER_NAME
HAS 集群的名称。
如果没有给出,hasctl 将尝试从
scope
配置中获取(如果存在)。--leader / --primary
指明谁是切换时要降级的领导者。
LEADER_NAME 应与群集中当前领导者的名称一致。
--candidate
切换时要晋升并担任主要角色的节点。
CANDIDATE_NAME 是要晋升的节点名称。
--scheduled
安排在给定的时间戳进行切换。
TIMESTAMP 是切换发生的时间戳。请以明确的格式指定,最好带有时区。也可以使用字面意义的 now 来表示立即执行切换。
--force
执行切换时跳过确认提示的标志。
此选项在 hasctl 被脚本使用时十分有用。
hasctl version
功能描述
hasctl version
获取 hasctl 应用程序的版本信息。此外,它还可能包括 HAS 集群及其成员的版本信息。
语法格式
version
[ CLUSTER_NAME [, ... ] ]
[ MEMBER_NAME [, ... ] ]
参数说明
CLUSTER_NAME
HAS 集群的名称。
MEMBER_NAME
HAS 集群成员的名称。