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

MogDB学习笔记-从2开始(MogHA)

1192

写在前面

今天计划学习MogHA高可用软件,MonHA类似于Mysql+keepalived的高可用架构,通过提供一个虚拟VIP,实现主备库之间的故障转移,对于应用程序透明,应用程序只需要连接VIP即可,不需要修改数据库连接。

学习环境

NODE1(主库)

NODE2(从库)

Hostname

pkt_mogdb1

pkt_mogdb2

IP

10.80.9.249

10.80.9.250

磁盘

20G

20G

内存

2G

2G

软件安装

根据官网上支持的模式,分别是Lite模式(推荐)和Full模式。

Lite模式:只在主库和一台备库安装MogHA软件,也就是说如果主库出现故障,只有安装了MogHA软件的那台备库节点才可以切换成新的主库,其余的备库因为没有安装MogHA所以只能一直是备库,不会进行切主,这样的好处避免了脑裂,以及选主过程中的投票操作,这样的坏处就是如果主库和这台备库同时故障,就只能手动切主了。

Full模式:在所有的MogDB节点上安装MogHA软件,这样的优点就是可以按照投票结果自由选主,所有的备库都可能成为新的主库,更体现了高可用,但是相对处理就比较复杂,因为要考虑脑裂、多主的情况,因此部署的时候备库数量建议使用2N+1。

个人也建议使用Lite模式,如果主库损坏,再找另外一台备机安装MogHA软件,保证一主一备可以进行切换即可。

因为我本地只有2个节点,也只能使用Lite轻量模式。

软件下载

下载地址:https://docs.mogdb.io/zh/mogha/v2.3/release-notes

环境要求

需要配置gsql, gs_ctl 免密执行,因为切主的时候需要执行gs_ctl命令,如果提示需要密码,需要修改认证文件pg_hba.conf,文件路径在data_dir下面

# "local" is for Unix domain socket connections only

local all all trust

host all omm 10.80.9.249/32 trust

host all omm 10.80.9.250/32 trust

找到对应的记录了,修改trust列的值为trust,然后重启MogDB使认证生效

gs_om -t stop

gs_om -t start

配置数据库安装用户(omm)的sudo权限

所有节点执行以下语句

[root@pkt_mogdb1 etc]# echo "omm ALL=(ALL) NOPASSWD: /usr/sbin/ifconfig" >> /etc/sudoers

端口互通

如果有防火墙需要开启8081的端口访问,因为MogHA需要通过8081进行访问,可以修改配置文件中的agent_port参数,因为我的环境防火墙已经关闭了,所以无需操作

配置chronyd时间同步

使用node1为chronyd服务器,node2是chronyd客户端,正常的生产环境都会有时钟服务器,因为我的测试环境只有两台,因此随便搭建一下。

#查看是否已经运行chronyd服务

[root@pkt_mogdb1 etc]# systemctl status chronyd

Node1配置chronyd服务端,vi /etc/chrony.conf

[root@pkt_mogdb1 etc]# cat chrony.conf

# Use public servers from the pool.ntp.org project.

# Please consider joining the pool (http://www.pool.ntp.org/join.html).

server 0.centos.pool.ntp.org iburst

server 1.centos.pool.ntp.org iburst

server 2.centos.pool.ntp.org iburst

server 3.centos.pool.ntp.org iburst

server 10.80.9.249 iburst #增加这一行表示自己与自己同步

# Record the rate at which the system clock gains/losses time.

driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates

# if its offset is larger than 1 second.

makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).

rtcsync

# Enable hardware timestamping on all interfaces that support it.

#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust

# the system clock.

#minsources 2

# Allow NTP client access from local network.

allow 10.80.0.0/16 #修改这一行,允许这个网段的机器可以与自己同步

# Serve time even if not synchronized to a time source.

local stratum 10 # 取消注释: 为no 取消掉后变为 NTP synchronized:yes

# Specify file containing keys for NTP authentication.

#keyfile /etc/chrony.keys

# Specify directory for log files.

logdir /var/log/chrony

# Select which information is logged.

#log measurements statistics tracking

重启chronyd服务,并开机启动

[root@pkt_mogdb1 etc]# systemctl stop chronyd

[root@pkt_mogdb1 etc]# systemctl start chronyd

[root@pkt_mogdb1 etc]# systemctl status chronyd

[root@pkt_mogdb1 etc]# systemctl enable chronyd

Node2配置chronyd客户端

vi /etc/chrony.conf

#在文件中增加一下内容

server 10.80.9.249 iburst #表示从这台服务器同步时间

#重启chronyd服务,并设置开机启动

[root@pkt_mogdb2 etc]# systemctl stop chronyd

[root@pkt_mogdb2 etc]# systemctl start chronyd

[root@pkt_mogdb2 etc]# systemctl enable chronyd

检查同步状态

[root@pkt_mogdb2 etc]# timedatectl

Yes表示已经开启同步

解压MogHA

使用root用户进行解压(主备节点都需要解压安装)

[root@pkt_mogdb1 data]$ cd /opt/mogdb/software/

[root@pkt_mogdb1 software]$ ll

total 169736

-rw-r--r--. 1 omm omm 559 Aug 8 17:48 config.yaml

-rw-r--r--. 1 omm omm 139152523 Aug 8 17:27 MogDB-3.0.0-CentOS-x86_64.tar.gz

-rw-r--r-- 1 root root 16227396 Aug 9 13:38 mogha-2.3.5-CentOS-x86_64.tar.gz

-rwxr-xr-x. 1 omm omm 13414400 Aug 2 17:47 ptk

-rw-r--r--. 1 omm omm 4974994 Aug 8 17:27 ptk_linux_x86_64.tar.gz

-rw-r--r--. 1 omm omm 26502 Aug 2 17:46 README.md

-rwxr--r--. 1 omm omm 486 Aug 8 17:36 root_fix_os.2022.0808.173657.sh

[root@pkt_mogdb1 software]$ tar -zxf mogha-2.3.5-CentOS-x86_64.tar.gz

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

安装MogHA

使用root用户安装,注意omm为数据库安装用户,路径是data_dir目录(主备节点都需要解压安装)

[root@pkt_mogdb1 mogha]# sudo ./install.sh omm /opt/mogdb/data/data/

提示successfully表示安装成功

配置MogHA

在mogha目录下有一个node.conf的配置文件,如果没有需要手动新建一个即可

以下是我的node.conf配置文件,把修改好文件以后复制到其他节点

[omm@pkt_mogdb1 mogha]$ cat node.conf

# docs: https://docs.mogdb.io/zh/mogha/v2.3/overview

[config]

# 数据库端口

db_port=26000

# 数据库的操作系统用户, 通常为omm

db_user=omm

# 数据库的数据目录

db_datadir=/opt/mogdb/data/data

# 本地主库元数据存储路径

primary_info=/opt/mogdb/software/mogha/primary_info

# 本地备库元数据存储路径

standby_info=/opt/mogdb/software/mogha/standby_info

# 是否使用 lite 模式, 可选值: True / False

lite_mode=True

# HA节点之间心跳端口, 如果有防火墙, 需要配置互通

agent_port=8081

# 心跳间隔时间

heartbeat_interval=3

# 主库丢失的探测时间

primary_lost_timeout=10

# 主库的孤单时间

primary_lonely_timeout=10

# 双主确认超时时间

double_primary_timeout=10

# 本地元数据文件类型,支持 json/bin

meta_file_type=json

# 是否为数据库实例进程限制cpu

taskset=False

# 设置输出的日志格式

logger_format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d]: %(message)s

# [2.3.0新增]设置日志存储目录

log_dir=/opt/mogdb/software/mogha

# [2.3.0新增] 日志文件最大字节数(接近该值时,将发生日志滚动)

# 支持的单位: KB, MB, GB (忽略大小写)

log_max_size=512MB

# [2.3.0新增] 日志保留的文件个数

log_backup_count=10

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

allow_ips=10.80.9.249,10.80.9.250

# [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.2.1新增]

debug_mode=False

# [2.3.0新增]

# HA节点间HTTP API 心跳请求超时时间(秒)

http_req_timeout=3

# (选填) 元数据库的连接参数 (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=10.80.9.249

heartbeat_ips=

[host2]

ip=10.80.9.250

heartbeat_ips=

# [host3]

# ip=

# heartbeat_ips=

# [host4]

# ip=

# heartbeat_ips=

# [host5]

# ip=

# heartbeat_ips=

# [host6]

# ip=

# heartbeat_ips=

# [host7]

# ip=

# heartbeat_ips=

# [host8]

# ip=

# heartbeat_ips=

# [host9]

# ip=

# heartbeat_ips=

# zone1~3 用于定义机房, 不同机房配置独立虚拟IP,

# 切换不会切过去,作为异地保留项目

# - vip: 机房虚拟IP (没有不填)

# - hosts: 本机房内机器列表, 填写机器在配置文件中对应的配置模块名 host1~9, 示例: host1,host2

# - ping_list: 用于检查网络是否通畅的仲裁节点, 例如网关, 支持填写多个IP (逗号分隔)

# - cascades: 机房内的级联机器列表 (配置方式同 hosts, 没有不填)

# - arping: (选填) 机房的 arping 地址, 切换虚拟IP后通知该地址

[zone1]

vip=10.80.9.248 #我的虚拟IP,客户端直接使用这个ip连接数据库

hosts=host1,host2

ping_list=10.80.0.1

cascades=

arping=

# [zone2]

# vip=

# hosts=

# ping_list=

# cascades=

# arping=

# [zone3]

# vip=

# hosts=

# ping_list=

# cascades=

# arping=

启动MogHA

先启动主节点的MogHA服务,这样虚拟ip就会绑定到主节点,切换到omm用户

[root@pkt_mogdb1 mogha]# su - omm

[omm@pkt_mogdb1 mogha]$ sudo systemctl start mogha

[omm@pkt_mogdb1 mogha]$ sudo systemctl enable mogha

[omm@pkt_mogdb1 mogha]$ sudo systemctl status mogha

查看虚拟IP的绑定情况

[omm@pkt_mogdb1 mogha]$ ip a

可以看到我的虚拟ip已经绑定到主节点的网卡上

按照此步骤,启动备节点MogHA。

客户端连接数据库只需要连接248即可

gsql -d db_mogdb -h 10.80.9.248 -U zkh -p 26000 -W Zkh12345678

MogHA测试

模拟主节点故障,把主节点关掉,查看虚拟ip的漂移情况

可以看到vip248已经成功飘到节点2中,并且节点2中mogha目录下也有一个日志,记录了切换过程

再模拟node2节点宕机,把主库重新切回node1

注意:如果主机修复以后不会自动漂移。

最后

MogHA软件已经安装测试成功,总体来说跟keepalived类似,都是通过虚拟ip进行主备机上漂移,然后通过gs_ctl执行主备角色切换。

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

文章被以下合辑收录

评论