一线实战:国产数据库Mogdb双网卡同步最佳实践

前言

大家都知道Oracle数据库无论是单机还是RAC集群在进行生产部署实施时,我们都会对网卡做冗余考虑,使用双网卡,比如public、心跳网络。这样的目的主要是为了安全,避免单点故障。当然双网卡Bond不仅是可以做主备还可以支持负载均衡。这里我们先不展开讨论。

有用户从Oracle迁移到MogDB的时候就会问到:MogDB 的高可用怎么做,支持双网卡吗?

这里我可以肯定得告诉大家,MogDB支持!而且支持得非常好!

MogDB双网卡有什么用?

.双重网络路径:两个网络接口卡提供了双重网络路径,增加了冗余性和容错能力。 .故障转移能力:如果其中一个网络接口发生故障,另一个可以接管数据同步任务,从而保持持续的数据一致性。 .提高可靠性:在高负载或网络不稳定的情况下,双网卡配置提供了更高的可靠性和稳定性。

以下是真实生产环境的系统架构图:

alt

架构描述: 1、使用Mogha组件构建高可用架构,主从复制都为同步模式。 2、主用云和备用云同步是单网模式,线控站有独立的A网和B网双网模式,A\B网通过云出口交换机与主备云主机互通。 3、每个中心都有一组VIP,云主中心(vip1),云备中心(vip2)、线控站(vip3,vip4); 4、每个应用服务器都连接主库,Mogha只会把主库的vip挂载,通过驱动设置ip list,自动连接能ping通的vip,即为主库;

ip规划

机房名主机名ipvip
主用云mogdb01192.168.1.3192.168.1.30
主用云mogdb02192.168.1.4192.168.1.30
备用云mogdb03192.168.3.3192.168.3.30
线控站mogdb04192.168.4.101/192.168.5.101192.168.4.100/192.168.5.100

配置步骤

1、查看主机列表

cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.3    1  # ptk added
192.168.1.4    2  # ptk added
192.168.3.3    3  # ptk added
192.168.4.101  4  # ptk added

2、配置pg_hba.conf

添加互信,不然会出现Forbid remote connection with initia1 user的报错。

local   all             all                                     trust
host    all    omm    192.168.1.3/32    trust
host    all    omm    192.168.1.4/32    trust
host    all    omm    192.168.3.3/32    trust
host    all    omm    192.168.4.101/32    trust
host    all    omm    192.168.5.101/32    trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all    all    192.168.1.3/32    sha256
host    all    all    192.168.1.4/32    sha256
host    all    all    192.168.3.3/32    sha256
host    all    all    192.168.4.101/32    sha256
host    all    all    192.168.5.101/32    sha256

3、流复制通道配置

配置replconninfoN,主备云因为是单网,只需要配置一个流复制通道,线控站有A\B网,因此需要配置两个流复制通道。 参数说明: 设置本端侦听和鉴权的第N个节点信息(N=1, 2, 3, ...8)。 具体配置如下:

分别修改4台机器的postgresql.conf

192.168.1.3:
replconninfo1 = 'localhost=192.168.1.3 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.1.4 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'        
replconninfo2 = 'localhost=192.168.1.3 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.3.3 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'         
replconninfo3 = 'localhost=192.168.1.3 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.4.101 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'          
replconninfo4 = 'localhost=192.168.1.3 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.5.101 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004' 

192.168.1.4的postgresql.conf:
replconninfo1 = 'localhost=192.168.1.4 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.1.3 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'      
replconninfo2 = 'localhost=192.168.1.4 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.3.3 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'    
replconninfo3 = 'localhost=192.168.1.4 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.4.101 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'           
replconninfo4 = 'localhost=192.168.1.4 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.5.101 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'          

192.168.3.3:
replconninfo1 = 'localhost=192.168.3.3 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.1.3 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'         
replconninfo2 = 'localhost=192.168.3.3 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.1.4 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'        
replconninfo3 = 'localhost=192.168.3.3 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.4.101 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'            
replconninfo4 = 'localhost=192.168.3.3 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.5.101 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'        

192.168.4.101(192.168.5.101):
replconninfo1 = 'localhost=192.168.4.101 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.1.3 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'            
replconninfo2 = 'localhost=192.168.5.101 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.1.3 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'            
replconninfo3 = 'localhost=192.168.4.101 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.1.4 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'           
replconninfo4 = 'localhost=192.168.5.101 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.1.4 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'              
replconninfo5 = 'localhost=192.168.4.101 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.3.3 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'            
replconninfo6 = 'localhost=192.168.5.101 localport=26001 localheartbeatport=26005 localservice=26004 remotehost=192.168.3.3 remoteport=26001 remoteheartbeatport=26005 remoteservice=26004'  

4、配置主备切换优先级synchronous_standby_names

从架构图可以看出,几个机房的优先顺序是主用云>备用云>线控站,具体来说192.168.1.3>192.168.1.4>192.168.3.3>192.168.4.101(192.168.5.101) 也就是dn_6001>dn_6002>dn_6003>dn_6004。

这里的主备切换优先级需要参数synchronous_standby_names来控制。 参数说明: 潜在同步复制的备机名称列表,每个名称用逗号分隔。

FIRST N (node1,node2,…)表示在括号内按出现顺序的先后作为优先级选择前N个主机名称作为同步复制的备机名称列表。例如,FIRST 2 (node1,node2)表示选择node1作为同步复制的第一备机名称,node1作为同步复制的第二备机名称。

分别修改4台机器的postgresql.conf

192.168.1.3:
synchronous_standby_names = 'FIRST 2(dn_6002,dn_6003,dn_6004)'  # standby servers that provide sync rep
192.168.1.4:
synchronous_standby_names = 'FIRST 2(dn_6001,dn_6003,dn_6004)'  # standby servers that provide sync rep
192.168.3.3:
synchronous_standby_names = 'FIRST 2(dn_6001,dn_6002,dn_6004)'  # standby servers that provide sync rep
192.168.4.101(192.168.5.101):
synchronous_standby_names = 'FIRST 2(dn_6001,dn_6002,dn_6003)'  # standby servers that provide sync rep

所有节点
local_bind_address = '0.0.0.0'
改成
local_bind_address = '*'
不然会出现备库down A网情况下,备库的gs_ctl query显示异常wait A网:26001 timeout expired

4、配置mogha

修改node.conf

zone1~3 用于定义机房,分别表示主用云,备用云,线控站, 不同机房配置独立虚拟IP,分别为192.168.3.30,192.168.1.30,192.168.4.100,192.168.5.100

# docs: https://docs.mogdb.io/zh/mogha/v2.3/overview
# 注意: 如果需要打开注释修改参数, 参数名前不能有空格

[config]
# 数据库端口
db_port=26000

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

# 数据库的数据目录
db_datadir=/opt/mogdb/data

# 本地主库元数据存储路径
# primary_info=__INSTALLDIR__/primary_info

# 本地备库元数据存储路径
# standby_info=__INSTALLDIR__/standby_info

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

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

# 心跳间隔时间
heartbeat_interval=3

# 主库丢失的探测时间
primary_lost_timeout=5

# 主库的孤单时间
primary_lonely_timeout=5

# 双主确认超时时间
double_primary_timeout=5

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

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

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

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

# [2.3.0新增] 日志保留的文件个数
# 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
# 例: 3/3 最多尝试3次或者3分钟, 任何一个条件先满足就不再尝试。
# [2.4.10更新] 调整默认值为 3/1, 重试次数最多3次]
# restart_strategy=3/1

# [2.2.1新增]
# debug_mode=False

# [2.3.0新增]
# HA节点间HTTP API 心跳请求超时时间(秒)
# http_req_timeout=2


# host1-9, 每个代表一个机器(最多支持1主8备)
# - ip: HA节点间通信IP
# - heartbeat_ips: (选填)HA节点间通信的冗余 ip, 允许配置多个, 以逗号隔开,
[host1]
ip=192.168.1.3

[host2]
ip=192.168.1.4

[host3]
ip=192.168.3.3

[host4]
ip=192.168.4.101
heartbeat_ips=192.168.5.101
replconn_ip=192.168.4.101,192.168.5.101


# zone1~3 用于定义机房, 不同机房配置独立虚拟IP
# - hosts: (必填) 本机房内机器列表, 填写机器在配置文件中对应的配置模块名 host1~9, 示例: host1,host2
# - ping_list: (必填) 用于检查网络是否通畅的仲裁节点, 例如网关, 支持填写多个IP (逗号分隔)
# - vip: (选填) 机房虚拟IP
# - vip_bind_nic: (选填) 虚拟IP要绑定的网卡名, 默认使用 host 配置中的 ip 的网卡 [2.4.0新增]
# - vip_netmask: (选填) 虚拟ip的子网掩码, 默认和 host 配置中 ip 同一网段 [2.4.0新增]
# - cascades: (选填) 机房内的级联机器列表 (配置方式同 hosts, 没有不填)
# - arping: (选填) 机房的 arping 地址, 切换虚拟IP后通知该地址
[zone1]
hosts=host1,host2
ping_list=192.168.1.6,192.168.3.2
cascades=
vip=192.168.1.30
vip_bind_nic=bond0
vip_netmask=255.255.255.0
arping=


[zone2]
hosts=host3
ping_list=192.168.1.6,192.168.3.2
cascades=
vip=192.168.3.30
vip_bind_nic=bond0
vip_netmask=255.255.255.0 
arping=

[zone3]
hosts=host4
ping_list=192.168.1.6,192.168.3.2
vip=192.168.4.100,192.168.5.100
vip_bind_nic=
vip_netmask=
cascades=
arping=

通过本文的介绍,我们了解了MogDB在双网卡同步方面的配置和最佳实践。MogDB 支持使用双网卡进行流复制,以确保主备数据库间的数据同步。双网卡配置在MogDB中用于流复制,可以显著提高数据同步的可靠性和系统的整体稳定性,尤其适合于对高可用性有严格要求的应用环境。

作者介绍:云和恩墨资深Oracle dba,有12年左右的金融、保险、政府、地税、运营商等业务关键型系统的运维经验,曾担任公司异常恢复东区接口人,负责紧急异常恢复工作,技术二线专家。目前负责PG、openGauss/MogDB运维、国产化MogDB数据库的推广工作 alt

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/564772.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安装mysql的流程

安装mysql的步骤 安装流程 [rootlocalhost z]# cd /mnt/share/share[rootlocalhost share]# ll[rootlocalhost share]# cp mysql157-community-release-el7-10.noarch.rmp /usr/localcp: cannot stat ‘mysql157-community-release-el7-10.noarch.rmp’: No such file or direc…

企业车辆管理系统平台是做什么的?

企业车辆管理系统平台是一种综合性的管理系统,它主要集车辆信息管理、车辆调度、车辆维修、油耗管理、驾驶员管理以及报表分析等多种功能于一体。通过这个平台,企业可以实现对车辆的全面管理,优化车辆使用效率,降低运营成本&#…

JavaWeb开发06-原理-Spring配置优先级-Bean管理-SpringBoot原理-Maven继承和聚合-私服

一、Spring配置优先级 不同配置文件,配置同一个属性谁有效 properties>yml>yaml 命令行参数>Java系统属性 项目打包后要改变属性: 红色是Java系统属性,绿色是命令行参数 ‘ 二、Bean管理 1.获取bean 获取IOC容器:ap…

linux之进程通信

目录 一、进程通信介绍 1.目的 2.发展 3.进程通信是什么,怎么通信? 二、管道 1.介绍 2.匿名管道 1.单向通信管道原理 2.代码实现 3.管道特征 4.管道的四种情况 5.管道的应用场景 使用管道实现一个简易版本的进程池 3.命名管道 1.思考 2.…

了解IPS和IDS:这5个差异将改变你的安全观念!

IPS 代表 入侵防御系统(Intrusion Prevention System),它是 IDS 的进一步发展,不仅具备检测攻击的能力,还能在检测到攻击后主动采取措施阻止攻击。IPS 通常部署在防火墙和网络设备之间,能够深度感知并检测流…

ubuntu18.04与windows文件互传

目录 window下载Xftp软件ubuntu上的配置windows端Xftp软件的使用 window下载Xftp软件 下载:家庭/学校免费版 安装教程推荐下面的文章 xftp7免费版安装教程(详细) ubuntu上的配置 在进入系统后,确保有网络连接的情况下按Ctrl A…

cookie与session区别和联系

在Web应用中,HTTP协议是无状态的,每次请求都是独立的,服务器无法直接识别一个用户的不同请求之间的关联。这就导致了如果我们希望在一个会话中保持一些数据的状态,比如用户的身份认证信息、购物车内容等,就需要借助Coo…

golang本地缓存库之bigcache

1. 前言 上周工作之余逛github看到一个本地缓存库bigcache,这个是allegro公司开源的一个项目,主要是用于本地缓存使用,根据他们的博客说明,他们编写这个库最初的目的就是实现一个非常快速的缓存服务。 看了下bigcache这个库的源…

[StartingPoint][Tier2]Base

Task 1 Which two TCP ports are open on the remote host? (远程服务器开放了哪两个TCP端口?) $ nmap -sC -sV 10.129.234.232 22,80 Task 2 What is the relative path on the webserver for the login page? (相关的登录页面路径是什么?) /login/login.php Task 3 …

自动驾驶控制算法

本文内容来源是B站——忠厚老实的老王,侵删。 三个坐标系和一些有关的物理量 使用 frenet坐标系可以实现将车辆纵向控制和横向控制解耦,将其分开控制。使用右手系来进行学习。 一些有关物理量的基本概念: 运动学方程 建立微分方程 主要是弄…

格局在尘埃之间与宇宙之外。

在沈自所 见天地、见众生、见自己。 所里待了两年半,感叹时光飞逝,无疑在所这段时间,对我的成长是巨大的支持。感谢我的导师给予我的自由度和包容,感谢817所有兄弟姐妹。感谢所里面的兄弟们,我们一起经历了很多事情&…

ctfshow web29-web40

命令执行 看清都过滤了些什么!! 知识点: web34:当;和()被过滤了就用语言结构,一般有echo print isset unset include require web37:data协议是将后面的字符串当成php代码执行,例如 /?cdat…

【leetcode面试经典150题】62. K 个一组翻转链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

Oracle 可传输表空间(Transportable Tablespace)

在数据归档、备份、测试等场景,我们经常需要将数据从一个系统移动到另一个系统,一个较常用的方案是数据的导出/导入(export/import),但是在数据量较大的场景,此方案可能比较耗时。而可传输表空间是一种以文…

大数据技术应用实训室解决方案

一、大数据课程体系 1.1 大数据实验实训课程体系设计依据 大数据实验实训课程体系的设计依据主要围绕培养目标、培养方案和课程体系建设三个方面来展开。 1、培养目标 大数据实验实训课程的设计旨在培养具备大数据理论知识和实践技能的专业人才。具体而言,这些人才…

Midjourney 中文文档

快速使用 学习如何在Discord上使用Midjourney Bot从简单的文本提示中创建自定义图像。 行为准则 不要表现出不良行为。不要使用我们的工具制作可能引起煽动,不安或引起争议的图像。这包括血腥和成人内容。尊重其他人和团队。 1:加入Discord 访问Midj…

【软件测试】关于Web自动化测试

文章目录 🍃前言🌲如何实现Web自动化🚩安装驱动管理🚩Selenium库的安装 🌳自动化常用函数🚩元素的定位🎈cssSelector🎈xpath 🚩操作测试对象🎈点击/提交对象—…

Linux中docker安装

准备工作 系统要求 Docker 支持 64 位版本 CentOS 7/8,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不…

个人电脑信息安全注意事项

个人电脑信息安全注意事项 一、密码安全: 设置复杂且独特的密码,避免使用容易猜测或常见的密码。 定期更换密码,特别是在重要账户或应用上。 不要在多个账户上重复使用相同的密码。 使用密码管理工具来安全地存储和访问密码。 二、软件安…

在传统云安全失败时提供帮助的六种策略

随着基于内存的攻击的激增继续挑战传统的云安全防御,对主动和全面的安全措施的需求变得至关重要。采用结合端点检测和响应、内存完整性保护和定期更新的多层方法可以加强对这些难以捉摸的威胁的防御。 随着云计算技术在各行各业的迅速普及,数据保护和安全…