文档中心MogDBMogDB StackUqbar

文档:v2.0

支持的版本:

高可用

概述

注意:不同于 1.0 版本中的 sidecar 方式,自 2.0 版本开始,HA 以哨兵模式运行。

我们为什么这样做:

1.为跨机房场景做准备;

2.以 sidecar 方式运行时,在数据库故障的某些场景下需要对数据库进行重启,导致 MogDB 进程变为 HA 进程的子进程;

高可用是 MogDB Stack 体系中的一个功能组件,以哨兵模式运行,并实时监测 MogDB 集群的运行状态,当监测到集群出现故障时,触发修复逻辑。

发生切换的场景包括:

  • 机架掉电
  • 主库网络不可达
  • 数据库发生故障宕机
  • 数据库磁盘故障或者某些硬件故障

ha


开启高可用组件

HA 自身使用 dcs 保证高可用,当前仅支持 etcd,因此在启动组件时,需要准备一个高可用 etcd 集群,并将连接信息配置到 HA 中。

1.前置条件

  • 已安装 kustomize v3+;
  • 已安装 MogDB Operator;
  • 若您需要正式开始高可用组件,而非进行高可用体验,请准备高可用 etcd 集群;

2.获取安装包

在GitHub上fork MogDB Stack examples仓库:

https://github.com/enmotech/mogdb-stack-examples/fork

fork仓库之后,您可以通过类似如下的命令下载至本地:

YOUR_GITHUB_UN="<your GitHub username>"
git clone --depth 1 "git@github.com:${YOUR_GITHUB_UN}/mogdb-stack-examples.git"
cd mogdb-stack-examples

3.部署高可用组件

HA 组件安装目录位于安装包中的 kustomize/mogha 目录下。

特别注意:默认情况下我们使用简易安装模式,即将 etcdha 部署在同一 pod 中,以供体验组件服务。若要正式使用该组件,请注意跟随 kustomization.yaml 文件中的指示注释掉 patches/deployment-container-etcd.yaml 一行,并修改 patches/deployment-container-mogha.yaml 文件,以传递您准备好的高可用 etcd 集群连接信息,该文件还允许您传递其它参数,具体参数列表请参考参数列表

确保您编辑好高可用组件参数后,以下命令将部署高可用组件:

kustomize build kustomize/mogha | kubectl apply -f -

预期输出:

namespace/mogha created
serviceaccount/mogdb-ha created
clusterrole.rbac.authorization.k8s.io/mogdb-ha-role created
clusterrolebinding.rbac.authorization.k8s.io/mogdb-ha-rolebinding created
service/mogdb-ha created
deployment.apps/mogdb-ha created

4.检查安装

ha 组件默认安装在 mogha 命名空间中:

kubectl get pods,svc -n mogha

预期输出:

NAME                            READY   STATUS    RESTARTS   AGE
pod/mogdb-ha-55cdbc7855-xfb8g   2/2     Running   0          44s

NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/mogdb-ha   ClusterIP   10.107.90.105   <none>        6544/TCP   44s

5.注册高可用组件

在高可用组件部署成功后,需要将其注册至 MogDB Operator 中,以便正常使用高可用组件的功能。

4.检查安装中,我们得到 mogdb-ha 服务的 endpoints,现在将其注册到 MogDB Operator 中,MogDB Operator 默认安装在 mogdb-operator-system 命名空间中:

kubectl edit configmap mogdb-operator-global-config -n mogdb-operator-system

之后修改 .data.config.json 中的 haServices 部分,将 endpoints 填入其中,并保存退出。

tips:

在 kubernetes 中,我们一般不推荐使用 cluster-ip:port 的方式,因为 cluster-ip 并不是一个定值,我们推荐使用 kubernetes 的域名解析,其中 service 的 endpoints 遵循结构 http://namespace.service-name.kubernetes-domain-name

在本例中,namespace 为 mogha,service-name 为 mogdb-ha,kubernetes-domain-name 为 svc.cluster.local,因此 endpoints 为 http://mogha.mogdb-ha.svc.cluster.local:6544


6.使用高可用组件

如果之后创建的 MogDB 集群要使用高可用组件,则需要您在 MogDB manifest 中将 .spec.enableHa 配置为 true。

...
sepc:
  enableHa: true
...

参数列表

参数 含义 类型 默认值
debug 是否开启 debug 模式 布尔值 true
etcd-key 存储相关信息时使用的 base path 字符串 "mogha"
etcd-username 连接 etcd 集群的用户 字符串 ""
etcd-password 连接 etcd 集群的密码 字符串 ""
etcd-endpoints 连接 etcd 集群的地址 字符串 "127.0.0.1:2379"
etcd-dial-timeout 连接 etcd 集群的超时时间 整型 5
observe-period 探测 mogdb 集群的间隔时间 整型 60
db-probe-period 探测单个 mogdb 节点是否健康的间隔时间 整型 5
db-probe-failure-threshold 判断单个 mogdb 节点异常的探测次数阈值 整型 3
mogdb-username 连接 mogdb 集群的用户,一般情况不用指定 字符串 operator 内置管理用户
mogdb-password 连接 mogdb 集群的密码,一般情况不用指定 字符串 operator 内置管理用户
Copyright © 2011-2024 www.enmotech.com All rights reserved.