GreatSQL社区

搜索

[已解决] MGR的HA插件是否不支持光口

329 11 2024-8-29 11:41
环境:test

版本:8.0.32-26
服务器类型以及配置:物理服务器  万兆网卡光口  98C251G

测试方法:在光口上配置vip 然后集群搭建完成之后进行切换

现象:

光口测试(bonding 和 单光口 分别测试现象一致):
1、当第一个引导节点初始时候  跨网段服务器可以ping通对应的rw_vip 和ro_vip
2、当第二个节点加入之后 ,ro_vip漂移到第二个节点 ,跨网段的服务器 此时无法ping通ro_vip
3、第三个节点正常初始化

通过tcpdump抓包并没有发现arp相关信息包


电口测试:
1、当第一个引导节点初始时候  跨网段服务器可以ping通对应的rw_vip 和ro_vip
2、当第二个节点加入之后 ,ro_vip漂移到第二个节点 ,跨网段的服务器 此时可以ping通ro_vip
3、第三个节点正常初始化


通过tcpdump 抓包发现有一个 arp的包发出

全部回复(11)
yejr 2024-8-29 12:20:32
操作系统版本,内核版本,以及 greatdb_ha 相关配置也请提供下
mabai 2024-8-29 16:19:27
yejr 发表于 2024-8-29 12:20
操作系统版本,内核版本,以及 greatdb_ha 相关配置也请提供下

操作系统 :centos 7.x
内核版本:3.10
ha配置如下:
#mgr settings
loose-plugin_load_add = 'mysql_clone.so'
loose-plugin_load_add = 'group_replication.so'
loose-group_replication_group_name = "550e8400-e29b-11d4-a716-446655440000"
loose-group_replication_local_address = "172.16.179.20:33061"
loose-group_replication_group_seeds = "172.16.179.20:33061,172.16.179.21:33061,172.16.179.22:33061"
loose-group_replication_start_on_boot = OFF
loose-group_replication_bootstrap_group = OFF
loose-group_replication_exit_state_action = READ_ONLY
loose-group_replication_flow_control_mode = "DISABLED"
loose-group_replication_single_primary_mode = ON
loose-group_replication_majority_after_mode = ON
loose-group_replication_communication_max_message_size = 10M
loose-group_replication_arbitrator = 0
loose-group_replication_single_primary_fast_mode = 1
loose-group_replication_request_time_threshold = 100
loose-group_replication_primary_election_mode = GTID_FIRST
loose-group_replication_unreachable_majority_timeout = 0
loose-group_replication_member_expel_timeout = 5
loose-group_replication_autorejoin_tries = 288
loose-group_replication_consistency="BEFORE_ON_PRIMARY_FAILOVER"

#mgr vip
loose-plugin_load_add = 'greatdb_ha.so'
loose-greatdb_ha_enable_mgr_vip = 1
loose-greatdb_ha_mgr_vip_nic = 'em1'
loose-greatdb_ha_mgr_vip_ip = '172.16.176.240'
loose-greatdb_ha_mgr_vip_mask = '255.255.255.0'
loose-greatdb_ha_port = 33062
loose-greatdb_ha_mgr_read_vip_ips = "172.16.176.241"
loose-greatdb_ha_mgr_read_vip_floating_type = "TO_ANOTHER_SECONDARY"
loose-group_replication_enforce_update_everywhere_checks=0
loose-greatdb_ha_send_arp_packge_times = 5
report_host = 172.16.179.20
report_port = 3306
bind_address="0.0.0.0"
mabai 2024-9-3 11:39:40
yejr 发表于 2024-8-29 12:20
操作系统版本,内核版本,以及 greatdb_ha 相关配置也请提供下

测试结果如下
测试场景预期是否达到预期greatsql是否有发arp广播tcpdump是否抓到包
光口bondvip跨网段能ping通
光口物理口vip跨网段能ping通
电口bondvip跨网段能ping通
电口物理口vip跨网段能ping通


zhaigq 2024-12-9 10:49:35
本帖最后由 zhaigq 于 2024-12-10 14:21 编辑

目前尝试使用 光口服务器 进行了复现和分析,发现存在两个问题:
1、之前的VIP代码,没有手动指定网卡,所以默认使用第一张网卡发送数据。如果第一张网卡没有配置IP,sendto函数会返回成功,但是数据包其实并没有发出
2、调用sendto函数的时候,没有显式指定数据包flag位为0x0806(arp),导致tcpdump使用arp过滤不到
这个数据包附件中添加了demo代码文件,可以用g++编译后测试是否解决了这两个问题

send_arp.tar.gz

1.54 KB, 下载次数: 2, 下载积分: 金币 -1

mabai 2024-12-9 14:33:47
zhaigq 发表于 2024-12-9 10:49
目前尝试使用 光口服务器 进行了复现和分析,发现存在两个问题:
1、之前的VIP代码,没有手动指定网卡, ...

对于多网卡来说,因为在配置文件中会配置对应的网卡信息,所以建议通过配置文件获取vip网卡的配置应该会好一点
zhaigq 2024-12-10 13:55:29
本帖最后由 zhaigq 于 2024-12-10 14:22 编辑
mabai 发表于 2024-12-9 14:33
对于多网卡来说,因为在配置文件中会配置对应的网卡信息,所以建议通过配置文件获取vip网卡的配置应该会 ...

新修改的代码会通过greatdb_ha_mgr_vip_nic的参数设置来指定网卡,具体的逻辑在那个demo中有体现。
因为不能完全确定复现的问题是否跟你那边的一致,可以运行试一下,能否可以正常发送arp广播包格式是./send_arp 192.168.1.10 eth0
其中192.168.1.10是你要广播的IP地址,eth0是IP所在的网卡

mabai 2024-12-10 16:30:14
zhaigq 发表于 2024-12-10 13:55
新修改的代码会通过greatdb_ha_mgr_vip_nic的参数设置来指定网卡,具体的逻辑在那个demo中有体现。
因为不 ...

我这边编译直接报错:
send_arp.cc: 在函数‘bool get_mac_and_index(int, unsigned char*, int&)’中:
send_arp.cc:52:58: 错误:‘errno’在此作用域中尚未声明
     printf("Get mac SIOCGIFINDEX failed. %s\n", strerror(errno));
                                                          ^
send_arp.cc:58:59: 错误:‘errno’在此作用域中尚未声明
     printf("Get mac SIOCGIFHWADDR failed. %s\n", strerror(errno));
                                                           ^
send_arp.cc:67:58: 错误:‘errno’在此作用域中尚未声明
     printf("Set mac SO_BROADCAST failed. %s\n", strerror(errno));
                                                          ^
send_arp.cc: 在函数‘int send_arp(const char*)’中:
send_arp.cc:112:44: 错误:‘errno’在此作用域中尚未声明
       printf("send failed: %s\n", strerror(errno));
                                            ^

zhaigq 2024-12-11 15:43:30
mabai 发表于 2024-12-10 16:30
我这边编译直接报错:
send_arp.cc: 在函数‘bool get_mac_and_index(int, unsigned char*, int&)’中:
s ...

前面增加个#include <errno.h>试下
mabai 2024-12-16 14:59:19
zhaigq 发表于 2024-12-11 15:43
前面增加个#include 试下

我这边显示 成功
[root@zhzc-node1 ~]# ./sendarp 172.16.176.1 bond1
send success.
send success.
send success.
12下一页
mabai

15

主题

0

博客

91

贡献

版主

Rank: 7Rank: 7Rank: 7

金币
2878
贡献
91

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-12-26 20:40 , Processed in 0.033096 second(s), 23 queries , Redis On.
快速回复 返回顶部 返回列表