openGauss 统一数据库管理工具:CM支持VIP仲裁
VIP是虚拟IP,随主DN状态进行动态绑定和切换,即如果DN主发生了切换,原主DN上的虚拟IP可能动态绑定到新主DN上,用户可以只通过该IP与数据库连接,不用感知数据库在哪个节点上。
CM支持VIP仲裁
简介: VIP是虚拟IP,随主DN状态进行动态绑定和切换,即如果DN主发生了切换,原主DN上的虚拟IP可能动态绑定到新主DN上,用户可以只通过该IP与数据库连接,不用感知数据库在哪个节点上。
仲裁流程:
原主:
- 在原主上解绑VIP。
- 把VIP从数据库配置项"listen_addresses"中删除
新主:
- 在新主上用别名(网卡名:DN端口号)方式绑定VIP。
- 把VIP添加到数据库配置项 “listen_addresses” 中。
功能开启:在数据库实例节点上每一个cm_agent数据目录下生成cm_resource.json配置文件,文件中包含VIP的json字段,可通过cm_ctl工具命令生成VIP配置文件,参考命令,可以通过•执行res命令:cm_ctl show方法查看VIP信息。
说明: 在选主成功,业务恢复后,5s内VIP可以生效。
约束:
-
不支持沙箱环境。
-
不支持灾备集群。
-
VIP(网卡名:DN端口号)不允许被其他非虚拟IP占用
-
每个节点上cm_resource.json配置文件必须一致。
-
只支持重启方式加载。
-
允许配置多个VIP,但是每个实例最多支持6个。
-
只支持IPV4。
-
需要可用VIP,即需要可对外提供服务的VIP(跟现有网卡处于同一网段中)。
VIP配置操作步骤:
- 数据库集群未安装的场景下配置VIP
- ifconfig提权 修改权限文件/etc/sudoers或执行visudo命令,添加以下内容,为集群用户添加ifconfig权限。
Cmnd_Alias COMMAND_FLAG = /usr/sbin/ifconfig
集群用户名 ALL=(root) NOPASSWD: COMMAND_FLAG
也可以缩小权限范围,例如:
Cmnd_Alias COMMAND_FLAG = /usr/sbin/ifconfig * netmask * up, /usr/sbin/ifconfig * down
集群用户名 ALL=(root) NOPASSWD: COMMAND_FLAG
说明: /usr/sbin/ifconfig表示ifconfig的绝对路径,需要根据实际环境情况修改
警告: 由于需要动态绑定和解绑VIP,需要对网卡进行操作,故而需要对ifconfig进行提权,允许集群用户使用sudo ifconfig方式绑定和解绑VIP,此操作可能带来窃听、篡改、仿冒、拒绝服务等安全风险。提权操作,可参考安全设计->ifconfig 提权步骤
- 安装集群使用的xml文件中配置VIP相关配置项,一个配置示例文件如下
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<CLUSTER>
<PARAM name="clusterName" value="mycluster"/>
<PARAM name="nodeNames" value="node1,node2,node3,node4,node5,node6,node7"/>
<PARAM name="gaussdbAppPath" value="/install_path/app"/>
<PARAM name="gaussdbLogPath" value="/install_path/log"/>
<PARAM name="tmpMppdbPath" value="/install_path/tmp"/>
<PARAM name="gaussdbToolPath" value="/install_path/om"/>
<PARAM name="corePath" value="/install_path/corefile"/>
<PARAM name="backIp1s" value="10.10.10.10,10.10.10.11,10.10.10.12,20.20.20.20,20.20.20.21,30.30.30.30,30.30.30.31"/>
<PARAM name="floatIp1" value="10.10.10.100"/>
<PARAM name="floatIp2" value="20.20.20.100"/>
<PARAM name="floatIp3" value="30.30.30.100"/>
</CLUSTER>
<DEVICELIST>
<DEVICE sn="node1">
<PARAM name="name" value="node1"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="10.10.10.10"/>
<PARAM name="sshIp1" value="10.10.10.10"/>
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="12600"/>
<PARAM name="dataNode1" value="/install_path/data/dn1,node2,/install_path/data/dn1/,node3,/install_path/data/dn1/"/>
<PARAM name="dataNode1_syncNum" value="1"/>
<PARAM name="dataListenIp1" value="10.10.10.10,10.10.10.11,10.10.10.12,20.20.20.20,20.20.20.21,30.30.30.30,30.30.30.31"/>
<PARAM name="floatIpMap1" value="floatIp1,floatIp1,floatIp1,floatIp2,floatIp2,floatIp3,floatIp3"/>
<PARAM name="cmDir" value="/install_path/cm"/>
<PARAM name="cmsNum" value="1"/>
<PARAM name="cmServerPortBase" value="13600"/>
<PARAM name="cmServerlevel" value="1"/>
<PARAM name="cmServerListenIp1" value="10.10.10.10,10.10.10.11,10.10.10.12,20.20.20.20,20.20.20.21,30.30.30.30,30.30.30.31"/>
<PARAM name="cmServerRelation" value="node1,node2,node3,node4,node5,node6,node7"/>
</DEVICE>
<DEVICE sn="node2">
<PARAM name="name" value="node2"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="10.10.10.11"/>
<PARAM name="sshIp1" value="10.10.10.11"/>
<PARAM name="cmDir" value="/install_path/cm"/>
</DEVICE>
<DEVICE sn="node3">
<PARAM name="name" value="node2"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="10.10.10.12"/>
<PARAM name="sshIp1" value="10.10.10.12"/>
<PARAM name="cmDir" value="/install_path/cm"/>
</DEVICE>
<DEVICE sn="node4">
<PARAM name="name" value="node4"/>
<PARAM name="azName" value="AZ2"/>
<PARAM name="azPriority" value="2"/>
<PARAM name="backIp1" value="20.20.20.20"/>
<PARAM name="sshIp1" value="20.20.20.20"/>
<PARAM name="cmDir" value="/install_path/cm"/>
</DEVICE>
<DEVICE sn="node5">
<PARAM name="name" value="node5"/>
<PARAM name="azName" value="AZ2"/>
<PARAM name="azPriority" value="2"/>
<PARAM name="backIp1" value="20.20.20.21"/>
<PARAM name="sshIp1" value="20.20.20.21"/>
<PARAM name="cmDir" value="/install_path/cm"/>
</DEVICE>
<DEVICE sn="node6">
<PARAM name="name" value="node6"/>
<PARAM name="azName" value="AZ3"/>
<PARAM name="azPriority" value="3"/>
<PARAM name="backIp1" value="30.30.30.30"/>
<PARAM name="sshIp1" value="30.30.30.30"/>
<PARAM name="cmDir" value="/install_path/cm"/>
</DEVICE>
<DEVICE sn="node7">
<PARAM name="name" value="node7"/>
<PARAM name="azName" value="AZ3"/>
<PARAM name="azPriority" value="3"/>
<PARAM name="backIp1" value="30.30.30.31"/>
<PARAM name="sshIp1" value="30.30.30.31"/>
<PARAM name="cmDir" value="/install_path/cm"/>
</DEVICE>
</DEVICELIST>
</ROOT>
该示例为一个两地三中心(3az,3+2+2)的配置文件示例 其中与VIP功能相关的几个重点配置项为
<PARAM name="floatIp1" value="10.10.10.100"/>
<PARAM name="floatIp2" value="20.20.20.100"/>
<PARAM name="floatIp3" value="30.30.30.100"/>
<PARAM name="dataListenIp1" value="(10.10.10.10),(10.10.10.11),(10.10.10.12),(20.20.20.20),(20.20.20.21),(30.30.30.30),(30.30.30.31)"/>
<PARAM name="floatIpMap1" value="(floatIp1),(floatIp1),(floatIp1),(floatIp2),(floatIp2),(floatIp3),(floatIp3)"/>
floatIp1、floatIp2、floatIp3为各节点或各az对应的VIP地址,用户需要保证VIP地址为可用VIP,即需要可对外提供服务的VIP(跟现有网卡处于同一网段中)
dataListenIp1为各节点监听ip,该选项可以不配置,若不配置,则默认使用backIp1s的值
floatIpMap1表示floatIp与dataListenIp的对应关系,其顺序与dataListenIp1的顺序要相互对应
- 使用xml进行安装
安装成功后VIP便会自动绑定到对应的主机上,可以使用cm_ctl show命令查看VIP状态
- 带CM的数据库集群已安装的场景下配置VIP
-
ifconfig提权
-
配置自定义资源文件cm_resource.json
通过cm_ctl res命令新增floatIp资源,仍以上述的xml中的节点情况为例
# 新增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=10.10.10.100"
cm_ctl res --add --res_name="VIP_az2" --res_attr="resources_type=VIP,float_ip=20.20.20.100"
cm_ctl res --add --res_name="VIP_az3" --res_attr="resources_type=VIP,float_ip=30.30.30.100"
# 编辑各自定义VIP资源VIP_az1、VIP_az2、VIP_az3,添加节点,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=10.10.10.10"
cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=2,res_instance_id=6002" --inst_attr="base_ip=10.10.10.11"
cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=3,res_instance_id=6003" --inst_attr="base_ip=10.10.10.12"
cm_ctl res --edit --res_name="VIP_az2" --add_inst="node_id=4,res_instance_id=6004" --inst_attr="base_ip=20.20.20.20"
cm_ctl res --edit --res_name="VIP_az2" --add_inst="node_id=5,res_instance_id=6005" --inst_attr="base_ip=20.20.20.21"
cm_ctl res --edit --res_name="VIP_az3" --add_inst="node_id=6,res_instance_id=6006" --inst_attr="base_ip=30.30.30.30"
cm_ctl res --edit --res_name="VIP_az3" --add_inst="node_id=7,res_instance_id=6007" --inst_attr="base_ip=30.30.30.31"
执行完成后,建议使用cm_ctl res --check命令进行检查。自定义资源文件要求每个节点都要有且一致,检查完成没有错误后,需要手动将该文件分发到其他节点,分发完成后需要重启集群才能生效。该配置文件对格式要求比较严格,所以该操作不建议使用直接修改文件的方式配置,建议配置后使用cm_ctl res --check命令进行校验。
执行完成后,在cmdataPath/cm_agent/目录下会生成一个自定义资源配置文件cm_resource.json,示例如下:
{
"resources":
[{"name": "VIP_az1",
"resources_type": "VIP",
"instances":
[{"node_id": 1,
"res_instance_id": 6001,
"inst_attr": "base_ip=10.10.10.10"
},
{"node_id": 2,
"res_instance_id": 6002,
"inst_attr": "base_ip=10.10.10.11"
},
{"node_id": 3,
"res_instance_id": 6003,
"inst_attr": "base_ip=10.10.10.12"
}],
"float_ip": "10.10.10.100"
},
{
"name": "VIP_az2",
"resources_type": "VIP",
"instances":
[{"node_id": 4,
"res_instance_id": 6004,
"inst_attr": "base_ip=20.20.20.20"
},
{"node_id": 5,
"res_instance_id": 6005,
"inst_attr": "base_ip=20.20.20.21"
}],
"float_ip": "20.20.20.100"
},
{
"name": "VIP_az3",
"resources_type": "VIP",
"instances":
[{"node_id": 6,
"res_instance_id": 6006,
"inst_attr": "base_ip=30.30.30.30"
},
{"node_id": 7,
"res_instance_id": 6007,
"inst_attr": "base_ip=30.30.30.31"
}],
"float_ip": "30.30.30.100"
}]
}
- 在数据库pg_hba.conf文件中以sha256方式添加floatIp
说明: 对于多中心集群,如果没有额外的硬件网络设施支持,一个VIP无法同时服务于多个中心,所以需要为每个中心或az配置一个VIP。
模式:
- CM支持的DN仲裁模式主要分为:
-
Quorum 模式:基于多数派模式仲裁,选出同步备
- 简介:CM 基于Quorum模式进行仲裁,当DN分片处于无主场景时,CM在多数派DN redo完成后,选择 term和lsn最大的节点(同步备)发送failover升主。
- 约束:最小满足一主两备集群
-
DCF 模式:
-
自动选主模式:基于paxos 协议:
- 简介:dcf模式自动选主,在此场景下,CM不再进行对DN选主,只负责数据采集,假死检测等。
- 约束:switchover只能使用cm_ctl switchover -n NODEID -D DATADIR
- CM配置:enable_dcf=ON、dn_arbitrate_mode=paxos
- DN配置:enable_dcf=ON
-
总体约束:
- 最小满足一主两备集群
-
默认安装:DCF自动选主模式
-
-
资源池化模式:
- 简介:在此场景下,CM不再进行对DN选主,只负责数据采集,假死检测等。
- CM配置:dn_arbitrate_mode=share_disk
- 介绍和约束:参考资源池化。
-
更多推荐
所有评论(0)