文档中心MogDBMogDB StackUqbar
v5.0

文档:v5.0

支持的版本:

其他版本:

CM手动配置VIP

目标

本文讲解如何基于已经安装部署成功的带有CM集群管理软件的数据库集群手动配置/启用VIP功能。

img 说明:

MogDB 5.0.4及以上版本支持通过PTK(V1.2.0+)自动挂载VIP,具体操作参见PTK文档

此外,本文示例集群为单AZ一主两备集群。

img

VIP配置操作步骤

1. 安装ifconfig

CM集群管理软件依赖ifconfig命令,因此数据库集群的每个服务器节点均需正确安装ifconfig。

您可以参照下列命令安装ifconfig。

# CentOS/RHEL系统
sudo yum install net-tools

# Debian/Ubuntu系统
sudo apt-get update
sudo apt-get install net-tools

安装完成后,在服务器shell输入ifconfig命令会输出本机的网络信息。

img

2. ifconfig提权

在集群每个节点修改文件/etc/sudoers,增加如下内容,为集群用户添加ifconfig权限。

echo "Cmnd_Alias COMMAND_FLAG = /usr/sbin/ifconfig * netmask * up, /usr/sbin/ifconfig * down" >> /etc/sudoers
echo "集群用户名 ALL=(root) NOPASSWD: COMMAND_FLAG" >> /etc/sudoers

需要注意的是,由于需要动态绑定和解绑VIP,需要对网卡进行操作,因而需要对ifconfig进行提权,以允许集群用户能够使用sudo ifconfig方式绑定和解绑VIP。此操作可能带来窃听/篡改/仿冒/拒绝服务等安全风险,需谨慎使用。

img警告:

以上两条命令在每个节点上均只能执行一次,不能出现两次配置的情况,否则可能会造成sudo ifconfig命令报错。错误示例如下图所示:

img

3. 设置VIP资源文件

在集群任意节点上利用cm_ctl res命令新增floatIp资源(VIP资源),并分发VIP资源到集群其他节点,细节请参考如下两个步骤:

(1) 增加VIP资源

res_name为VIP资源名称,resources_type需指定为VIP,float_ip为VIP资源对应的虚拟IP,具体指令如下:

cm_ctl res --add --res_name="VIP_az" --res_attr="resources_type=VIP, float_ip=<VIP>"

(2) 增加VIP资源与各节点映射

node_id标识节点id,res_instance_id用于告知CM绑定的DN实例id,需要与对应DN实例id吻合。具体指令如下:

cm_ctl res --edit --res_name="VIP_az" --add_inst="node_id=1, res_instance_id=6001" --inst_attr="base_ip=<node1的IP>"
cm_ctl res --edit --res_name="VIP_az" --add_inst="node_id=2, res_instance_id=6002" --inst_attr="base_ip=<node2的IP>"
cm_ctl res --edit --res_name="VIP_az" --add_inst="node_id=3, res_instance_id=6003" --inst_attr="base_ip=<node3的IP>"

上述指令执行成功后,将在cm_agent目录下生成cm_resource.json文件(示例请参见附录)。

建议使用cm_ctl res --check命令进行检查。自定义资源文件要求每个节点都要有且一致,检查完成没有错误后,需要手动将该文件分发到其他节点,分发完成后需要重启集群才能生效。

4. 配置pg_hba.conf文件

任意节点上执行如下指令,在pg_hba.conf文件中以sha256方式添加VIP资源:

gs_guc set -N all -h "host all all <VIP>/32 sha256"

5. 手动挂载VIP到数据库集群主实例

(1) 登录数据库集群主实例创建一个新的用户,用于通过VIP访问数据库集群

create user <VIP用户> with password '<密码>';

(2) 对新增用户授权

GRANT ALL PRIVILEGES TO <VIP用户>;

(3) 创建虚拟网卡并绑定VIP

ifconfig <与VIP同网段的网卡>:<数据库服务端口> <VIP> netmask <子网掩码> up

img

6. 重启集群

VIP资源配置完成后需要重启集群才能使之生效。

cm_ctl stop && cm_ctl start

查询VIP信息

VIP资源生效后,可以使用cm_ctl show指令查询其状态信息。示例如下图:

img

验证VIP可用性

VIP功能配置成功后,可以使用如下gsql指令进行验证:

gsql -U <VIP用户> -W <VIP用户密码> -d postgres -r -p <数据库实例port> -h <VIP>

img

其他流程(可选操作)

若CM集群为两节点部署模式,为了降低数据库集群故障切换误判概率,需要额外执行如下操作对cm_agent.conf配置文件中参数db_service_vip进行赋值:

cm_ctl set --param --agent -k db_service_vip=<VIP>
cm_ctl reload --param --agent

附录

VIP资源文件cm_resource.json示例如下:

{
    "resources":
        [{"name": "VIP_az1",
          "resources_type": "VIP",
          "instances":
              [{"node_id":      1,
                "res_instance_id":      6001,
                "inst_attr":    "base_ip=<node1的IP>"
              },
              {"node_id":      2,
                "res_instance_id":      6002,
                "inst_attr":    "base_ip=<node2的IP>"
              },
              {"node_id":      3,
                "res_instance_id":      6003,
                "inst_attr":    "base_ip=<node3的IP>"
              }],
          "float_ip":     "<VIP>"
        }
}
Copyright © 2011-2024 www.enmotech.com All rights reserved.