云社区 博客 博客详情

GaussDB(DWS)lvs部署指南

召走小子 发表于 2021-02-18 11:45:07 2021-02-18
1
0

【摘要】 介绍了GaussDB(DWS)lvs部署及常见问题处理案例

GaussDB(DWS)lvs部署指南

1      lvs实施方案

1.1      lvs安装前提条件

在安装lvs软件前需仔细核对如下前提条件,确保满足条件才安装:

  • 负载均衡目前支持的操作系统平台为

c80)SUSE Linux Enterprise Server 11 SP1/SP2/PS3/SP4 X86_64、SUSE Linux Enterprise Server 12 SP0/SP1/SP2/SP3 x86_64和Red Hat Enterprise Linux Server release 6.4/6.5/6.6/6.7/6.8/6.9/7.0/7.1/7.2/7.3/7.4 x86_64和CentOS 6.4/6.5/6.6/6.7/6.8/6.9/7.0/7.1/7.2/7.3 x86_64。

6.5.1)SUSE Linux Enterprise Server 11 SP1/SP2/PS3/SP4 X86_64、SUSE Linux Enterprise Server 12 SP0/SP1/SP2/SP3 x86_64和Red Hat Enterprise Linux Server release 6.4/6.5/6.6/6.7/6.8/6.9/7.0/7.1/7.2/7.3/7.4/7.5 x86_64和CentOS 6.4/6.5/6.6/6.7/6.8/6.9/7.0/7.1/7.2/7.3 x86_64、Euleros 2.0 SP0/SP2/SP3/SP8 X86_64。

8.0)SUSE Linux Enterprise Server 11 SP1/SP2/PS3/SP4 X86_64、SUSE Linux Enterprise Server 12 SP0/SP1/SP2/SP3 x86_64和Red Hat Enterprise Linux Server release 6.4/6.5/6.6/6.7/6.8/6.9/7.0/7.1/7.2/7.3/7.4/7.5 x86_64和CentOS 6.4/6.5/6.6/6.7/6.8/6.9/7.0/7.1/7.2/7.3 x86_64、Euleros 2.0 SP0/SP2/SP3/SP8 X86_64。

  • GaussDB A集群使用混合操作系统时,请为LVS主、备选择操作系统一致的服务器。如果操作系统版本号无法完全一致,则请至少保证大版本相同。例如均为Redhat7系列,即0-7.4
  • 负载均衡目前支持使用DR模式,rr算法,并且要求客户端和服务器需要在同一个网段。如果集群中使用虚拟机时,虚拟机网络如果无法使用虚拟IP,则无法使用负载均衡。
  • LVS主备机需要绑定的网卡上不能绑定其他虚拟IP
  • 使用负载均衡时各个CN在各个物理机上需要配置相同的端口号,一台物理机只能配置一个CN
  • 使用负载均衡进行连接时,暂不支持gsql客户端parallel on场景下,使用临时表。不使用负载均衡,则无此限制。
  • LVS服务器工作在内核态,keepalived软件使用API调用LVS内核接口,因此与LVS+Keepalived的设置均需要在root权限下执行。
  • LVS服务器当主机故障时(keepalived软件异常退出、主机宕机、掉电等),备机会自动接管浮动IP,但是当前所有与主机相连的连接会断开,再次发起时可以重新连接。
  • 不能在LVS的主备节点上通过gsql客户端或JDBC/ODBC接口去访问LVS配置的虚拟IP,下发数据库操作。
  • 同一网段中如果有多个集群安装了LVS,修改各集群中主备上/etc/keepalived/keepalived.conf文件中的virtual_router_id(同一集群的主备需要保持一致)为不同值,取值范围为0~255

1.2      操作注意事项

现在大多数网卡都具有LRO(Large Receive Offload)GRO(Generic Receive Offload)功能。即网卡收包时将同一流的小包合并成大包交给内核协议栈来提升接收性能。合并后的大包通常大于最大传输单元MTUMaximum Transmission Unit)。而LVS内核模块在双网卡bond场景下处理>MTU的数据包时,会丢弃。此时,使用LVS来传输大文件,很容易出现丢包,传输速度慢。

因此,当LVS使用的网卡是双网卡bond时,需要关闭客户端、LVS主备节点和CNbond网卡和物理网卡的lrogro gso tso参数,具体如下所示(假设bond网卡名称为bond0,被bond的两个物理网卡是eth1eth2):

查看bond网卡使用的物理网卡:

ifconfig|grep `ifconfig|grep "bond0"|awk '{print $NF}'`|awk '{print $1}'

ethtool -K bond0 lro gro gso tso off

ethtool -K eth1 gro lro gso tso off

ethtool -K eth2 gro lro gso tso off

使用下面命令查看是否关闭:

ethtool -k bond0

ethtool -k eth1

ethtool -k eth2

显示如下信息表示lrogro已关闭。

tcp-segmentation-offload:off

generic-segmentation-offload:off

generic-receive-offload: off

large-receive-offload: off

如果lrogrotsogso不能正常关闭,请联系技术支持工程师提供技术支持。

1.3      安装lvs负载均衡

首先在集群中选择两个数据节点用于安装lvs(例如plat1plat2分别用于安装主备lvs)。然后按如下步骤执行:

  1. 在plat1上执行步骤2到步骤3安装负载均衡主节点,然后在plat2上执行步骤2到步骤3安装负载均衡备节点。然后分别在集群内有CN的主机上执行步骤2到步骤3将LVS虚拟IP地址绑定到各CN主机的lo网卡上。
  2. 以root用户身份登录服务器,执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。
  3. 执行gs_loadbalance安装LVS软件。

gs_loadbalance -t install -U omm -X ${BIGDATA_HOME}/FusionInsight_MPPDB_8.0.0/*_*_MPPDBServer/etc/mppdb-install-config.xml --master=plat1 --standby=plat2 --lvs-addr=10.146.156.101

mppdb-install-config.xml文件路径不同版本不一样,需根据实际版本路径调整。

命令中各参数说明如下:

  • -U:运行集群的操作系统用户名。必选。
  • -X:集群配置文件。必选。
  • --master:安装主LVS的主机名。必选。
  • --standby:安装备LVS的主机名。可选。
  • --lvs-addr:后续供客户端连接的LVS IP地址。必选。需指定为一个未被使用的虚拟IP地址,且此虚拟IP地址必须与业务IP在同一网段。

对于有公网和私网双层网络的集群,推荐优先使用公网IP,如示例中的10.10.0.100。当然,对于不支持公网的集群,此虚拟IP也可以使用私网IP,例如10.146.156.101。

安装LVS时,主LVS上会自动虚拟出该IP。主LVS损坏时,keepalived会自动将IP配置到备LVS上。

在GaussDB A集群各含有CN的主机上执行时,该虚拟IP地址会自动绑定到lo网卡上。

检查安装过程是否成功。

在主备LVS上分别执行如下命令:ipvsadm –Ln

执行上述命令后,如果出现如下屏显信息,则安装成功。

输入命令,查看加载是否成功。

lsmod | grep ip_vs

显示如下信息,则ipvs模块加载成功,LVS软件安装完毕。

1.4      安装效果验证

LVS安装和配置完成后,可以按照如下方法快速验证LVS是否可以客户端连接均衡分发到各CN

1、完成LVS的安装配置后,以root用户分别登录各CN所在主机,输入以下命令,确认CNGT列表是否已包含了LVS的虚拟IP


如上所示,LVS的虚拟IP10.10.0.100”在GT列表中,因此GT正常。如GT列表中没有虚拟IP,则需重新安装负载均衡。

2、查看虚拟IP10.0.100)是否绑定到主LVS上,命令如下:ip addr


如果停止主机上的keepalived软件,则该IP将立刻绑定到备LVS。命令为:cd /etc/init.d sh gs_keepalived stop

3、在客户端反复执行如下命令。执行次数至少为CN总数的2倍。gsql -d postgres -h 10.10.0.100 -p 25308 -U jack -W Gauss_234 -c "select pgxc_node_str();"其中,postgres为需要连接的数据库名称,10.0.100LVS使用的虚拟IP地址,25308CN的端口号,jack为数据库用户,Gauss_234为用户jack连接数据库的密码。请根据实际替换。

4、观察各次执行所返回的CN nodename。如果nodename在不停变化,则表示LVS功能可用。也就是LVS既能成功将对应的连接分发到各CN,又能成功将执行结果返回给客户端。

1.5      增加开机启动项

为防止集群环境在下电上电之后,或者Reboot之后lvs配置被重置,需要将iptables写入开机启动项。

1、SUSE操作系统下按如下命令:

vi /etc/init.d/boot.local

在LVS主节点的文件末尾添加:

iptables -t mangle -I PREROUTING -p tcp -m tcp -d $VIP --dport $VPORT -m mac ! --mac-source $MAC_Director_B -j MARK --set-mark 0x1

在LVS备节点的文件末尾添加:

iptables -t mangle -I PREROUTING -p tcp -m tcp -d $VIP --dport $VPORT -m mac ! --mac-source $MAC_Director_A -j MARK --set-mark 0x1

参数说明:

$VIP:LVS指定的虚拟IP。

$VPORT:CN的端口号。

$MAC_Director_B:表示LVS备机网卡的mac地址。

$MAC_Director_A:表示LVS主机网卡的mac地址。

2、RedHat(CentOS)操作系统按如下命令:

vi /etc/init.d/boot.local

在LVS主节点的文件末尾添加:

iptables -t mangle -I PREROUTING -p tcp -m tcp -d $VIP --dport $VPORT -m mac ! --mac-source $MAC_Director_B -j MARK --set-mark 0x1

在LVS备节点的文件末尾添加:

iptables -t mangle -I PREROUTING -p tcp -m tcp -d $VIP --dport $VPORT -m mac ! --mac-source $MAC_Director_A -j MARK --set-mark 0x1

参数说明:

$VIP:LVS指定的虚拟IP。

$VPORT:CN的端口号。

$MAC_Director_B:表示LVS备机网卡的mac地址。

$MAC_Director_A:表示LVS主机网卡的mac地址。

添加完成后,修改权限:chmod +x /etc/rc.d/rc.local

1.6      更新lvs负载均衡

当集群进行扩容、节点替换(包含CN)、实例修复(包含CN)、增删CN操作后,集群内的CN发生变化时,需要更新负载均衡配置。步骤如下:

1、分别在集群内CN节点和安装LVS服务器上执行步骤2到步骤3更新负载均衡。

2、以root用户身份登录服务器,执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。

3、执行gs_loadbalance更新LVS软件。

gs_loadbalance -t reload -U omm -X ${BIGDATA_HOME}/FusionInsight_MPPDB_8.0.0/*_*_MPPDBServer/etc/mppdb-install-config.xml --lvs-addr=10.146.156.101

命令中各参数说明如下:

-U:运行集群的操作系统用户名。必选。

-X:集群配置文件。必选。

--lvs-addr:后续供客户端连接的LVS IP地址。必选。

4、检查负载均衡是否更新成功,需要在LVS主备上都去做检查。

ipvsadm -Ln

执行上述命令后,如果出现如下屏显信息,则更新成功。

1.7      卸载lvs负载均衡

当用户需要卸载负载均衡软件时或者卸载集群时,需要先执行卸载负载均衡工具的脚本,步骤如下:

  1. 分别在集群内CN节点和安装LVS服务器上执行步骤2到步骤3卸载负载均衡。
  2. 以root用户身份登录服务器,执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。
  3. 执行gs_loadbalance卸载LVS软件。

gs_loadbalance -t uninstall -U omm -X ${BIGDATA_HOME}/FusionInsight_MPPDB_8.0.0/*_*_MPPDBServer/etc/mppdb-install-config.xml

命令中各参数说明如下:

-U:运行集群的操作系统用户名。必选。

-X:集群配置文件。必选。

2      lvs负载均衡问题定位

2.1      常见lvs负载均衡问题

1、安装LVS成功后,客户端通过虚拟IP不能连接CN

  • root用户分别登录主、备LVS服务器。
  • 确认LVS配置文件/etc/keepalived/keepalived.confvirtual_server信息及real_server信息的完整性和正确性。

virtual_server指用户配置的虚拟IP6000CN的端口号,real_serverCNIP,每个CNIP都需要存在于配置文件中。示例如下:


如果CN有使用双网卡,对外提供连接的IP为管理网络IP,对内集群节点间通信使用的业务IP。请确保real_server配置的是管理IP

  • 对于CN双网卡的情况,使用集群安装用户登录各CN,检查CN下的配置文件conf中,listen_addresses是否已完整包含了CN的业务IPCN的管理IPLVS的虚拟IP信息。示例如下:

listen_addresses = 'localhost,10.10.0.13,10.146.156.241,10.146.156.101'

其中10.10.0.13为当前CN的业务IP,10.146.156.241为当前CN的管理IP,10.146.156.101为LVS的虚拟IP,如果所包含信息不全,可根据实际手动修改补齐信息后,执行4~6。

  • 配置文件修改后,需要使用集群用户,执行如下命令重启集群以使新的配置生效。

gs_om -t stop

gs_om -t start

  • 使用root用户,执行如下命令重启LVS服务。

cd /etc/init.d

./gs_keepalived restart

  • 参见4安装效果验证进行LVS效果验证。

2、卸载LVS导致机器重启的问题

suse11系统上卸载LVS导致机器重启的问题,与加载的内核.ko模块有关。

解决办法:

当机器重启后,再次执行卸载LVS命令,可卸载成功。

gs_loadbalance -t uninstall -U omm -X ${BIGDATA_HOME}/FusionInsight_MPPDB_8.0.0/*_*_MPPDBServer/etc/mppdb-install-config.xml

3、检查是否virtual_router_id冲突问题

使用如下命令检查同一网段内virtual_router_id是否冲突:

tcpdump -i any -nn vrrp | grep 'vrid 51'

如果返回有两个或者两个以上不同的ip,说明同一网段还有集群部署LVSLVSvirtual_router_id已经冲突。

通过客户端用虚拟ip连接执行作业,有如下错误:

"SSL SYSCALL errorConnection reset by peer"

检查/var/log/messages文件,找到和keepalived相关的信息,如果一直报如下错误或者有Keepalived刷屏日志:

Keepalived_vrrp[65354]: (VI_1) ip address associated with VRID 51 not present in MASTER advert : 10.185.178.134

Keepalived_vrrp[65354]: (VI_1) ip address associated with VRID 51 not present in MASTER advert : 10.185.178.134

出现上述现象均与virtual_router_id有关。

解决办法:

修改LVS的配置文件/etc/keepalived/keepalived.conf中的virtual_router_id,重新选个与之前不一样的值,取值范围0~255。

4、机器重启导致浮动ip丢失cn启动异常

问题现象:机器或os由于故障或其它原因重启,重新起来后节点上浮动ip丢失,但cn的listen_addres中还在监听浮动ip,导致cn启动异常。

解决方案:参照1.6 更新lvs负载均衡小节,在异常重启节点更新lvs负载均衡配置即可。

 

登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 0
点赞
分享文章到微博
分享文章到朋友圈

上一篇:GaussDB(DWS)JDBC连接报错案例集锦

下一篇:GaussDB(DWS)NTP变更指南

评论 (1)


每天都要有进步

1楼2021-02-22 11:17:54
大佬的博文从头看到尾了,真的很强,赞!

登录后可评论,请 登录注册

评论