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

磐维数据库panweidb集中式集群配置VIP【添加、删除和修改】

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.dtcms.com/a/272876.html

相关文章:

  • Chromium 引擎启用 Skia Graphite后性能飙升
  • websocket的客户端(发送接收json的消息)
  • vue3 td 标签优化时间显示
  • 穿梭时空的智慧向导:Deepoc具身智能如何赋予导览机器人“人情味”
  • 如何自动计算照片中光伏板数量:基于开源项目的自动识别光伏板计数解决方案
  • C++初阶-仿函数
  • 利萨如图形详解:原理与Python动态绘制
  • 数据库常见元数据表
  • .NET Framework 安装失败及异常情况 常用处理方法
  • 【前端】【Echarts】【Liquidfill 水球图】深入理解 ECharts Liquidfill 水球图:从入门到进阶
  • 解决飞牛 NAS 安装 OpenResty时的端口被占用问题!(如何解决飞牛Nas 80 443 端口被占用的问题)
  • C++ 模板参数展开
  • AI测试革命:从智能缺陷检测到自愈式测试框架的工业实践
  • 谷粒商城高级篇
  • 用GNU Radio生成Frank信号
  • Redisson 的分布式锁
  • 动态物体滤除算法
  • 全连接神经网络
  • AI教学设计助手:生成好教案的Prompt技术实战(二)
  • Java中实现线程安全的几种方式
  • 我做了一个在线工具导航网站!
  • Apache
  • 一招解决Win11桌面右键刷新BUG问题!
  • 高通跃龙IoT-IQ系列芯片深度解析:定位、特性与应用全景
  • 智能音视频-搭建可视化智能体
  • 机器学10——集成学习
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十七天
  • 汽车功能安全-软件集成和验证(Software Integration Verification)【目的、验证输入、集成验证要求】9
  • Synopsys 逻辑综合之 MultiBit Flip-Flop 与 ICG
  • 【TCP/IP】9. 域名系统(DNS)