暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

MogDB数据库从零到上生产:2、MogHA安装

2173

MogHA是云和恩墨基于 MogDB 同步和异步流复制技术自研的一款企业级高可用软件系统,适用于 MogDB 和 openGauss 数据库的高可用需求。MogHA 主要针对服务器宕机、实例宕机等多种情况,实现主备自动切换和虚拟IP的自动漂移,使数据库的故障持续时间从分钟级降到秒级,确保业务系统的持续运行。

MogHA 支持的模式

Lite 模式
顾名思义即轻量级模式,该模式仅需在主库和一台同步备机器上启动 MogHA 服务,此时 MogHA 服务可以保证这两台机器对于应用的连续性服务,当主库发生不可修复的问题或者网络隔离时,MogHA 可以实现即时数据库的 Failover 切主和虚拟IP的漂移操作。该模式适用于数据库数量仅有两台或限制切换到其他机器等场景。

Full 模式(Beta)
该模式需要在启动 MogHA 服务前,在配置文件中配置所有数据库实例的信息(最多9个实例[1主8备]),然后在所有实例机器上运行 MogHA 服务。该模式会在主备切换时,修改数据库的复制连接配置(replconninfo )。举例:两地三中心【1主6备】

Lite 模式和 Full 模式的区别

数据库配置 repliconninfo
lite 模式切主后不会修改复制关系配置,full 模式会。 修改方式:主库配置为所有实例的复制关系,而备库只保留一个和主库的复制关系。

MogHA配置 ping_list
lite 模式时必需在 MogHA 的配置文件(node.conf)中配置机器所在 zone 的 ping_list 字段,full 模式下 不强制要求填写。因为 Lite 模式时 MogHA 维护的集群内仅存在两台机器,当出现其中一台出现网络故障 或网络隔离时,两节点被分隔后,单节点无法判断自己的网络是否处于正常状态,所以需要用户配置一个或 多个额外的 IP (也就是 ping_list)来用于网络判断, ping_list 字段可以填写两台机器共同的网关地址, 或者两台机器都可以 ping 通的第三台机器的 IP。

本文档使用Lite 模式!

MogDB环境IP

节点 主机名 IP VIP
节点1 mogdb1 192.168.26.89, 192.168.8.178 192.168.26.222
节点2 mogdb2 192.168.26.164, 192.168.8.11 192.168.26.222

安装环境及系统

操作系统:CentOS 7.6
内存:16G
交换空间:8G(大内存建议关闭)
硬盘:500G
网络:可访问外网(用于下载MogHA及相关软件安装包)
数据库:MogDB主从已安装

安装前准备

1、python 3.6+

由于 MogHA 下层组件 supervisord 在运行时依赖 python3.6 (或更高版本也可)版本的环境,所以请在安装前确认当前服务器能够正常执行 python3 指令,同时检查 python3 的版本。检查方式:

[root@mogdb1 ~]# python3 -V
Python 3.6.8

2、gsql, gs_ctl 免密执行

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

[omm@mogdb1 ~]$ gs_ctl -D /mogdb/data/db1 query
[2021-12-17 15:34:49.103][5496][][gs_ctl]: gs_ctl query ,datadir is /mogdb/data/db1 
 HA state:           
	local_role                     : Primary
	static_connections             : 1
	db_state                       : Normal
	detail_information             : Normal

 Senders info:       
	sender_pid                     : 5313
	local_role                     : Primary
	peer_role                      : Standby
	peer_state                     : Normal
	state                          : Streaming
	sender_sent_location           : 0/5F8BBC0
	sender_write_location          : 0/5F8BBC0
	sender_flush_location          : 0/5F8BBC0
	sender_replay_location         : 0/5F8BBC0
	receiver_received_location     : 0/5F8BBC0
	receiver_write_location        : 0/5F8BBC0
	receiver_flush_location        : 0/5F8BBC0
	receiver_replay_location       : 0/5F8BBC0
	sync_percent                   : 100%
	sync_state                     : Sync
	sync_priority                  : 1
	sync_most_available            : On
	channel                        : 192.168.26.164:26001-->192.168.26.89:45788

 Receiver info:      
No information 

3、数据库安装用户的 sudo 权限

由于 MogHA 需要自动挂虚拟IP的操作,内部会通过 ifconfig 指令来操作网卡,MogHA 会通过数据库安装用户进行启动的,要想执行网卡操作就需要 sudo 权限,在安装期间 install.sh 脚本中会尝试自动的将 omm 用户添加到 /etc/sudoers 中,并赋予 ifconfig 和 systemctl 的权限,但不能完全确保操作成功。所以建议在部署 MogHA 服务之前,先检查一下 /etc/sudoers 中是否成功配置了 omm 用户的 sudo 权限。 配置方式参考:

所有节点都需配置用户的sudo权限
[root@mogdb1 ~]# chmod +w /etc/sudoers

[root@mogdb1 ~]# which systemctl
/bin/systemctl
[root@mogdb1 ~]# which ifconfig
/sbin/ifconfig

vi /etc/sudoers
# 追加下列 2 行到文件末尾
omm     ALL=(ALL)NOPASSWD: /sbin/ifconfig
omm     ALL=(ALL)NOPASSWD: /bin/systemctl
# 保存退出
[root@mogdb1 ~]# chmod -w /etc/sudoers

4、开放通信端口

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

5、安装包下载

请前往发布记录页面下载安装包,下载后得到一个类似 mogha-x.x.x.tar.gz 的压缩包(x 代表版本号)

安装包文件说明
image.png

安装MogHA

注意:安装过程请使用 root 用户进行操作,涉及到给数据库安装用户sudo权限以及注册系统服务。(所有节点都需安装)

1、解压缩安装包

[root@mogdb1 ~]# cd /home/omm/

[root@mogdb1 omm]# tar -zxf mogha-2.3.0-x86_64.tar.gz 

[root@mogdb1 omm]# ls
mogha  mogha-2.3.0-x86_64.tar.gz

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

2、安装 MogHA 服务

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

  • USER 是指数据库安装用户,在本例中指 omm 用户
  • PGDATA 是指数据库数据目录,本例中假设 MogDB 的数据目录为 /mogdb/data/db1
# 进入刚刚解压后的文件夹
[root@mogdb1 omm]# cd /home/omm/mogha

# 执行安装脚本
[root@mogdb1 mogha]# ./install.sh omm /mogdb/data/db1
[2021-12-17 16:19:41]: MogHA 安装目录为:/home/omm/mogha
[2021-12-17 16:19:41]: 数据库安装用户为:omm, 所在用户组为:dbgrp
[2021-12-17 16:19:41]: 数据库数据目录为:/mogdb/data/db1
[2021-12-17 16:19:41]: LD_LIBRARY_PATH=/opt/mogdb/app/lib:/opt/mogdb/tools/lib:
[2021-12-17 16:19:41]: GAUSSHOME=/opt/mogdb/app
[2021-12-17 16:19:41]: 数据库端口: 26000
[2021-12-17 16:19:41]: 当前系统架构为:x86_64
[2021-12-17 16:19:41]: 修改安装目录及其子目录或文件的用户和用户组...
[2021-12-17 16:19:41]: 生成 mogha.service 文件...
[2021-12-17 16:19:41]: 复制 mogha.service 文件到 /usr/lib/systemd/system/
[2021-12-17 16:19:41]: 重载配置文件
[2021-12-17 16:19:42]: mogha 服务注册成功
[2021-12-17 16:19:42]: 配置 omm 用户的 sudo 权限到 /etc/sudoers 文件
[2021-12-17 16:19:42]: 配置权限成功:NOPASSWD:/sbin/ifconfig
[2021-12-17 16:19:42]: 没有在安装目录中发现 node.conf 配置文件
[2021-12-17 16:19:42]: 生成 node.conf...
node.conf 生成成功,位于目录:/home/omm/mogha/node.conf
[2021-12-17 16:19:42]: 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

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

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

3、完善 node.conf 配置

执行完安装脚本后,不要立即启动服务,MogHA 的运行依赖安装目录中 node.conf 的配置,我们需要先正确的配置了这个文件再启动服务。当第一次安装的时候,node.conf 一般是没有的,脚本会根据 node.conf.tmpl 模板文件自动生成一份 node.conf, 所以可以看到执行的输出最后重点强调了: 请根据您的集群信息修改 node.conf 中的配置后再启动服务。

配置如下(所有安装节点都需配置)
[omm@mogdb1 ~]$ vi /home/omm/mogha/node.conf

[config]
# 数据库端口,用于连接数据库
db_port=26000

# 数据库的操作系统用户,通常为omm或者postgres
db_user=omm

# 数据库的数据目录,用于信号发送等本地通讯行为
db_datadir=/mogdb/data/db1

# 本地主库元数据存储路径
# primary_info=/home/omm/mogha/primary_info

# 本地备库元数据存储路径
# standby_info=/home/omm/mogha/standby_info

# 是否使用 lite 模式,可选值:True / False
# lite 模式下,即便是一主多备,也只需在主和同步备启动服务。
# 该值为 False 的话,即为 full 模式,需要在所有节点启动高可用服务。
# 注:lite 模式,HA服务不修改数据库的主备相关配置,而 full 模式下会自动修改
lite_mode=True

# HA节点之间通信端口,如果有防火墙,需要配置可访问
agent_port=8081

# [2.2.3新增]
# HA节点间HTTP API 请求超时时间(秒)
# http_req_timeout=3

# 心跳间隔时间,也是主流程检查的间隔时间,一般设置为3-5s
# heartbeat_interval=3

# 主库丢失的探测时间,当主库宕机无法ping到,认为持续到这个时长之后,备库可以切换为主库
# primary_lost_timeout=10

# 主库的孤单时间,当主库无法连接到其他机器,ping不到其他任何机器,认为主库网络出现问题
# 当持续超过这个时长,认为主库实例需要关闭(mogdb中会设置为readonly)
# primary_lonely_timeout=10

# 当双主状态持续指定时长之后,认为需要做双主判断,
# 因为在维护性操作中,会有可能存在极短时间的双主状态(此时事实上数据库不允许写入)
# double_primary_timeout=10

# 本地元数据文件类型:
# - "json": json 格式(默认)
# - "bin": 二进制格式
# meta_file_type=json

# 是否为数据库实例设置cpu限制,True的话,会保留至少一个cpu不分配给数据库用
# taskset=False

# 设置输出的日志格式
# logger_format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d]: %(message)s

# [2.2.3新增]设置日志存储目录
# log_dir=/home/omm/mogha

# [2.2.3新增] 日志文件最大字节数(接近该值时,将发生日志滚动)
# 支持的单位:KB, MB, GB (忽略大小写)
# log_max_size=512MB

# [2.2.3新增] 日志保留的文件个数
# log_backup_count=10

# 设置除了主备相关的机器,允许可以访问到web接口的IP列表, 多个IP时逗号分隔
# allow_ips=

# [2.1新增] 主实例进程未启动时,是否需要 HA 进行拉起或切换
# 搭配 primary_down_handle_method 使用
# handle_down_primary=True

# [2.1新增] 备库进程未启动时,是否需要 HA 进行拉起
# handle_down_standby=True

# [2.1新增] 主库实例进程未启动时,如何处理
# 支持两种处理方式:
# - restart: 尝试重启,尝试次数在 restart_strategy 参数中设定
# - failover: 备库升为主,主库尝试重建数据库后启动为备
# primary_down_handle_method=restart

# [2.1新增] 重启实例最大尝试条件: times/minutes
# 例如: 10/3 最多尝试10次或者3分钟,任何一个条件先满足就不再尝试。
# restart_strategy=10/3

# [2.1.1新增] UCE(uncorrected error)故障感知功能,默认开启
# 可选值: True / False
# 内核在收到一些特定的 sigbus 信号的错误时,比如内存坏块等,内核会进行graceful shutdown,
# 坏的内存已经被标记不会被再次分配到,这时候是可以立即拉起实例正常服务的。
# uce_error_detection=False

# [2.1.1新增] UCE检查时,读取最后多少行日志数据进行判断
# uce_detect_max_lines=200

# [2.2.1新增]
# debug_mode=False

# (选填) 元数据库的连接参数(openGauss类数据库)
# [meta]
# ha_name=            # HA集群的名称,全局唯一,禁止两套HA集群共用一个名字
# host=               # 机器IP
# port=               # 端口
# db=                 # 数据库名
# user=               # 用户名
# password=           # 密码
# connect_timeout=3   # 连接超时,单位秒


# host1-9,每个代表一个机器(最多支持1主8备)
# (lite模式需仅配置 host1 和 host2 即可,)
# - ip: 业务IP
# - heartbeat_ips: 心跳网络ip,允许配置多个心跳网络,以逗号隔开
[host1]
ip=192.168.26.164
heartbeat_ips=192.168.8.11

[host2]
ip=192.168.26.89
heartbeat_ips=192.168.8.178


# zone1~3 用于定义机房,不同机房配置独立虚拟IP,
# 切换不会切过去,作为异地保留项目
# - vip: 机房虚拟IP (没有不填)
# - hosts: 本机房内机器列表, 填写机器在配置文件中对应的配置模块名 host1~9,示例:host1,host2
# - ping_list: 用于检查网络是否通畅的仲裁节点,例如网关,支持填写多个IP (逗号分隔)
# - cascades: 机房内的级联机器列表 (配置方式同 hosts, 没有不填)
# - arping: (选填) 机房的 arping 地址

[zone1]
vip=192.168.26.222
hosts=host1,host2
ping_list=192.168.26.1
cascades=
arping=


4、启动 MogHA 服务

确认配置完成 node.conf 以后,就可以启动所有节点 HA 服务,启动方式为:

[omm@mogdb1 ~]$ sudo systemctl start mogha

[omm@mogdb1 ~]$ sudo systemctl status mogha
● mogha.service - MogHA High Available Service
   Loaded: loaded (/usr/lib/systemd/system/mogha.service; enabled; vendor preset: disabled)
   Active: active (running) since 五 2021-12-17 16:48:07 CST; 1h 29min ago
     Docs: https://docs.mogdb.io/zh/mogha/v2.0/installation-and-depolyment
 Main PID: 7915 (mogha-2.3.0-x86)
   CGroup: /system.slice/mogha.service
           ├─7915 /home/omm/mogha/mogha-2.3.0-x86_64 -c /home/omm/mogha/node.conf
           ├─7916 mogha: watchdog
           ├─7917 mogha: http-server
           └─7918 mogha: heartbeat

12月 17 18:14:53 mogdb1 mogha-2.3.0-x86_64[7915]: 192.168.26.89:41220 - - [17/Dec/2021 18:14:37] "HTTP/1.1 GET /db/role" - 200 OK
12月 17 18:14:53 mogdb1 mogha-2.3.0-x86_64[7915]: 192.168.26.89:41222 - - [17/Dec/2021 18:14:37] "HTTP/1.1 GET /primaryinfo" - 200 OK
12月 17 18:14:53 mogdb1 mogha-2.3.0-x86_64[7915]: 192.168.26.89:41226 - - [17/Dec/2021 18:14:38] "HTTP/1.1 GET /db/standbys" - 200 OK
12月 17 18:14:53 mogdb1 mogha-2.3.0-x86_64[7915]: 192.168.26.89:41230 - - [17/Dec/2021 18:14:42] "HTTP/1.1 GET /db/role" - 200 OK
12月 17 18:14:53 mogdb1 mogha-2.3.0-x86_64[7915]: 192.168.26.89:41232 - - [17/Dec/2021 18:14:42] "HTTP/1.1 GET /primaryinfo" - 200 OK
12月 17 18:14:53 mogdb1 mogha-2.3.0-x86_64[7915]: 192.168.26.89:41234 - - [17/Dec/2021 18:14:44] "HTTP/1.1 GET /db/standbys" - 200 OK
12月 17 18:14:53 mogdb1 mogha-2.3.0-x86_64[7915]: 192.168.26.89:41236 - - [17/Dec/2021 18:14:48] "HTTP/1.1 GET /db/role" - 200 OK
12月 17 18:14:53 mogdb1 mogha-2.3.0-x86_64[7915]: 192.168.26.89:41238 - - [17/Dec/2021 18:14:48] "HTTP/1.1 GET /primaryinfo" - 200 OK
12月 17 18:14:53 mogdb1 mogha-2.3.0-x86_64[7915]: 192.168.26.89:41242 - - [17/Dec/2021 18:14:49] "HTTP/1.1 GET /db/standbys" - 200 OK
12月 17 18:16:52 mogdb1 systemd[1]: [/usr/lib/systemd/system/mogha.service:5] Unknown lvalue 'StartLimitIntervalSec' in section 'Unit'
设置开机自启
sudo systemctl enable mogha

重启 MogHA 服务
sudo systemctl restart mogha

停止 MogHA 服务
sudo systemctl stop mogha

5、日志文件

MogHA 会生成两个日志文件:

  • mogha_heartbeat.log 这个日志文件会存放在安装目录中,在本示例中为 /home/omm/mogha,这个日志主要记录HA的心跳日志,也是排查问题主要的优先检查的日志文件。
  • mogha_web.log 这个日志文件存放目录和心跳日志相同。这个日志主要记录 web api 接口的请求日志。

至此MogHA安装完成!!!

下一章写MogDB的定时备份!!!

最后修改时间:2021-12-24 16:39:52
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论