#共享集群启停

# 基本原理

共享集群启停包括两种模式:

  • 通过ycsctl命令启停某个服务器。
  • 通过yasboot命令启停整个集群。

其中,使用ycsctl命令启停服务器要求系统中已正确配置如下环境变量:

  • $YASCS_HOME——服务器对应的YCS HOME目录,该目录下包含了管理外部资源的shell脚本。

# 启停状态

在YCS中,online表示已启动运行中状态,offline表示停止状态,在拓扑图中表示如下:

Host ID   |Target    |State     |YasFS     |YasDB
----------------------------------------------------------------
1          online     online     online     online 

YCS控制管理整个共享集群的运行,启停状态按照其所管理的资源进行展示,包括:

  • State字段表示YCS服务的当前状态。
  • YasFS字段表示YFS服务的当前状态。
  • YasDB字段表示数据库实例的当前状态。
  • Target字段表示数据库实例是否纳入YCS一起启动,根据参数AUTO_START而定,当AUTO_START=ALWAYS时,Target为online,当AUTO_START=NEVER时,Target为offline。

# 启停顺序

默认情况下,YCS的启停过程包含了YCSM、YFS和数据库实例的启停,其中,YCSM属于该YCS的专属监控进程,YFS属于YCS的内嵌资源,数据库实例属于YCS的外部资源。这些服务在启停过程中的顺序关系为:

  • 启动YCSM之后,由YCSM启动并看护YCS。
  • 启动YCS时会自动启动YFS服务,停止YCS也会自动停止YFS服务。
  • 数据库实例启动依赖YFS以及YCS的拓扑信息,所以在YCS/YFS服务启动成功后,再启动数据库实例。
  • 停止YCS时,将先关闭数据库实例,再停止YCS/YFS服务,最后停止YCSM。

# 服务器启停

通过AUTO_START参数控制数据库实例是否与YCS一起启动。当参数配置为ALWAYS时,数据库实例与YCS一起启动,当参数配置为NEVER时,数据库实例不与YCS一起启动,可后续由外部命令单独启动。

通过不同的命令选项控制数据库实例是否与YCS一起停止。选项为ycs时,数据库实例与YCS一起停止,选项为instance时,将单独停止数据库实例。

# 启动YCS

使用如下命令可启动YCS,系统接收到命令后会先启动YCSM,再启动YCS,启动YCS的同时会启动YFS服务线程,然后根据AUTO_START参数值确定是否需要启动数据库实例:

#启动服务器0上的ycs
$ ycsctl start ycs

$ ycsctl status
# AUTO_START=ALWAYS
-----------------------------------------------------------------------------------------
Self Host ID|Cluster Master ID|YasFS Master ID|YasDB Master ID|Active Host Count
-----------------------------------------------------------------------------------------
1            1                 1               1               1         
-----------------------------------------------------------------------------------------
Host ID   |Target    |State     |YasFS     |YasDB
-----------------------------------------------------------------------------------------
1          online     online     online     online     
2          offline    offline    offline    offline    
# AUTO_START=NEVER
-----------------------------------------------------------------------------------------
Self Host ID|Cluster Master ID|YasFS Master ID|YasDB Master ID|Active Host Count
-----------------------------------------------------------------------------------------
1            1                 1               255               1         
-----------------------------------------------------------------------------------------
Host ID   |Target    |State     |YasFS     |YasDB
-----------------------------------------------------------------------------------------
1          offline    online     online     offline     
2          offline    offline    offline    offline    

# 启动数据库实例

通过ycsctl start instance可以单独启动服务器上的数据库实例,请注意数据库实例将被直接启动到open状态。

$ ycsctl start instance
$ ycsctl status
-----------------------------------------------------------------------------------------
Self Host ID|Cluster Master ID|YasFS Master ID|YasDB Master ID|Active Host Count
-----------------------------------------------------------------------------------------
1            1                 1               1               1         
-----------------------------------------------------------------------------------------
Host ID   |Target    |State     |YasFS     |YasDB
-----------------------------------------------------------------------------------------
1          online     online     online     online     
2          offline    offline    offline    offline    

#本地登录数据库查看实例状态
$ yasql sys/sys

SQL> SELECT status FROM V$INSTANCE;
STATUS            
----------------- 
OPEN             

Note:

当服务器上YCS服务未启动时,单独启动数据库实例将会由于无法与YCS建立UDS连接,而抛出Connection refused错误。

建议在集群所有实例都正常启动(处于OPEN状态)后,再开始使用数据库。

# 关闭数据库实例

通过ycsctl stop instance可以单独关闭服务器上的数据库实例,请注意此时所执行关闭操作为shutdown immediate。

$ ycsctl stop instance

$ ycsctl status
-----------------------------------------------------------------------------------------
Self Host ID|Cluster Master ID|YasFS Master ID|YasDB Master ID|Active Host Count
-----------------------------------------------------------------------------------------
1            1                 1               255             1         
-----------------------------------------------------------------------------------------
Host ID   |Target    |State     |YasFS     |YasDB
-----------------------------------------------------------------------------------------
1          offline    online     online     offline   
2          offline    offline    offline    offline   

# 强制停止数据库实例

强制停止是指向数据库实例发送立即终止进程信号,无论其处在何种状态都会立即退出进程。

通过参数WAIT_STOP_FIN_TIME控制执行停止脚本之后多长时间还未停止就使用强制停止。

0表示一直等待,不使用强制停止;其它值表示等待该数值的秒数后,数据库还未停止将执行强制停止。

# 停止YCS

使用如下命令停止YCS服务,同时停止YFS服务,在此之前使用shutdown immediate关闭运行中的数据库实例,最后停止YCSM监控进程:

$ ycsctl stop ycs

Note

1.YCS在存在YashanDB资源的场景下,需要等待数据库实例正常退出后,才会退出。

2.停止YCS失败场景:数据库实例关闭较慢。

出现这类问题,可能是因为在数据库中存在大量并发业务的过程中去停止服务器,数据库需要处理业务的正常停止而导致shutdown缓慢。

# 集群启停

使用yasboot工具可以实现整个共享集群的启停,其过程等同于对集群中的每个服务器执行上述的“启动YCS”和“停止YCS”操作。

需注意的是,集群启停不可进行单独数据库实例启动的指定(即调整AUTO_START参数),否则将导致启动过程出错。

#停止共享集群
$ yasboot cluster stop -c yashandb
#启动共享集群
$ yasboot cluster start -c yashandb
#重启共享集群
$ yasboot cluster restart -c yashandb