Mogdb双网卡同步最佳实践

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

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

这里为肯定的告诉大家,MogDB支持!而且支持的非常好!

MogDB双网卡有什么用?

1、MogDB支持使用双网卡进行流复制,以确保主备数据库间的数据同步。双网卡配置在MogDB中用于流复制,可以显著提高数据同步的可靠性和系统的整体稳定性,尤其适合于对高可用性有严格要求的应用环境。

2、双重网络路径:两个网络接口卡提供了双重网络路径,增加了冗余性和容错能力。 .故障转移能力:如果其中一个网络接口发生故障,另一个可以接管数据同步任务,从而保持持续的数据一致性。

3、提高可靠性:在高负载或网络不稳定的情况下,双网卡配置提供了更高的可靠性和稳定性。

生产实际架构是怎样的?

这我给大家共享一下某客户的实践方案,以供大家参考。

alt

架构描述:

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

其中相关服务器IP规划如下:

机房名 主机名 ip vip 主用云 mogdb01 192.168.1.3 192.168.1.30 主用云 mogdb02 192.168.1.4 192.168.1.30 备用云 mogdb03 192.168.3.3 192.168.3.30 线控站 mogdb04 192.168.4.101/192.168.5.101 192.168.4.100/192.168.5.100

如何部署实施呢

1、首先配置好/etc/hosts文件,如下所示:

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、配置MogDB 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、流复制通道配置

从上面的架构图可以看出,几个机房的优先顺序是主用云>备用云>线控站;也就是192.168.1.3>192.168.1.4>192.168.3.3>192.168.4.101(192.168.5.101)。

我们知道主备切换优先级需要参数synchronous_standby_names来控制,因此在进行参数控制的要注意。

参数说明: 潜在同步复制的备机名称列表,每个名称用逗号分隔。

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

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 = '*'

注意:4台MogDB服务器的postgres.conf 都需要进行修改。

4、最后配置MogHA

修改每个节点的node.conf即可。 zone1~3 用于定义机房,分别表示主用云,备用云,线控站, 不同机房配置独立虚拟IP,分别为192.168.3.30,192.168.1.30,192.168.4.100,192.168.5.100。

最后修改后的样子如下所示:

# 注意: 如果需要打开注释修改参数, 参数名前不能有空格

[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=

到这里就告一段落了。

参考文档:# https://docs.mogdb.io/zh/mogha/v2.3/overview

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IP地址定位技术在各领域的作用

IP地址定位是通过确定IP地址的物理位置来定位一个设备的技术,它在现代社会的多个领域中都有着广泛的应用。以下将详细探讨IP地址定位的应用场景,以期对读者有所启发。 首先,在网络安全领域,IP地址定位发挥着至关重要的作用。网络…

kali工具----网络映射器(Network Mapper)

识别活跃的主机 尝试渗透测试之前,必须先识别在这个目标网络内活跃的主机。在一个目标网络内,最简单的方法将是执行ping命令。当然,它可能被一个主机拒绝,也可能被接收。本节将介绍使用Nmap工具识别活跃的主机。 1、网络映射器工具…

深度学习的模型有几类,能干嘛用?

1、基础模型 (1)卷积神经网络 **卷积:**卷积的本质是通过矩阵运算9的方式将输入数据进行空间上的滤波,有效地提取数据中的局 部特征,从而实现特征数据更高程度的抽象表示。 **池化:**可以理解成“压缩”…

09 Php学习:超级全局变量

超级全局变量 PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 PHP 超级全局变量列表: $GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILES$_ENV$_COOKIE$_SESSION $GLOBALS $GLOBALS 是 PHP 中的…

算法打卡day39|动态规划篇07| Leetcode 70. 爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数

算法题 Leetcode 70. 爬楼梯&#xff08;进阶版&#xff09; 题目&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 输入描述…

全新4.0版本圈子社交论坛系统 ,可打包小程序,于TP6+uni-app 全开源 可打包小程序app uniapp前端+全开源+独立版

简述 首先 圈子系统的核心是基于共同的兴趣或爱好将用户聚集在一起&#xff0c;这种设计使得用户能够迅速找到与自己有共同话题和兴趣的人。 其次 圈子系统提供了丰富的社交功能&#xff0c;如发帖、建圈子、发活动等&#xff0c;并且支持小程序授权登录、H5和APP等多种形式…

dfs板子

递归实现排列 留着明早省赛之前看 #include<iostream> using namespace std; int arr[10010]; int brr[10010]; int n,k; void dfs(int num){if(num > n){for(int i 1;i < n;i){cout << arr[i] << " ";}cout << endl;return;}for(in…

二、计算机网络物理层基础知识

一、物理层 物理层接口特性&#xff1a;解决如何在连接各种计算机传输媒体上的传输数据比特流&#xff0c;而不是指具体的传输媒体 物理层的主要任务 &#xff1a;确定与传输媒体接口有关的一些特性>定义标准 1、机械特性&#xff1a;定义物理连接的特性&#xff0c;规定物理…

人员抽烟AI检测算法原理介绍及实际场景应用

抽烟检测AI算法是一种基于计算机视觉和深度学习技术的先进工具&#xff0c;旨在准确识别并监测个体是否抽烟。该算法通过训练大量图像数据&#xff0c;使模型能够识别出抽烟行为的关键特征&#xff0c;如烟雾、手部动作和口部形态等。 在原理上&#xff0c;抽烟检测AI算法主要…

【Linux系列】Linux判断架构信息

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【QT入门】 Qt自定义控件与样式设计之QPushButton实现鼠标悬浮按钮弹出对话框

往期回顾&#xff1a; 【QT入门】 Qt自定义控件与样式设计之qss选择器-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QLineEdit的qss使用-CSDN博客 【QT入门】Qt自定义控件与样式设计之QPushButton常用qss-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QPushButton实现鼠标悬…

scipy.signal.cwt 与 pywt.cwt 使用记录

scipy.signal.cwt 该代码中widths以及freq计算公式来源于scipy.signal.morlet2函数官方案例 from scipy.signal import morlet, morlet2 from scipy import signal import matplotlib.pyplot as pltsignal_length 2000 fs 1000# 生成信号数据 time np.arange(0, signal_leng…

黄仁勋揭秘EIOFS(未来成功早期指标)英伟达成为最伟大AI企业的核心奥义

黄仁勋揭秘EIOFS(未来成功早期指标&#xff09;英伟达成为最伟大AI企业的核心奥义 原创 AI 吴厂长 AI 吴厂长 2024-04-02 00:12 上海 黄仁勋&#xff1a;你应该寻找未来成功的早期指标&#xff0c;而且越早越好。 原因是你想尽早看到自己正走在正确的方向上。 有个短语叫EIO…

C++---vector容器

是STL容器中的一种常用的容器&#xff0c;由于其大小(size)可变&#xff0c;常用于数组大小不可知的情况下来替代数组。vector容器与数组十分相似&#xff0c;被称为动态数组。时间复杂度为O&#xff08;1&#xff09;。 数组数据通常存储在栈中&#xff0c;vector数据通常存储…

C++ 二重指针

一 指向指针的指针 如果在一个指针变量中存放的是另一个变量的指针的地址&#xff0c;称该指针为指向指针的指针&#xff0c;即二重指针。

2.1 LeetCode总结(基本算法)_DFS

1.4 练习 104. 二叉树的最大深度 int maxDepth(struct TreeNode *root, int len) {if (root NULL) {return len;}return fmax(maxDepth(root->left, len1), maxDepth(root->right, len1)); }二叉树最大深度就是基本的递归思路的求解&#xff0c; 手法主要是递归下去之…

C语言基础(三)

C语言基础 三大结构顺序结构选择结构单分支选择结构双分支选择结构多分支选择结构if ...else if....elseswitch语句 循坏结构for循环表达式1可以省略吗&#xff1f;表达式2可以省略吗&#xff1f;表达式3可以省略吗&#xff1f;for循坏的嵌套 while循环do while循坏while与do w…

android支付宝接入流程

接入前准备 接入APP支付能力前&#xff0c;开发者需要完成以下前置步骤。 本文档展示了如何从零开始&#xff0c;使用支付宝开放平台服务端 SDK 快速接入App支付产品&#xff0c;完成与支付宝对接的部分。 第一步&#xff1a;创建应用并获取APPID 要在您的应用中接入支付宝…

【新版】系统架构设计师 - 知识点 - 结构化开发方法

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 知识点 - 结构化开发方法结构化开发方法结构化分析结构化设计 数据流图和数据字典模块内聚类型与耦合类型 架构 - 知识点 - 结构化开发方法 结构化开发方法 分析阶段 工具&#xff1a;数据流图、…

前端学习<四>JavaScript基础——20-函数简介

函数的介绍 函数&#xff1a;就是一些功能或语句的封装。在需要的时候&#xff0c;通过调用的形式&#xff0c;执行这些语句。 补充&#xff1a; 函数也是一个对象 使用typeof检查一个函数对象时&#xff0c;会返回 function 函数的作用&#xff1a; 一次定义&#xff0c;…