- 关于MogDB Stack
- 快速上手
- 软件安装
- 使用手册
- 架构
- 参考
- 命令行
- mgo
- mgo create
- mgo create mgorole
- mgo create mgouser
- mgo create cluster
- mgo show
- mgo show k8s
- mgo show mgorole
- mgo show mgouser
- mgo show cluster
- mgo show restore
- mgo delete
- mgo delete mgorole
- mgo delete mgouser
- mgo delete cluster
- mgo delete backup
- mgo delete k8s
- mgo scale
- mgo scaledown
- mgo switch
- mgo update
- mgo update mgorole
- mgo update mgouser
- mgo update cluster
- mgo version
- mgo addk8s
- mgo localk8s
- mgo backup
- mgo backup detail
- mgo restore
- mgo minio
- mgo minio object
- mgo minio object ls
- mgo minio object stat
- mgo minio object getf
- 服务端
- 命令行
- FAQ
- 发布记录
高可用
概述
注意:不同于 1.0 版本中的 sidecar 方式,自 2.0 版本开始,HA 以哨兵模式运行。
我们为什么这样做:
1.为跨机房场景做准备;
2.以 sidecar 方式运行时,在数据库故障的某些场景下需要对数据库进行重启,导致 MogDB 进程变为 HA 进程的子进程;
高可用是 MogDB Stack 体系中的一个功能组件,以哨兵模式运行,并实时监测 MogDB 集群的运行状态,当监测到集群出现故障时,触发修复逻辑。
发生切换的场景包括:
- 机架掉电
- 主库网络不可达
- 数据库发生故障宕机
- 数据库磁盘故障或者某些硬件故障

开启高可用组件
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-examples3.部署高可用组件
HA 组件安装目录位于安装包中的 kustomize/mogha 目录下。
特别注意:默认情况下我们使用简易安装模式,即将 etcd 与 ha 部署在同一 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 created4.检查安装
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 44s5.注册高可用组件
在高可用组件部署成功后,需要将其注册至 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 内置管理用户 |