ONES集群环境优雅关机
当ONES系统安装成功时,此时系统可以正常通过IP进行访问。
本节中主要面向安全的停止正在运行的ONES服务器的场景,停止ONES相关的所有服务,并不只是禁止终端用户访问ONES系统。
安全停止/优雅退出
若需要关闭 ONES 服务,建议的顺序是:先停止业务,再停中间件,再关闭集群,再关闭物理机。这是为了保障集群的存储的稳定性。 若强行停机或通过其他异常方式终止服务,可能会导致数据丢失、集群重建缓慢,甚至不排除需要重新部署实例。
ONES集群优雅关机操作
注意!!!
- 下面的操作,仅适用于ONES集群环境,不适用于ONES单机环境!!!
- 如果您的环境是ONES单机环境,请参考ONES单机环境优雅关机手册!!!
- 确认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
- 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
- 关闭数据库(如果数据外置,则跳过这个步骤)
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.
- 退出操作容器,重启主机或关机(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