当前位置: 首页 > news >正文

openGauss通过VIP实现的故障转移

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 ## 1.文章前言
    • 📣 ## 2.CM管理两节
      • ✨ 2.1 何为CM
      • ✨ 2.2 CM的特点
      • ✨ 2.3 XML配置文件
    • 📣 ## 3.集群VIP管理
      • ✨ 3.1 增加sudo权限
      • ✨ 3.2 添加VIP
      • ✨ 3.3 配置参数
      • ✨ 3.4 重启集群
    • 📣 ## 4.测试故障转移

前言

本文详细阐述了openGauss通过CM管理,实现的VIP故障转移全过程

📣 ## 1.文章前言

随着目前信创产业的发展,应项目的需求,通过高可用的方式实现数据库的故障转移。于是花了点时间研究,通过CM管理,实现了VIP故障转移全过程,在经历了这次故障转移之后,我觉得有必要分享我在此过程中获得的见解

📣 ## 2.CM管理两节

✨ 2.1 何为CM

CM(Cluster Manager)是一款数据库管理模块。支持自定义资源监控,提供了数据库主备的状态监控、网络通信故障监控、文件系统故障监控、故障自动主备切换等能力。提供了丰富的数据库管理能力,如节点、实例级的启停,数据库实例状态查询、主备切换、日志管理等。提供了通过REST接口远程查询和接收集群状态的能力。

✨ 2.2 CM的特点

高可用:CM易用性提升支持一键式关闭CM集群服务;支持和内核的安装部署解耦;支持按事件调用用户自定义脚本;支持CM组件单独升级,增强数据库集群可靠性;CM根据配置信息,支持用户自定义组件的监控和管需要注意的是,一主一备模式下,CM只支持基本的安装,启停,检测能力,其他功能不支持。高可用:CM支持VIP管理通过VIP可以直接找到主机,连接重连更准更快(毫秒级别);支持主机故障,CM选出新主时,VIP漂移到新的主上;当出现双主时,依然可以通过VIP访问到唯一一个主机,降低了双主丢数据的风险。

✨ 2.3 XML配置文件

<?xml version="1.0" encoding="UTF-8"?>
<ROOT><!-- openGauss整体信息 --><CLUSTER><!-- 数据库名称 --><PARAM name="clusterName" value="opengauss" /><!-- 数据库节点名称(hostname) --><PARAM name="nodeNames" value="opengauss51m,opengauss51b" /><!-- 数据库安装目录,与数据库所需其它路径相互独立,没有包含关系--><PARAM name="gaussdbAppPath" value="/openGauss/app" /><!-- 日志目录--><PARAM name="gaussdbLogPath" value="/openGauss/log/omm" /><!-- 临时文件目录--><PARAM name="tmpMppdbPath" value="/openGauss/tmp"/><!-- 数据库工具目录--><PARAM name="gaussdbToolPath" value="/openGauss/om" /><!-- 数据库core文件目录--><PARAM name="corePath" value="/openGauss/corefile"/><!-- 节点IP,与数据库节点名称列表一一对应 --><PARAM name="backIp1s" value="192.168.6.11,192.168.6.12"/> </CLUSTER><!-- 每台服务器上的节点部署信息 --><DEVICELIST><!-- 节点1上的部署信息 --><DEVICE sn="opengauss51m"><!-- 节点1的主机名称 --><PARAM name="name" value="opengauss51m"/><!-- 节点1所在的AZ及AZ优先级 --><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --><PARAM name="backIp1" value="192.168.6.11"/><PARAM name="sshIp1" value="192.168.6.11"/><!-- cm主 --><PARAM name="cmsNum" value="1"/><PARAM name="cmDir" value="/openGauss/cm"/><PARAM name="cmServerPortBase" value="15300"/><PARAM name="cmServerListenIp1" value="192.168.6.11,192.168.6.12"/><PARAM name="cmServerHaIp1" value="192.168.6.11,192.168.6.12"/><!-- cmServerlevel目前只支持1 --><PARAM name="cmServerlevel" value="1"/><!-- cms主及所有备的hostname --><PARAM name="cmServerRelation" value="opengauss51m,opengauss51b"/><!--dn--><PARAM name="dataNum" value="1"/><PARAM name="dataPortBase" value="15400"/><PARAM name="dataNode1" value="/openGauss/data/dn,opengauss51b,/openGauss/data/dn"/><PARAM name="dataNode1_syncNum" value="0"/></DEVICE><!-- 节点2上的节点部署信息,其中"name"的值配置为主机名称 --><DEVICE sn="opengauss51b"><!-- 节点2的主机名称 --><PARAM name="name" value="opengauss51b"/><!-- 节点2所在的AZ及AZ优先级 --><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><!-- 节点2的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --><PARAM name="backIp1" value="192.168.6.12"/><PARAM name="sshIp1" value="192.168.6.12"/><!-- cm --><PARAM name="cmDir" value="/openGauss/cm"/><PARAM name="cmServerPortStandby" value="15300"/></DEVICE></DEVICELIST>
</ROOT>

📣 ## 3.集群VIP管理

✨ 3.1 增加sudo权限

给omm用户增加sudo权限,所有节点都执行
echo "omm ALL=(ALL) NOPASSWD:ALL">>/etc/sudoers
echo "Cmnd_Alias COMMAND_FLAG = /usr/sbin/ifconfig" >> /etc/sudoers

✨ 3.2 添加VIP

ifconfig ens33:15400 192.168.6.14 netmask 255.255.255.0 upens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.6.11  netmask 255.255.255.0  broadcast 192.168.6.255inet6 fe80::a281:1dad:5f3f:1be8  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:56:78:64  txqueuelen 1000  (Ethernet)RX packets 70129  bytes 10190915 (9.7 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 445322  bytes 1129835756 (1.0 GiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:15400: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.6.14  netmask 255.255.255.0  broadcast 192.168.6.255ether 00:0c:29:56:78:64  txqueuelen 1000  (Ethernet
给集群添加VIP资源 VIP作为openGauss的资源管理
cm_ctl res --add --res_name="VIP_az1" --res_attr="resources_type=VIP,float_ip=192.168.6.14"
将每个实例加到资源中
cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=1,res_instance_id=6001" --inst_attr=base_ip=192.168.6.11
cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=2,res_instance_id=6002" --inst_attr=base_ip=192.168.6.12
[omm@opengauss51m ~]$ cm_ctl res --check
cm_ctl: resource config is valid.执行check完成后,在cmdataPath/cm_agent/目录下会生成一个自定义资源配置文件cm_resource.json,
检查完成没有错误后,需要手动scp将该文件分发到其他节点

✨ 3.3 配置参数

配置/openGauss/data/dn/pg_hba.conf
在数据库pg_hba.conf文件中以sha256方式添加floatIphost    all    all    192.168.6.14/32     sha256--cm集群故障自动切换配置前提条件,通过三方网管实现
cd /openGauss/cm/cm_server
vi cm_server.confthird_party_gateway_ip = 192.168.6.8
cms_enable_failover_on2nodes = true         
cms_network_isolation_timeout = 20  

✨ 3.4 重启集群

[omm@opengauss51m ~]$ gs_om -t stop
Stopping cluster.
=========================================
Successfully stopped cluster.
=========================================
End stop cluster.
[omm@opengauss51m ~]$ gs_om -t start
Starting cluster.
======================================================================
Successfully started primary instance. Wait for standby instance.
======================================================================
.
Successfully started cluster.
======================================================================
cluster_state      : Normal
redistributing     : No
node_count         : 2
Datanode Stateprimary           : 1standby           : 1secondary         : 0cascade_standby   : 0building          : 0abnormal          : 0down              : 0Successfully started cluster.查询VIP在哪个节点
[omm@opengauss51m ~]$ cm_ctl show[  Network Connect State  ]Network timeout:       6s
Current CMServer time: 2023-11-18 21:03:20
Network stat('Y' means connected, otherwise 'N'):
|  \  |  Y  |
|  Y  |  \  |[  Node Disk HB State  ]Node disk hb timeout:    200s
Current CMServer time: 2023-11-18 21:03:21
Node disk hb stat('Y' means connected, otherwise 'N'):
|  N  |  N  |[  FloatIp Network State  ]node            instance base_ip      float_ip_name float_ip     
-----------------------------------------------------------------
1  opengauss51m 6001     192.168.6.11 VIP_az1       192.168.6.14 

📣 ## 4.测试故障转移

##本次实验,我们直接对主库关机,验证高可用
[omm@opengauss51b ~]$ gs_om -t status --detail
[  CMServer State   ]node            node_ip         instance                     state
--------------------------------------------------------------------
1  opengauss51m 192.168.6.11    1    /openGauss/cm/cm_server Down
2  opengauss51b 192.168.6.12    2    /openGauss/cm/cm_server Primary[   Cluster State   ]cluster_state   : Degraded
redistributing  : No
balanced        : No
current_az      : AZ_ALL[  Datanode State   ]node            node_ip         instance                state            
-------------------------------------------------------------------------
1  opengauss51m 192.168.6.11    6001 /openGauss/data/dn P Down    Unknown
2  opengauss51b 192.168.6.12    6002 /openGauss/data/dn S Primary Normal##备库变为主库,VIP也飘逸过来了                                               [omm@opengauss51b ~]$ cm_ctl show[  Network Connect State  ]Network timeout:       6s
Current CMServer time: 2023-11-18 22:41:44
Network stat('Y' means connected, otherwise 'N'):
|  \  |  Y  |
|  Y  |  \  |[  Node Disk HB State  ]Node disk hb timeout:    200s
Current CMServer time: 2023-11-18 22:41:45
Node disk hb stat('Y' means connected, otherwise 'N'):
|  N  |  N  |[  FloatIp Network State  ]node            instance base_ip      float_ip_name float_ip     
-----------------------------------------------------------------
2  opengauss51b 6002     192.168.6.12 VIP_az1       192.168.6.14 ##然后我们启动主库,恢复集群--启动集群
[omm@opengauss51m ~]$ gs_om -t start
[omm@opengauss51b ~]$ gs_om -t status --detail
[  CMServer State   ]node            node_ip         instance                     state
--------------------------------------------------------------------
1  opengauss51m 192.168.6.11    1    /openGauss/cm/cm_server Standby
2  opengauss51b 192.168.6.12    2    /openGauss/cm/cm_server Primary[   Cluster State   ]cluster_state   : Normal
redistributing  : No
balanced        : No
current_az      : AZ_ALL[  Datanode State   ]node            node_ip         instance                state            
-------------------------------------------------------------------------
1  opengauss51m 192.168.6.11    6001 /openGauss/data/dn P Standby Normal
2  opengauss51b 192.168.6.12    6002 /openGauss/data/dn S Primary Normal

相关文章:

  • 汽车 CAN\CANFD数据记录仪
  • 情报收集工具的编写
  • 无需添加udid,ios企业证书的自助生成方法
  • Linux:firewalled服务常规操作汇总
  • Linux服务器挂载另一台服务器的文件夹(mount)
  • 【C++】plog
  • HTML5学习系列之网页图像
  • SELinux零知识学习十八、SELinux策略语言之类型强制(3)
  • JVM bash:jmap:未找到命令 解决
  • 验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
  • 创建一个用户test且使用testtab表空间及testtemp临时表空间并授予其权限,密码随意
  • Linux终端与交互式Bash
  • uniapp 手动调用form表单submit事件
  • C#,数值计算——插值和外推,曲线插值(Curve_interp)的计算方法与源程序
  • 【Oracle 客户端连接数据库过程解析】
  • C++类中的特殊成员函数
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • ESLint简单操作
  • JAVA_NIO系列——Channel和Buffer详解
  • magento 货币换算
  • PermissionScope Swift4 兼容问题
  • Redis 懒删除(lazy free)简史
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • tensorflow学习笔记3——MNIST应用篇
  • Vue 重置组件到初始状态
  • 翻译:Hystrix - How To Use
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 两列自适应布局方案整理
  • 如何选择开源的机器学习框架?
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 一个项目push到多个远程Git仓库
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #单片机(TB6600驱动42步进电机)
  • (3)llvm ir转换过程
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (搬运以学习)flask 上下文的实现
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (南京观海微电子)——I3C协议介绍
  • (十一)手动添加用户和文件的特殊权限
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)EXC_BREAKPOINT僵尸错误
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .form文件_SSM框架文件上传篇
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式