0 说明

panweidb集中式集群为了防止主备切换后应用连接无法切换到新主库,需要配置vip,应用可以只通过该ip与数据库连接,不用感知数据库在哪个节点上。

panweidb中配置 VIP主要依赖 CM 组件的 VIP 仲裁功能,通过回调脚本在主备切换时自动完成 VIP 的漂移。当 cm_agent 监测到本地数据库由备升主后,可执行回调脚本或配置参数将 VIP 绑定到本节点;当本地数据库由主降备后,则自动解除该 VIP 的绑定。

注意:

  • 要安装有net-tools依赖包,并为集群用户添加ifconfig权限。
  • VIP(网卡名:DN端口号)不允许被其他非虚拟IP占用
  • 每个节点上cm_resource.json配置文件必须一致。
  • 只支持重启方式加载。
  • 允许配置多个VIP,但是每个实例最多支持6个。
  • 只支持IPV4。

维集中书集群配置vip的总体流程如下:

在这里插入图片描述

1 权限配置

ifconfig提权,修改权限文件/etc/sudoers或执行visudo命令,添加以下内容,为集群用户添加ifconfig权限。

root 用户执行:

# 安装网络工具包
yum install -y net-tools# 编辑/etc/sudoers文件
visudo
在文件中找到 root ALL=(ALL) ALL,在该行下方添加以下内容:
omm ALL=(ALL:ALL) NOPASSWD:/sbin/ip,/usr/sbin/arping,/sbin/iptables,/sbin/ifconfig# 赋予各命令执行权限
chmod u+s /usr/bin/sudo
chmod +x /usr/sbin/ip
chmod +x /usr/sbin/arping
chmod +x /usr/sbin/iptables
chmod +x /usr/sbin/ifconfig

2 添加VIP

有三种方式添加VIP:

  1. 集群安装前配置(推荐)
  2. 回调脚本绑定
  3. CM工具配置

2.1 集群安装前配置

这是在数据库集群未安装的场景下配置VIP,通过 cluster_config.xml配置文件指定 VIP 地址。

关注cluster_config.xml文件中的以下参数:

配置项说明
floatIp虚拟 IP 地址
dataListenIp可选参数,各节点监听 IP,若不配置,则默认使用 backIp1s的值
floatIpMap可选参数,配置 VIP 时需要配置,表示 floatIp 与 dataListenIp 的对应关系,其顺序与 dataListenIp1 的顺序要相互对应

XML示例如下:

正常成功安装好集群后,vip会自动配置好:

2.2 回调脚本绑定

确认网卡信息:

使用数据库安装用户omm,在集群内所有节点的 cm_agent 的配置文件目录下创建 VIP 绑定功能的回调 shell 脚本 cm_callback.sh 文件。

su - omm
cd /database/panweidb/cm/cm_agent
vi cm_callback.sh

添加以下内容,注意根据实际情况调整要绑定的 VIP 网卡名称、广播地址、掩码等参数值:

#!/bin/bash
# -------------------------------------------------------------------------------
# Filename:    cm_callback.sh
# Revision:    1.0
# Date:        2019/10/09
# Description: 
# Notes:       
#      callback 仅实现vip 的 添加和移除        
#              
# -------------------------------------------------------------------------------
# 
# -------------------------------------------------------------------------------readonly cb_name=$1
readonly role=$2
readonly scope=$3VIP=192.168.131.18  # vip 地址
VIPBRD=192.168.131.255 # 广播地址
VIPNETMASKBIT=24   # 掩码
VIPDEV=ens33     # 网络接口名称,vip会绑定到该接口
VIPLABEL=1   # 接口标签,默认为1PING_TIMEOUT=2 # 设置为不高于panweidb.yml配置文件里loop_wait的40%,如果loop_wait设置为10,PING_TIMEOUT建议设置为3,如果loop_wait设置为5,建议设置为2function usage() {echo "Usage: $0 <on_start|on_stop|on_role_change> <role> <scope>";exit 1;
}function addvip(){echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` INFO: /sbin/ip addr add ${VIP}/${VIPNETMASKBIT} brd ${VIPBRD} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}"sudo /sbin/ip addr add ${VIP}/${VIPNETMASKBIT} brd ${VIPBRD} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}sudo /usr/sbin/arping -q -A -c 1 -I ${VIPDEV} ${VIP}#sudo /sbin/iptables -F}function delvip(){echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` INFO: sudo /sbin/ip addr del ${VIP}/${VIPNETMASKBIT} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}"sudo /sbin/ip addr del ${VIP}/${VIPNETMASKBIT} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}#sudo /usr/sbin/arping -q -A -c 1 -I ${VIPDEV} ${VIP}#sudo /sbin/iptables -F}#if [[ $cb_name != "on_master_check"  ]]; then
#    echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` WARNING: has callback $cb_name $role $scope"
#ficase $cb_name inon_stop)delvip;;on_start)
if [[ $role == "master" ]]; thenaddvip
fi;;on_role_change)if [[ $role == "master" ]]; thenaddvipelif [[ $role == "slave" ]]||[[ $role == "replica" ]]||[[ $role == "logical" ]]; thendelvipfi;;on_master_check)if [[ $role == "master" ]]; thenvip_status=`/sbin/ip addr|grep ${VIP}`if [[ ${vip_status} == "" ]]; thenecho "`date +%Y-%m-%d\ %H:%M:%S,%3N` WARNING: has callback $cb_name $role $scope"echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` WARNING: The vip was lost,bind vip because i am leader"/usr/bin/ping -I ${VIPDEV} -q -c 3 -W ${PING_TIMEOUT} ${VIP}is_vip_used=$?if [[ $is_vip_used -eq 0 ]]; thenecho "`date +%Y-%m-%d\ %H:%M:%S,%3N` WARNING: The vip bind failed, ${VIP} is in use"elseaddvipfififi;; on_slave_check)if [[ $role == "slave" ]]; thenvip_status=`/sbin/ip addr|grep ${VIP}`if [[ ${vip_status} != "" ]]; thendelvipfifi;;  *)usage;;
esac

给脚本文件赋执行权限,用于在本节点数据库主备角色发生变化时,自动由集群管理服务执行绑定和释放 VIP 的操作:

chmod u+x cm_callback.sh

接下来,修改集群中每个节点的 cm_agent 配置文件cm_agent.conf 中的 callback_bin_path 参数,将cm_callback.sh脚本路径写入到CM配置文件中。

omm用户执行,切换至数据库安装目录,执行如下命令:

cd /database/panwei/cm/cm_agentvi cm_agent.conf
修改内容:
callback_bin_path = /database/panwei/cm/cm_agent/cm_callback.shvi $GAUSSHOME/bin/alarmConfig.conf
修改内容:
callback_bin_path = /database/panwei/cm/cm_agent/cm_callback.sh

使用数据库安装用户 omm 用户重启集群使 VIP 功能的配置生效:

cm_ctl stop
cm_ctl start

查看vip:

主库在结点3.

在主库查看IP:

2.3 CM工具配置

这个方式主要是带CM的数据库集群已安装的场景下配置VIP,通过cm_ctl res命令新增floatIp资源。

在每个节点上用数据库安装用户执行以下命令:

# 新增VIP资源,res_name为资源名称,资源类型resources_type必须指定为VIP,float_ip表示该自定义VIP资源的虚拟ip
cm_ctl res --add --res_name="VIP_az1" --res_attr="resources_type=VIP,float_ip=192.168.131.18"# 编辑各自定义VIP资源VIP_az1,添加节点,node_id表示对应的节点id,res_instance_id用于告知CM绑定的DN实例id,需要与对应的DN实例id对应
cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=1,res_instance_id=6001" --inst_attr="base_ip=192.168.131.14"
cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=2,res_instance_id=6002" --inst_attr="base_ip=192.168.131.15"
cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=3,res_instance_id=6003" --inst_attr="base_ip=192.168.131.16"# 使用cm_ctl res --check命令进行检查
cm_ctl res --check

执行完成后,在/database/panweidb/cm/cm_agent/目录下会生成一个自定义资源配置文件cm_resource.json,示例如下:

{"resources":    [{"name": "VIP_az1","resources_type":       "VIP","instances":    [{"node_id":      1,"res_instance_id":      6001,"inst_attr":    "base_ip=192.168.131.14"}, {"node_id":      2,"res_instance_id":      6002,"inst_attr":    "base_ip=192.168.131.15"}, {"node_id":      3,"res_instance_id":      6003,"inst_attr":    "base_ip=192.168.131.16"}],"float_ip":     "192.168.131.18"}]

使用数据库安装用户 omm 用户重启集群使 VIP 功能的配置生效:

cm_ctl stop
cm_ctl start

3 修改

需要先删除再添加,直接使用edit命令不生效。

在每个数据库节点,使用数据库管理用户执行,删除VIP资源:

cm_ctl res --del --res_name="VIP_az1"

新增VIP资源,res_name为资源名称,资源类型resources_type必须指定为VIP,float_ip表示该自定义VIP资源的虚拟ip:

cm_ctl res --add --res_name="VIP_az1" --res_attr="resources_type=VIP,float_ip=192.168.131.18"

编辑各自定义VIP资源VIP_az1,添加节点,node_id表示对应的节点id,res_instance_id用于告知CM绑定的DN实例id,需要与对应的DN实例id对应:

cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=1,res_instance_id=6001" --inst_attr="base_ip=192.168.131.14"
cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=2,res_instance_id=6002" --inst_attr="base_ip=192.168.131.15"
cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=3,res_instance_id=6003" --inst_attr="base_ip=192.168.131.16"

使用cm_ctl res --check命令进行检查:

cm_ctl res --check

check后检查自定义资源配置文件cm_resource.json是否有配置了。

配置无误后重启集群生效。

cm_ctl stop
cm_ctl start

4 删除

删除vip的场景应该不多,除非是配置的VIP与其他IP冲突了。

在每个节点上用数据库安装用户执行以下命令:

cm_ctl res --del --res_name="VIP_az1"
cm_ctl res --check

删除后查看资源提示null:

并且自定义资源配置文件cm_resource.json是空的:

依旧是重启生效。

5 总结

通过以上配置,磐维数据库集中式集群能够实现 VIP 的自动漂移,保障数据库高可用性,简化应用连接管理,提升系统稳定性与可靠性。

此外,对于多中心集群,如果没有额外的硬件网络设施支持,一个VIP无法同时服务于多个中心,所以需要为每个中心或az配置一个VIP。

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

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

相关文章

python的保险业务管理与数据分析系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具&#xff1a;Navicat/SQLyog等都可以 保险行业…

R语言如何接入实时行情接口

目录 1. 安装必要的R包 2. 导入库 3. 连接WebSocket 4. 处理连接成功后的操作 5. 处理接收到的消息 6. 处理连接关闭和错误 7. 发送心跳数据 8. 自动重连机制 9. 启动连接和重连 总结 在数据分析和金融研究中&#xff0c;实时行情数据的获取至关重要&#xff0c;但市…

Redis数据安全性分析

Redis高可用与数据安全机制深度解析前置知识&#xff1a;Redis基础安装与使用&#xff08;主从复制、哨兵集群、Cluster集群搭建&#xff09;一、Redis性能压测工具 工具名称&#xff1a;redis-benchmark核心作用&#xff1a;快速基准测试Redis性能使用场景&#xff1a;评估不同…

差分和前缀和

差分和前缀和的原理、用法和区别。前缀和&#xff08;Prefix Sum&#xff09;核心思想&#xff1a;预处理数组的前缀和&#xff0c;快速回答「区间和查询」 适用场景&#xff1a;数组静态&#xff08;更新少、查询多&#xff09;&#xff0c;需要频繁计算任意区间的和1. 定义与…

C++并发编程-12. 用内存顺序实现内存模型

前情回顾 前文我们介绍了六种内存顺序&#xff0c;以及三种内存模型&#xff0c;本文通过代码示例讲解六种内存顺序使用方法&#xff0c;并实现相应的内存模型。全局一致性模型同步模型(获取和释放)松散模型memory_order_seq_cst memory_order_seq_cst代表全局一致性顺序&#…

AI测试革命:从智能缺陷检测到自愈式测试框架的工业实践

AI测试革命&#xff1a;从智能缺陷检测到自愈式测试框架的工业实践 希望对大家有用&#xff01; 目录AI测试革命&#xff1a;从智能缺陷检测到自愈式测试框架的工业实践希望对大家有用&#xff01;一、传统测试之殇&#xff1a;工业质检的切肤之痛二、智能缺陷检测系统架构1. …

二、深度学习——损失函数

二、损失函数损失函数定义&#xff1a;损失函数是用来衡量模型参数的质量的函数&#xff0c;衡量方式是比较网络输出和真实输出的差异别名&#xff1a;损失函数&#xff08;loss function&#xff09;&#xff0c;代价函数&#xff08;cost function&#xff09;&#xff0c;目…

面向数据报的套接字通道技术详解

数据报通道基础 通道特性与创建方式 java.nio.channels.DatagramChannel类实例代表数据报通道&#xff0c;默认处于阻塞模式。通过configureBlocking(false)方法可将其配置为非阻塞模式。创建数据报通道需调用其静态open()方法&#xff0c;若用于IP组播则需指定组播组的地址类型…

147.在 Vue3 中使用 OpenLayers 地图上 ECharts 模拟飞机循环飞行

&#x1f9e9; 效果预览 &#x1f447; 飞机从多个城市起飞并向其他城市飞行&#xff0c;动画流畅&#xff0c;地图可缩放拖拽&#xff1a; &#x1f4e6; 一、项目技术栈 技术用途Vue 3现代前端框架OpenLayers地图底图渲染ECharts ol-echarts飞机飞行动画渲染ol-echarts将 …

OCR与PDF解析的区别

我们日常所接触的文档中&#xff0c;经常能碰到多语言混合的文档。比如论文试卷、财报研报、跨国票据都含有多种语言和文字。要将文档中的内容识别并提取务必需要使用到OCR技术&#xff0c;而传统的OCR工具在处理这类型文档的时候有局限性。早期的 OCR 系统识别精度有限&#x…

Java 单例类详解:从基础到高级,掌握线程安全与高效设计

作为一名Java开发工程师&#xff0c;你一定对**单例模式&#xff08;Singleton Pattern&#xff09;**不陌生。它是23种经典设计模式中最简单也是最常用的一种&#xff0c;用于确保一个类在整个应用程序中只有一个实例存在。单例广泛应用于系统配置、数据库连接池、日志管理器、…

面向对象设计

你列出的这些属于 C 高级开发中面向对象设计与架构设计的核心知识&#xff0c;也是面试高级工程师岗位必问的内容。下面我按顺序&#xff0c;深入讲解每一项概念、原理、用途&#xff0c;并穿插 C 示例。✅ 1. 设计原则&#xff08;SOLID&#xff09;SOLID 是面向对象设计的五大…

IntelliJ IDEA让我的开发效率翻倍:从新手到高效开发者的进阶之路

IntelliJ IDEA让我的开发效率翻倍&#xff1a;从新手到高效开发者的进阶之路 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用…

css sprites使用

CSS Sprites 是一种将多个小图标或背景图像合并到一个大图中的技术。通过减少HTTP请求次数&#xff0c;可以显著提高页面加载速度。其核心原理是&#xff1a;通过设置元素的背景图&#xff08;background-image&#xff09;为这个大图&#xff0c;然后调整背景位置&#xff08;…

分布式爬虫在电商平台商品数据大规模采集中的技术应用

在电商平台商品数据大规模采集场景中&#xff0c;分布式爬虫凭借其高效、可扩展、抗风险的特性&#xff0c;成为突破单节点爬虫性能瓶颈的核心技术方案。以下从技术架构、关键技术点、电商场景适配及挑战应对四个维度&#xff0c;解析其具体应用&#xff1a;一、分布式爬虫的核…

Linux的`if test`和`if [ ]中括号`的取反语法比较 笔记250709

Linux的if test和if 中括号的取反语法比较 笔记250709 Linux的 test命令&#xff08;或等价中括号写法 [空格expression空格]&#xff09;的用法详解. 笔记250709 四种取反语法: if ! test -e xxx ;then... 和 if test ! -e xxx ;then... 和 if ! [ -e xxx ] ;then... 和 if …

记录使用ubuntu16.04编译aosp(android8.1与10)遇到的问题

一、前言&#xff1a; 本来打算用wsl来编译AOSP&#xff0c;但是折腾了好几天&#xff0c;以失败告终。后来使用vmware反而成功了。 本篇同样会把wsl遇到的问题与尝试记录下来。 环境&#xff1a;vmware ubuntu16.04。 为什么会使用ubuntu16.04呢&#xff0c;因为在公司有一…

hiredis window之RFDMap

简介 RFDMap用于将socket分配映射成连续的文件描述符&#xff0c;同时管理回收的文件描述符&#xff0c;因为ae构架中管理fd与对应事件处理器使用的是数据&#xff0c;fd作为数组下标 结构 #mermaid-svg-zQz2LTrKRi0LQTII {font-family:"trebuchet ms",verdana,arial…

RustFS一款Rust 驱动的 高性能 分布式存储系统

演示地址&#xff1a;https://play.rustfs.com/browser 访问账号&#xff08;默认 rustfsadmin&#xff09;。 访问密钥&#xff08;默认 rustfsadmin&#xff09;。 下载mc https://dl.min.io/client/mc/release可以直接在 Linux 系统上安装 mc&#xff08;&#xff0c;然后访…

微软 Bluetooth LE Explorer 实用工具的详细使用分析

微软 Bluetooth LE Explorer 实用工具的详细使用分析 文章目录 微软 **Bluetooth LE Explorer** 实用工具的详细使用分析1. **工具定位与核心功能**2. **关键特性与更新**3. **使用场景示例**4. **系统要求与依赖**5. **与专业工具对比**6. **局限性**7. **实践建议**结论以下是…