暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

MogDB管理—MogHA安装

原创 李先生 2021-12-14
567

MogDB管理—MogHA安装

关于MogHA

​ MogHA 是云和恩墨基于 MogDB同步异步流复制技术自研的一款保障数据库主备集群高可用的企业级软件系统

​ (适用于 MogDB 和 openGauss 数据库)

​ MogHA 能够自主探测故障实现故障转移,虚拟IP自动漂移等特性,使得数据库的故障持续时间从分钟级降到秒级(RPO=0,RTO<60s),确保数据库集群的高可用服务。

为什么数据库支持主备,还需要 MogHA

​ 首先我们需要理解一下什么是高可用,高可用的目的是为了让数据库尽可能提供连续服务,以保证上层业务的稳定运行。数据库虽然支持主备库的部署结构,其目的是防止单点故障。但数据库并不提供故障检测以及自动化切换主备的功能,这也不属于数据库的处理范畴。所以需要有 MogHA 这样的一套高可用系统,来保证数据库服务的连续性。

功能特性

  • 自主发现数据库实例角色
  • 自主故障转移
  • 支持网络故障检测
  • 支持磁盘故障检测
  • 虚拟IP自动漂移
  • 感知双主脑裂,自动选主
  • 数据库进程和CPU绑定
  • HA自身进程高可用
  • 支持单机并行部署多套 MogHA
  • 支持 x86_64 和 aarch64

系统架构

image-20211124153058450

支持的模式

Lite 模式(推荐)

Lite 模式,顾名思义即轻量级模式,该模式仅需在主库和一台同步备机器上启动 MogHA 服务,此时 MogHA 服务可以保证这两台机器上数据库实例的高可用,当主库发生不可修复的问题或者网络隔离时,MogHA 可以自主地进行故障切换和虚拟IP漂移。

image.png

Full 模式

Full模式相较于 lite 模式,需要在所有实例机器上运行 MogHA 服务,且所有的实例有由 MogHA 来自动管理,当出现主库故障时,会优先选择本机房同步备进行切换,如果本机房同步备也是故障的情况,会选择同城备机房的同步备进行切换。为了达到RPO=0,MogHA 不会选择异步备库进行切换,以防止数据丢失。该模式会在主备切换时,会自动修改数据库的复制连接及同步备列表配置。

举例:两地三中心【1主6备】

image.png

MogHA安装

本项目为MogDB/openGuass数据库的高可用组件,用于管理数据库的高可用切换等处理。

注:前置警告,不建议使用gs_om管理数据库的主备实例启停,建议使用gs_ctl 命令启停数据库服务,已知gs_om存在部分操作无法跟随更新的问题

以下步骤操作,在主备库上均执行。

前期准备

安装包下载

请前往 MogDB官网 下载 mogha 对应平台的安装包

下载后得到一个类似 mogha-x.x.x.tar.gz 的压缩包(x 代表版本号)

安装包文件说明

image.png

gsql, gs_ctl 免密执行

服务器上用数据库安装用户登录时,执行 gsql 或 gs_ctl 时无需输入密码。可以在数据库数据目录中,找到的 pg_hba.conf 认证文件,确认本地连接的校验方式为 trust。 检验方式:切换到 omm 用户下,执行下面的命令不需要输入密码即可查询到集群状态:

gs_ctl -D [PGDATA] query
复制

在数据库数据目录中的 pg_hba.conf 中, host all all 127.0.0.1/32 trust 这一行存在,且处于靠前的位置(不一定非要第一行,但需确保在本机IP所有在行之前,因为pg校验的时候是从上到下执行规则的)

测试方式,执行下面的命令不需要输入密码即可查询到集群状态:

[omm@mogdb db1]$ gs_ctl -D /mogdb/data/db1 query [2021-12-07 11:01:29.851][120039][][gs_ctl]: gs_ctl query ,datadir is /mogdb/data/db1 HA state: local_role : Standby static_connections : 1 db_state : Normal detail_information : Normal Senders info: No information Receiver info: receiver_pid : 117604 local_role : Standby peer_role : Primary peer_state : Normal state : Normal sender_sent_location : 0/541CD28 sender_write_location : 0/541CD28 sender_flush_location : 0/541CD28 sender_replay_location : 0/541CD28 receiver_received_location : 0/541CD28 receiver_write_location : 0/541CD28 receiver_flush_location : 0/541CD28 receiver_replay_location : 0/541CD28 sync_percent : 100% channel : 192.168.60.190:48984<--192.168.60.191:26001 [omm@mogdb db1]$
复制

数据库安装用户的sudo权限

由于 MogHA 需要自动挂虚拟IP的操作,内部需要通过 ifconfig 指令来操作网卡,MogHA 是通过数据库安装用户进行启动的,要想执行网卡操作就需要 sudo 权限,在安装期间脚本会检查 /etc/sudoers 配置中是否配置了运行用户的权限,如果存在就跳过配置,如果没有,会尝试自动的将 omm 用户添加到 /etc/sudoers 中,并赋予 ifconfigsystemctl的权限。

所以建议在部署 MogHA 服务之前,先检查一下 /etc/sudoers 中是否成功配置了 运行用户的 sudo 权限。

配置方式参考:

配置用户的sudo权限 chmod +w /etc/sudoers which systemctl # /usr/bin/systemctl which ifconfig # /usr/sbin/ifconfig vi /etc/sudoers # 追加下列 2 行到文件末尾 omm ALL=(ALL) NOPASSWD: /usr/sbin/ifconfig omm ALL=(ALL) NOPASSWD: /usr/sbin/systemctl # 保存退出 chmod -w /etc/sudoers
复制

MogHA通信端口互通

MogHA 需要一个固定的端口(默认为 8081,可配置,修改配置文件中的 agent_port)用于不同节点的 MogHA 之间通信,所以需确认要配置的端口可以在节点直接互相访问。

校对时间

使用 ntp 或 chronyd 校对主库和备库的时间。

安装步骤

建议:安装过程请使用 root 用户进行操作,涉及到给数据库安装用户sudo权限以及注册系统服务。

将安装包拷贝到要部署 MogHA 的服务器上,存放位置建议选择 /opthome 下,以 omm 用户为例,存放目录为 /home/omm/为了便于演示,后面不再声明,默认使用该目录进行演示

解压缩安装包

cd /home/omm tar -zxf mogha-2.x.x.tar.gz
复制

解压后会在当前目录下得到一个 mogha 的文件夹。

安装 MogHA 服务

进入 mogha 文件夹,执行安装脚本:sudo ./install.sh USER PGDATA [SERVICE_NAME](注意替换参数)

  • USER 是指数据库安装用户,在本例中指 omm 用户
  • PGDATA 是指数据库数据目录,本例中假设 MogDB 的数据目录为 /opt/mogdb/data
  • SERVICE_NAME [可选参数] 注册 systemd 时的服务名,默认:mogha"

以下是安装过程示例(如果安装过程出错会终止后面的安装步骤):

# 进入刚刚解压后的文件夹 cd /home/omm/mogha # 执行安装脚本 sudo ./install.sh omm /mogdb/data/db1 # 安装过程,输出类似以下内容 [root@mogdb ~]# cd /home/omm/mogha/ [root@mogdb mogha]# sudo ./install.sh omm /mogdb/data/db1 [2021-12-07 12:29:33]: MogHA 安装目录为:/home/omm/mogha [2021-12-07 12:29:33]: 数据库安装用户为:omm, 所在用户组为:omm [2021-12-07 12:29:33]: 数据库数据目录为:/mogdb/data/db1 [2021-12-07 12:29:33]: LD_LIBRARY_PATH={packagePath}/script/gspylib/clib:/opt/mogdb/app/lib:/opt/mogdb/tools/lib: [2021-12-07 12:29:33]: GAUSSHOME=/opt/mogdb/app [2021-12-07 12:29:33]: 数据库端口: 26000 [2021-12-07 12:29:33]: 当前系统架构为:x86_64 [2021-12-07 12:29:33]: 修改安装目录及其子目录或文件的用户和用户组... [2021-12-07 12:29:33]: 生成 mogha.service 文件... [2021-12-07 12:29:33]: 复制 mogha.service 文件到 /usr/lib/systemd/system/ [2021-12-07 12:29:33]: 重载配置文件 [2021-12-07 12:29:33]: mogha 服务注册成功 [2021-12-07 12:29:33]: 配置 omm 用户的 sudo 权限到 /etc/sudoers 文件 [2021-12-07 12:29:33]: 配置权限成功:NOPASSWD:/sbin/ifconfig [2021-12-07 12:29:33]: 没有在安装目录中发现 node.conf 配置文件 [2021-12-07 12:29:33]: 生成 node.conf... node.conf 生成成功,位于目录:/home/omm/mogha/node.conf [2021-12-07 12:29:33]: MogHA 安装成功! 请优先修改 /home/omm/mogha/node.conf 配置文件后再启动服务 !!! 管理 MogHA 服务可以通过 systemctl 工具: 启动:sudo systemctl start mogha 停止:sudo systemctl stop mogha 重启:sudo systemctl restart mogha 卸载 MogHA 服务: sudo ./uninstall.sh mogha [root@mogdb mogha]#
复制

查看更多

从安装脚本执行的输出结果可以大概看出安装的流程,安装成功的标志是看到输出的最后打印出了『**MogHA 安装成功!』**语句。其他情况,需根据实际情况,检查安装步骤哪里出错。

如果正常执行完安装脚本后,期间会生成 3 个新的文件:

  • node.conf: HA 配置文件(如已存在则不会生成),需要我们完善实例和机房信息
  • supervisord.conf: supervisord 的配置文件 (supervisord 是进程高可用组件)
  • mogha.service:用于注册 systemd 的服务描述文件,安装过程已经将该文件注册到了 systemd 的服务中,可以通过 systemctl 工具来管理 MogHA 服务

执行完安装脚本后,不要立即启动 MogHA 服务,我们需要先完善一下配置文件再启动服务。

当第一次安装的时候,node.conf 是没有的,安装脚本会根据 node.conf.tmpl 模板文件自动生成一份 node.conf, 得到该文件后,参考配置文件的介绍,完善您的机器和机房配置信息。

所以可以看到执行的输出最后重点强调了: 请根据您的集群信息修改 node.conf 中的配置后再启动服务

后面将阐述,我们应该如何来进行配置 node.conf

node.conf 的配置

必须用户确认配置的字段

  • 数据库连接端口
# 数据库端口,用于连接数据库 db_port=26000
复制
  • HA通信端口
# ha节点之间通讯用的端口,如果有防火墙,需要打开这个端口的访问 agent_port=8081
复制
  • host 主机列表(仅选取 host1 做演示,其他相同)

    主机列表需要用户将自己的数据库集群中的所有主备实例所在的服务器的业务IP填写到 ip 字段。

    如果没有心跳IP的话,可以不填写置空,如果有则填写,如果有多个心跳IP,则以英文半角逗号分隔填写

# 这部分从host1-8,每个代表一个机器 [host1] # 业务网络ip ip=192.168.1.111 # 心跳网络ip,允许配置多个心跳网络,以逗号隔开 heartbeat_ips=192.168.1.112,192.168.1.113
复制
  • zone 机房列表(仅选取 zone1 做演示,其他相同)

    zone 在这里代表的是机房的概念

    vip:不同的机房拥有各自的虚拟IP(VIP),虚拟IP用于业务访问,解耦服务器的私有IP,便于主备切换

    arping: 可以留空,系统会采用广播地址

    ping_list:用于检查网络的中间节点IP,一般可以选择网关地址

    hosts:本机房中的主机列表,特别强调,这里不是填写主机名或主机IP,这里是用于归类上一步中填写的 host 列表,所以这个字段应该填写的是本配置文件中定义的 host1host2 … 等等这种
    section 名,举例:假如 host1, host2 这两个机器同属于 zone1 这个机房,那么这里的 hosts 应该填写为: hosts=host1,host2 (以英文半角逗号分隔)

    cascade: 本机房中的级联备列表,配置方式同 hosts

# 这部分主要用于区分机房,不同机房会有自己的VIP,[zone1]# 本机房的VIPvip=# 本机房的arping地址,如果不知道,可以留空,会采用arp广播模式arping=# 检查网络的中间节点,一般是可以ping通的网关地址ping_list=# 本机房的机器列表,例如 host1,host2,host3hosts=# 本机房的级联备库列表cascade=
复制

其他可选项配置

[config]# 心跳间隔时间,也是主流程检查的间隔时间,一般设置为3-5sheartbeat_interval=3# 主库丢失的探测时间,当主库宕机无法ping到,认为持续到这个时长之后,备库可以切换为主库primary_lost_timeout=10# 主库的孤单时间,当主库无法连接到其他机器,ping不到其他任何机器,认为主库网络出现问题# 当持续超过这个时长,认为主库实例需要关闭(mogdb中会设置为readonly)primary_lonely_timeout=10# 当双主状态持续指定时长之后,认为需要做双主判断,# 因为在维护性操作中,会有可能存在极短时间的双主状态(此时事实上数据库不允许写入)double_primary_timeout=10# 数据库的操作系统用户,通常为omm或者postgresdb_user=__USER__# 数据库的数据目录,用于信号发送等本地通讯行为db_datadir=__PGDATA__# 本地元数据文件类型:# - "json" : json 格式# - "bin" : 二进制格式 (如果该参数没有配置,默认使用 bin)meta_file_type=json# 本地元数据存储位置,自动维护无需人工干预,当元数据库不可用时候,用这个数据作为主库判断primary_info=__INSTALLDIR__/primary_info# 本地元数据存储位置,自动维护无需人工干预,当主库丢失,备库依赖这个去判断自身同步状态standby_info=__INSTALLDIR__/standby_info# 是否为数据库实例设置cpu限制,True的话,会保留至少一个cpu出来不分配给数据库用taskset=True# 是否使用 lite 模式,可选值:True / False# lite 模式下,即便是一主多备,也只需在主和同步备启动服务。# 该值为 False 的话,即为 full 模式,需要在所有节点启动高可用服务。# 二者的区别:lite 模式,HA服务不会修改数据库的主备相关配置,而 full 模式下会自动修改lite_mode=False# 是否使用元数据库。# 如果值为 True,需在下面的 [meta] 部分,配置元数据库连接参数,# 如果值为 False,[meta] 部分可以置空use_meta=False# 设置输出的日志格式logger_format=%(asctime)s - %(name)s - %(levelname)s [%(filename)s:%(lineno)d]: %(message)s# 设置除了主备相关的机器,允许可以访问到web接口的IP列表, 多个IP时英文半角逗号分隔allow_ips=# [v2.1新增] 主库实例进程未启动时,如何处理# 支持两种处理方式:# restart: 尝试重启,尝试次数在 restart_instance_limit 参数中设定# failover: 备库升为主,主库尝试重建数据库后启动为备primary_down_handle_method=failover# [v2.1新增] 重启实例最大尝试条件: times/minutes# 例如: 10/3 最多尝试10次或者3分钟,任何一个条件先满足就不再尝试。restart_strategy=10/3# 这部分都是元数据库的连接参数(opengauss数据库),# 不强依赖,配置错误会在日志中提示,但不影响 HA 调度[meta]ha_name= # ha主备的名称,全局必须唯一,禁止两套主备共用一个名字host= # 数据库机器port= # 数据库端口db= # 数据库的databaseuser= # 用户名password= # 密码schema= # 使用的schema
复制

管理 MogHA 服务

确认配置完成 node.conf 以后,就可以通过 systemctl 指令来管理 HA 服务了。

如果执行安装脚本时指定了 SERVICE_NAME , 后续操作的服务名需替换为自定义的服务名。

启动服务

sudo systemctl start mogha
复制

查看服务状态

[root@mogdb mogha]# sudo systemctl status mogha* mogha.service - MogHA High Available Service Loaded: loaded (/usr/lib/systemd/system/mogha.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2021-12-07 13:13:53 CST; 26s ago Docs: https://docs.mogdb.io/zh/mogha/v2.0/installation-and-depolyment Main PID: 129646 (mogha) Tasks: 16 Memory: 70.1M CGroup: /system.slice/mogha.service |-129646 /home/omm/mogha/mogha -c /home/omm/mogha/node.conf |-129649 mogha: watchdog |-129650 mogha: http-server |-129651 mogha: heartbeat `-129816 ping -c 3 -i 0.5 192.168.60.191Dec 07 13:13:53 mogdb systemd[1]: Started MogHA High Available Service.[root@mogdb mogha]#
复制

设置开机自启

sudo systemctl enable mogha
复制

重启 MogHA 服务

sudo systemctl restart mogha
复制

停止 MogHA 服务

sudo systemctl stop mogha
复制

卸载 MogHA 软件

进入安装目录,执行卸载脚本即可:

cd /home/omm/moghasudo ./uninstall.sh
复制

日志文件

MogHA 会生成两个日志文件:

  • mogha_heartbeat.log 这个日志文件会存放在安装目录中,在本示例中为 /home/omm/mogha,这个日志主要记录HA的心跳日志,也是排查问题主要的优先检查的日志文件。
  • mogha_web.log 这个日志文件存放目录和心跳日志相同。这个日志主要记录 web api 接口的请求日志。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

墨天轮福利君
暂无图片
3年前
评论
暂无图片 0
您好,您的文章已入选合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
3年前
暂无图片 点赞
评论