Skip to main content
Version: v3&v6

ONES集群环境优雅关机

当ONES系统安装成功时,此时系统可以正常通过IP进行访问。

本节中主要面向安全的停止正在运行的ONES服务器的场景,停止ONES相关的所有服务,并不只是禁止终端用户访问ONES系统。

安全停止/优雅退出

若需要关闭 ONES 服务,建议的顺序是:先停止业务,再停中间件,再关闭集群,再关闭物理机。这是为了保障集群的存储的稳定性。 若强行停机或通过其他异常方式终止服务,可能会导致数据丢失、集群重建缓慢,甚至不排除需要重新部署实例。

ONES集群优雅关机操作

注意!!!
  • 下面的操作,仅适用于ONES集群环境,不适用于ONES单机环境!!!
  • 如果您的环境是ONES单机环境,请参考ONES单机环境优雅关机手册!!!
  1. 确认mysql的状态,3个实例,必须 HEALTHY 为 yes
## 使用root账号,执行命令进入操作机目录
ones-ai-k8s.sh

## 或者,如果是旧的集群部署方式则:cd /data/ones/ones-ai-k8s)
./ones-ai-k8s.sh

## 查看mysql主从状态信息
./script/mysql/status.sh ones

MYSQL_CLUSTER_POD ROLE HEALTHY NODE_NAME VERSION
mysql-cluster-mysql-0 replica yes k8s-node-008 5.7.42
mysql-cluster-mysql-1 replica yes k8s-node-005 5.7.42
mysql-cluster-mysql-2 master yes k8s-node-006 5.7.42

NAME READY STATUS RESTARTS AGE
mysql-cluster-mysql-0 7/7 Running 2 26h
mysql-cluster-mysql-1 7/7 Running 0 73s
mysql-cluster-mysql-1 7/7 Running 0 73s
  1. mysql切换主从, 必须把 mysql-cluster-mysql-0 切换为主库
## 在上一个步骤中,假如 mysql-cluster-mysql-0 不是 master(主库) ,那么关机前,需要先进行切主
## 以上面的例子为例,mysql-cluster-mysql-2 是主库,执行以下命令进行切主
./script/mysql/graceful-master-takeover.sh ones mysql-cluster-mysql-2 mysql-cluster-mysql-0

## 切换后,继续观察mysql集群状态
./script/mysql/status.sh ones

MYSQL_CLUSTER_POD ROLE HEALTHY NODE_NAME VERSION
mysql-cluster-mysql-0 master yes k8s-node-008 5.7.42
mysql-cluster-mysql-1 replica yes k8s-node-005 5.7.42
mysql-cluster-mysql-2 replica yes k8s-node-006 5.7.42

NAME READY STATUS RESTARTS AGE
mysql-cluster-mysql-0 7/7 Running 2 26h
mysql-cluster-mysql-1 7/7 Running 0 73s
mysql-cluster-mysql-1 7/7 Running 0 73s

## 所有节点 HEALTHY 为 yes , STATUS 为Running mysql-cluster-mysql-0 是 master时,可以开始往下操作, 执行步骤3

3.停关键业务

kubectl -n ones scale --replicas=0 deploy project-api-deployment wiki-api-deployment
kubectl -n ones scale --replicas=0 sts wiz-editor-server-statefulset
  1. 关闭数据库(如果数据外置,则跳过这个步骤)
kubectl -n ones scale --replicas=0 mysqlcluster mysql-cluster
kubectl -n ones scale --replicas=0 sts mysql-operator
kubectl -n ones scale --replicas=0 sts mysql-cluster-mysql
watch ./script/mysql/status.sh ones
# 关闭完成后,输出结果如下时,再继续执行步骤3:
# MYSQL_CLUSTER_POD ROLE HEALTHY NODE_NAME VERSION
#
# No resources found in ones namespace.
  1. 退出操作容器,重启主机或关机(shutdown、reboot或者poweroff等),以重启为例:
exit
reboot

ONES集群开机操作

重新启动 ONES 服务,建议的顺序是:开启集群,自检中间件,自动恢复/人工恢复,启动网关,启动服务。

# 开机,启动正常后等待 K3s/k8s 集群 ready(约等待3~5分钟)
kubectl get node

# 进入操作容器(旧的部署方式,则进入操作目录cd /data/ones/ones-ai-k8s )
./ones-ai-k8s.sh

# 1. 启动mysql(如果数据外置,则跳过这个步骤)
kubectl -n ones scale --replicas=3 mysqlcluster mysql-cluster
kubectl -n ones scale --replicas=3 sts mysql-operator

# 2. 启动业务服务
kubectl -n ones scale --replicas=3 deploy project-api-deployment wiki-api-deployment
kubectl -n ones scale --replicas=3 sts wiz-editor-server-statefulset

# 3. 观察mysql-operator状态(如果数据外置,则跳过这个步骤)

## 查看pod状态
watch -d "kubectl -n ones get pods |grep mysql-operator"

# 状态异常时结果如下(注意第二列,正常为 2/2, 异常时为 1/2):
mysql-operator-0 2/2 Running 0 3m
mysql-operator-1 1/2 Running 0 3m
mysql-operator-2 2/2 Running 0 3m

# 如果有状态异常,则执行下方命令修复,并再次查看 mysql-operator状态(这里以mysql-operator-1 为例)
kubectl -n ones delete pods mysql-operator-1
watch -d "kubectl -n ones get pods |grep mysql-operator"

# 状态正常后,继续下一个步骤

# 4. 观察mysql状态(如果数据外置,则跳过这个步骤)
./script/mysql/status.sh ones

## 一主两从状态正常
## (正常时,三个mysql-cluster实例的 HEALTHY 值都为yes, ROLE 值有一个master 和两个 replicas )
MYSQL_CLUSTER_POD ROLE HEALTHY NODE_NAME VERSION
mysql-cluster-mysql-0 master yes k8s-node-008 5.7.42
mysql-cluster-mysql-1 replica yes k8s-node-005 5.7.42
mysql-cluster-mysql-2 replica yes k8s-node-006 5.7.42

# 5.如下命令无输出,表示 ONES 服务启动正常
kubectl get pod -n ones |grep -v Running |grep -v Complete