openGauss 6.0高可用测试,系统上线前很关键

作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理

文章目录

    • 前言
    • 📣 1.实例switchover切换
    • 📣 2.CM两节点特性
      • ✨ 2.1 CM状态
      • ✨ 2.2 VIP添加
      • ✨ 2.3 查询VIP
    • 📣 3.实例failover切换
    • 📣 4.备库写重定向

前言

openGauss 6.0高可用测试,系统上线前很关键,这里分享一下测试的结果

📣 1.实例switchover切换

主备切换为维护操作,确保openGauss状态正常,所有业务结束后,再进行切换操作。

操作步骤如下:

1.以操作系统用户omm登录数据库任意节点,执行如下命令,查看主备情况。

[omm@gaussdb1 ~]$ gs_om -t status --detail
[  CMServer State   ]

node        node_ip         instance                     state
----------------------------------------------------------------
1  gaussdb1 192.168.3.10    1    /openGauss/cm/cm_server Standby
2  gaussdb2 192.168.3.11    2    /openGauss/cm/cm_server Standby
3  gaussdb3 192.168.3.12    3    /openGauss/cm/cm_server Primary

[   Cluster State   ]

cluster_state   : Normal
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL

[  Datanode State   ]

node        node_ip         instance                       state            
----------------------------------------------------------------------------
1  gaussdb1 192.168.3.10    6001 15400  /openGauss/data/dn P Primary Normal
2  gaussdb2 192.168.3.11    6002 15400  /openGauss/data/dn S Standby Normal
3  gaussdb3 192.168.3.12    6003 15400  /openGauss/data/dn S Standby Normal

2.以操作系统用户omm登录准备切换为主节点的备节点,执行如下命令。

[omm@gaussdb2 ~]$ gs_ctl switchover -D /openGauss/data/dn/
[2024-06-17 19:09:22.259][49407][][gs_ctl]: gs_ctl switchover ,datadir is /openGauss/data/dn 
[2024-06-17 19:09:22.259][49407][][gs_ctl]: switchover term (1)
[2024-06-17 19:09:22.270][49407][][gs_ctl]: waiting for server to switchover........
[2024-06-17 19:09:27.561][49407][][gs_ctl]: done
[2024-06-17 19:09:27.561][49407][][gs_ctl]: switchover completed (/openGauss/data/dn)

注意:/openGauss/data/dn/为备数据库节点的数据目录。
须知: 对于同一数据库,上一次主备切换未完成,不能执行下一次切换。当业务正在操作时,发起switchover,
可能主机的线程无法停止导致switchover显示超时,实际后台仍然在运行,等主机线程停止后,switchover即可完成。
比如在主机删除一个大的分区表时,可能无法响应switchover发起的信号。

主机故障时,可以在备机执行如下命令。
gs_ctl failover -D /openGauss/data/dn/

3.switchover或failover成功后,执行如下命令记录当前主备机器信息,备机执行

[omm@gaussdb2 ~]$ gs_om -t refreshconf
Generating dynamic configuration file for all nodes.
Successfully generated dynamic configuration file.

📣 2.CM两节点特性

高可用:CM支持VIP管理
通过VIP可以直接找到主机,连接重连更准更快(毫秒级别);
支持主机故障,CM选出新主时,VIP漂移到新的主上;
当出现双主时,依然可以通过VIP访问到唯一一个主机,降低了双主丢数据的风险。

高可用:CM磁盘只读检测能力增强
只读状态从数据库获取,保证准确性;
只读仲裁只仲裁当前超过阈值的实例,其他节点不受影响;
主机只读保护后自动主备切换,选可用备机升主保证集群能正常提供工作。

高可用:CM易用性提升
支持一键式关闭CM集群服务;
支持和内核的安装部署解耦;
支持按事件调用用户自定义脚本;
支持CM组件单独升级,增强数据库集群可靠性;
CM根据配置信息,支持用户自定义组件的监控和管

✨ 2.1 CM状态

[omm@gaussdb1 ~]$ cm_ctl query -Cv
[  CMServer State   ]

node        instance state
----------------------------
1  gaussdb1 1        Standby
2  gaussdb2 2        Standby
3  gaussdb3 3        Primary

[   Cluster State   ]

cluster_state   : Normal
redistributing  : No
balanced        : No
current_az      : AZ_ALL

[  Datanode State   ]

node        instance state            | node        instance state            | node        instance state
------------------------------------------------------------------------------------------------------------------------
1  gaussdb1 6001     P Standby Normal | 2  gaussdb2 6002     S Primary Normal | 3  gaussdb3 6003     S Standby Normal

image.png

✨ 2.2 VIP添加

1.给omm用户增加sudo权限,3台机器都执行
echo “omm ALL=(ALL) NOPASSWD:ALL”>>/etc/sudoers
echo “Cmnd_Alias COMMAND_FLAG = /usr/sbin/ifconfig” >> /etc/sudoers

2.添加VIP,以端口号标记,便于区分
[root@gaussdb2 ~]# ifconfig ens33:15400 192.168.3.14 netmask 255.255.255.0 up

image.png

3.给集群添加VIP资源 VIP作为openGauss的资源管理
[root@gaussdb1 ~]# su - omm
[omm@gaussdb1 ~]# cm_ctl res --add --res_name=“VIP_az1” --res_attr=“resources_type=VIP,float_ip=192.168.3.14”

image.png

4.将每个实例加到资源中
cm_ctl res --edit --res_name=“VIP_az1” --add_inst=“node_id=1,res_instance_id=6001” --inst_attr=base_ip=192.168.3.10
cm_ctl res --edit --res_name=“VIP_az1” --add_inst=“node_id=2,res_instance_id=6002” --inst_attr=base_ip=192.168.3.11
cm_ctl res --edit --res_name=“VIP_az1” --add_inst=“node_id=3,res_instance_id=6003” --inst_attr=base_ip=192.168.3.12

image.png

执行完成后,建议使用cm_ctl res –-check命令进行检查,自定义资源文件要求每个节点都要有且一致
[omm@gaussdb1 ~]$ cm_ctl res --check
cm_ctl: resource config is valid.
执行check完成后,在cmdataPath/cm_agent/目录下会生成一个自定义资源配置文件cm_resource.json,
检查完成没有错误后,需要手动scp将该文件分发到其他节点
分发完成后需要重启集群才能生效。该配置文件对格式要求比较严格,所以该操作不建议使用直接修改文件的方式配置,
建议配置后使用cm_ctl res –check命令进其他节点校验。
[root@gaussdb1 ~]# find / -name cm_resource.json
/openGauss/cm/cm_agent/cm_resource.json
[omm@gaussdb1 ~]$ scp /openGauss/cm/cm_agent/cm_resource.json gaussdb2:/openGauss/cm/cm_agent/
[omm@gaussdb1 ~]$ scp /openGauss/cm/cm_agent/cm_resource.json gaussdb3:/openGauss/cm/cm_agent/

5.重启集群
[omm@gaussdb1 ~]$ gs_om -t stop
Stopping cluster.
=========================================
Successfully stopped cluster.
=========================================
End stop cluster.

[omm@gaussdb1 ~]$ gs_om -t start
Starting cluster.
======================================================================
Successfully started primary instance. Wait for standby instance.
======================================================================
.
Successfully started cluster.
======================================================================
cluster_state      : Normal
redistributing     : No
node_count         : 3
Datanode State
    primary           : 1
    standby           : 2
    secondary         : 0
    cascade_standby   : 0
    building          : 0
    abnormal          : 0
    down              : 0

Successfully started cluster.

✨ 2.3 查询VIP


配置/openGauss/data/dn/pg_hba.conf
在数据库pg_hba.conf文件中以sha256方式添加floatIp
host    all    all    192.168.3.14/32     sha256

--此时我们发现主库在节点1

[omm@gaussdb1 ~]$ cm_ctl show

[  Network Connect State  ]

Network timeout:       6s
Current CMServer time: 2024-06-17 19:56:02
Network stat('Y' means connected, otherwise 'N'):
|  \  |  Y  |  Y  |
|  Y  |  \  |  Y  |
|  Y  |  Y  |  \  |


[  Node Disk HB State  ]

Node disk hb timeout:    200s
Current CMServer time: 2024-06-17 19:56:03
Node disk hb stat('Y' means connected, otherwise 'N'):
|  N  |  N  |  N  |

[  FloatIp Network State  ]

node        instance base_ip      float_ip_name float_ip     
-------------------------------------------------------------
2  gaussdb2 6002     192.168.3.11 VIP_az1       192.168.3.14 
[omm@gaussdb1 ~]$ 

📣 3.实例failover切换

1.主库在节点1
[omm@gaussdb1 ~]$ gs_om -t status --detail
[  CMServer State   ]

node        node_ip         instance                     state
----------------------------------------------------------------
1  gaussdb1 192.168.3.10    1    /openGauss/cm/cm_server Standby
2  gaussdb2 192.168.3.11    2    /openGauss/cm/cm_server Standby
3  gaussdb3 192.168.3.12    3    /openGauss/cm/cm_server Primary

[   Cluster State   ]

cluster_state   : Normal
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL

[  Datanode State   ]

node        node_ip         instance                       state            
----------------------------------------------------------------------------
1  gaussdb1 192.168.3.10    6001 15400  /openGauss/data/dn P Primary Normal
2  gaussdb2 192.168.3.11    6002 15400  /openGauss/data/dn S Standby Normal
3  gaussdb3 192.168.3.12    6003 15400  /openGauss/data/dn S Standby Normal

2.主库服务器关机
此时我们发现主库挂了之后,备库变为主库,VIP也飘逸过来了 

image.png

3.恢复主备恢复OK
[omm@gaussdb2 ~]$ gs_om -t status --detail
[omm@gaussdb2 ~]$ cm_ctl show

image.png

📣 4.备库写重定向

原理是:是通过将备库上的 DML 重定向到主库上执行,然后备库应用 DML 变化数据,至此完成备库 DML 操作。
有个控制参数 enable_remote_excute在所有节点配置即可

vi /openGauss/data/dn/postgresql.conf
enable_remote_excute=on

--接着重启集群
[omm@gaussdb1 ~]$ gs_om -t stop
[omm@gaussdb1 ~]$ gs_om -t start

image.png

[omm@gaussdb1 ~]$ gs_om -t status --detail
[  CMServer State   ]

node        node_ip         instance                     state
----------------------------------------------------------------
1  gaussdb1 192.168.3.10    1    /openGauss/cm/cm_server Standby
2  gaussdb2 192.168.3.11    2    /openGauss/cm/cm_server Standby
3  gaussdb3 192.168.3.12    3    /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  gaussdb1 192.168.3.10    6001 15400  /openGauss/data/dn P Standby Normal
2  gaussdb2 192.168.3.11    6002 15400  /openGauss/data/dn S Primary Normal
3  gaussdb3 192.168.3.12    6003 15400  /openGauss/data/dn S Standby Normal

[omm@gaussdb3 ~]$ psql
bash: psql: command not found...
[omm@gaussdb3 ~]$ gsql
gsql ((openGauss 6.0.0-RC1 build ed7f8e37) compiled at 2024-03-31 11:59:31 commit 0 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

openGauss=# \t
Showing only tuples.
openGauss=# \l
 postgres  | omm   | SQL_ASCII | C       | C     | 
 template0 | omm   | SQL_ASCII | C       | C     | =c/omm           +
           |       |           |         |       | omm=CTc/omm
 template1 | omm   | SQL_ASCII | C       | C     | =c/omm           +
           |       |           |         |       | omm=CTc/omm

openGauss=# create table test(id int);
CREATE TABLE
openGauss=# \d test
 id     | integer | 


openGauss=#select * from pg_stat_get_wal_receiver(); 
ERROR:  invalid byte sequence for encoding "UTF8": 0xe3 0x73 0x65
openGauss=# select * from pg_stat_get_wal_receiver(); 
receiver_pid               | 60770
local_role                 | Standby
peer_role                  | Primary
peer_state                 | Normal
state                      | Normal
sender_sent_location       | 0/5012BC0
sender_write_location      | 0/5012BC0
sender_flush_location      | 0/5012BC0
sender_replay_location     | 0/5012BC0
receiver_received_location | 0/5012BC0
receiver_write_location    | 0/5012BC0
receiver_flush_location    | 0/5012BC0
receiver_replay_location   | 0/5012BC0
sync_percent               | 100%
channel                    | 192.168.3.12:54532<--192.168.3.11:15401

openGauss=# select pg_is_in_recovery();
-[ RECORD 1 ]-----+--
pg_is_in_recovery | t

image.png

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

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

相关文章

安卓网络通信(多线程、HTTP访问、图片加载、即时通信)

本章介绍App开发常用的以下网络通信技术&#xff0c;主要包括&#xff1a;如何以官方推荐的方式使用多线程技术&#xff0c;如何通过okhttp实现常见的HTTP接口访问操作&#xff0c;如何使用Dlide框架加载网络图片&#xff0c;如何分别运用SocketIO和WebSocket实现及时通信功能等…

全平台无水印下载软件【电脑版】

支持抖音&#xff0c;快手&#xff0c;小红书&#xff0c;电脑PC端使用。 链接&#xff1a;https://pan.baidu.com/s/1969HwHNyqYL_GJtB0n0G_w?pwd2sjn 提取码&#xff1a;2sjn

RedHat9 | Web服务配置与管理(Apache)

一、实验环境 1、Apache服务介绍 Apache服务&#xff0c;也称为Apache HTTP Server&#xff0c;是一个功能强大且广泛使用的Web服务器软件。 起源和背景 Apache起源于NCSA httpd服务器&#xff0c;经过多次修改和发展&#xff0c;逐渐成为世界上最流行的Web服务器软件之一。…

yolov5-7.0更改resnet主干网络

参考链接 ClearML教程:https://blog.csdn.net/qq_40243750/article/details/126445671 b站教学视频&#xff1a;https://www.bilibili.com/video/BV1Mx4y1A7jy/spm_id_from333.788&vd_sourceb52b79abfe565901e6969da2a1191407 开始 github地址:https://github.com/z106…

【机器学习300问】121、RNN是如何生成文本的?

当RNN模型训练好后&#xff0c;如何让他生成一个句子&#xff1f;其实就是一个RNN前向传播的过程。通常遵循以下的步骤。 &#xff08;1&#xff09;初始化 文本生成可以什么都不给&#xff0c;让他生成一首诗。首先&#xff0c;你需要确定采样的起始点。这可以是一个特殊的开…

CAD二次开发(9)- CAD中对象的实时选择

1. 点的拾取 有时候我们需要在CAD画布上实时选取起始点和结束点&#xff0c;然后绘制出来一条直线。实现如下&#xff1a; public void getPoint(){var doc Application.DocumentManager.MdiActiveDocument;var editor doc.Editor;var docDatabase doc.Database;PromptPoi…

中国银行信息科技运营中心、软件中心春招笔试测评面试体检全记录

本文介绍2024届春招中&#xff0c;中国银行下属各部门统一笔试&#xff0c;以及信息科技运营中心与软件中心各自的面试&#xff0c;以及编程能力测评、体检等相关环节的具体流程、相关信息等。 2024年04月投递了中国银行的信息科技类岗位&#xff0c;一共投递了4个岗位&#xf…

API接口设计的艺术:如何提升用户体验和系统性能

在数字时代&#xff0c;API接口的设计对于用户体验和系统性能有着至关重要的影响。良好的设计可以显著提升应用程序的响应速度、可靠性和易用性。以下是几个关键点&#xff0c;帮助改善API接口的设计&#xff1a; 1. 理解并定义清晰的要求 用户研究&#xff1a;与最终用户进行…

python 集合

文章目录 一、什么是集合1.1 创建集合的方式1.2 集合的增删改查操作1.2.1 集合的元素删除操作1.2.2 集合的元素修改操作 1.3 集合中运算符的使用 一、什么是集合 集合&#xff1a; 用来存储数据&#xff0c;和字典一样&#xff0c;都是用 {}表示&#xff0c;只是集合中的数据是…

java中的ThreadLocal

ThreadLocal是线程局部变量&#xff0c;同一份变量在每一个线程中都保存一份副本&#xff0c;彼此线程之间操作互不影响 测试ThreadLocal package com.alibaba.fescar.core.protocol.test;public class TestThreadLocal {private static ThreadLocal<Integer> threadLoc…

泛微开发修炼之旅--17基于Ecology短信平台,实现后端自定义二开短信发送方案及代码示例

文章链接&#xff1a;17基于Ecology短信平台&#xff0c;实现后端自定义二开短信发送方案及代码示例

图像分割——U-Net论文介绍+代码(PyTorch)

0、概要 原理大致介绍了一下&#xff0c;后续会不断精进改的更加详细&#xff0c;然后就是代码可以对自己的数据集进行一个训练&#xff0c;还会不断完善&#xff0c;相应其他代码可以私信我。 一、论文内容总结 摘要&#xff1a;人们普遍认为&#xff0c;深度网络成功需要数…

全面了解三大 AI 绘画:Midjourney、Stable Diffusion、DALL·E 的区别和特点

大家好&#xff0c;我是设计师阿威 在当前&#xff0c;比较流行的 AI 绘画软件主要有三个&#xff0c;分别是&#xff1a;StabilityAI 公司的 Stable Diffusion&#xff0c;OpenAI 公司的 DALLE2&#xff0c;以及更为大众所熟知的&#xff0c;Leap Motion公司创始人 David Hol…

大前端 业务架构 插件库 设计模式 属性 线程

大前端 业务架构 插件库 适配模式之(多态)协议1对多 抽象工厂模式 观察者模式 外观模式 装饰模式之参考catagory 策略模式 属性

单片机建立自己的库文件(4)

文章目录 前言一、新建自己的外设文件夹1.新建外设文件夹&#xff0c;做项目好项目文件管理2.将之前写的.c .h 文件添加到文件夹中 二、在软件中添加项目 .c文件2.1 编译工程保证没问题2. 修改项目列表下的名称 三、在软件项目中添加 .h文件路径四、实际使用测试总结 前言 提示…

性能测试、负载测试、压力测试、稳定性测试简单区分【超详细】

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 性能测试是一个总称&#xff0c;可细分为性能测试、负载测试、压力测试、稳定性测试。 性能测试…

大量用户中招,远控木马已经潜伏各类在线会议平台

从 2023 年 12 月开始&#xff0c;研究人员发现有攻击者创建虚假 Skype、Google Meet 和 Zoom 网站来进行恶意软件传播。攻击者为安卓用户投递 SpyNote 远控木马&#xff0c;为 Windows 用户投递 NjRAT 和 DCRAT 远控木马。 攻击行动概述 攻击者在单个 IP 地址上部署了所有的虚…

LabVIEW电表改装与校准仿真系统

LabVIEW开发的电表改装与校准仿真实验平台不仅简化了传统的物理实验流程&#xff0c;而且通过虚拟仿真提高了实验的效率和安全性。该平台通过模拟电表改装与校准的各个步骤&#xff0c;允许学生在没有实际硬件的情况下完成实验&#xff0c;有效地结合了理论学习和实践操作。 项…

RAG未来的出路

总有人喊RAG已死,至少看目前不现实。 持这个观点的人,大多是Long context派,老实说,这派人绝大多数不甚理解长上下文的技术实现点,就觉得反正context越长,越牛B,有点饭圈化 ,当然我并不否认长上下文对提升理解力的一些帮助,就是没大家想的那么牛B而已(说个数据,达到…

Hazelcast 分布式缓存 在Seatunnel中的使用

1、背景 最近在调研seatunnel的时候&#xff0c;发现新版的seatunnel提供了一个web服务&#xff0c;可以用于图形化的创建数据同步任务&#xff0c;然后管理任务。这里面有个日志模块&#xff0c;可以查看任务的执行状态。其中有个取读数据条数和同步数据条数。很好奇这个数据…