暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MGR特性-单主模式支持动态绑定浮动IP

原创 Dbb 2024-01-18
252


在使用Paxos复制的单主模式下,可以配置主数据节点支持启用写VIP特性,写VIP会跟着主节点进行漂移,业务通过写VIP即可访问主节点。也可以通过配置读vip来为secondary节点分配读vip, 业务可以通过读vip来访问secondary节点。目前vip只支持ipv4.

注: vip解绑以后,通过vip与mgr节点建立的连接会被主动kill掉, 但是需要用户添加配置 bind_address="0.0.0.0"。

新增配置参数

  • 开启新插件

    plugin_load_add=greatdb_ha.so
    

    或者在启动数据库实例后, 执行

    install plugin greatdb_ha soname 'greatdb_ha.so';
    
  • 配置开启浮动IP功能

    loose-greatdb_ha_enable_mgr_vip = 1
    
  • 配置写浮动ip,写vip会随着mgr主的切换漂移到新主上

    loose-greatdb_ha_mgr_vip_ip = 192.168.2.125
    
  • 配置ARP包广播重复次数。当节点绑定浮动IP以后,会广播ARP包来更新广播域内的ARP缓存,此参数是广播次数,默认是5次,合法取值范围为3-20。

    loose-greatdb_ha_send_arp_packge_times = 5
    
  • 配置读浮动ip, secondary节点会绑定读ip, 中间以‘,’ 隔开, 几个secondary节点配置几个read_vip

    loose-greatdb_ha_mgr_read_vip_ips = "192.168.2.128,192.168.2.129"
    
  • 配置读ip失效以后的处理方式,分为两个("TO_PRIMARY", "TO_ANOTHER_SECONDARY"):重新绑定到primary上,重新绑定到另外的secondary节点上,默认值是重新绑定到primary上。

    loose-greatdb_ha_mgr_read_vip_floating_type = "TO_ANOTHER_SECONDARY"
    
  • 配置通信端口,通过端口进行数据传输。当发生状态变更时,primary node根据原本的绑定关系,按照变更小,平均分配的原则重新分配绑定关系,并将绑定关系通过配置的端口发送给secondary 节点, secondary节点根据绑定关系解绑或绑定指定vip.

    loose-greatdb_ha_port = 33932
    
  • 可以强制配置读ip的绑定关系。但是一旦发生状态变更,可能需要重新配置。

    loose-greatdb_ha_vip_tope = "uuid1::vip1; uuid2::vip2,vip3, uuid3::vip4"
    
  • 配置网卡,插件会将vip绑定到MGR主所在机器的指定网卡上,比如配置为eth0,为了防止网卡原有的ip被覆盖,实际绑定后,会绑定在名为eth0:0的网卡上

    loose-greatdb_ha_mgr_vip_nic = 'eth0'
    
  • 配置掩码

    loose-greatdb_ha_mgr_vip_mask = '255.255.255.0'
    
  • 目前只支持单主MGR模式,所以需要设置:

    loose-group_replication_single_primary_mode= TRUE
    loose-group_replication_enforce_update_everywhere_checks= FALSE
    
  • 上述参数没有配置或者配置格式不对功能会失效(目前没有格式检查报错的功能)。

  • 除了上述新增参数,其他MGR相关参数按照常规单主MGR配置要求即可。

  • 上述参数支持动态修改。

上述配置说明的完整示例如下(MGR组内每个实例都需要配置):

[mysqld]
plugin-load-add=greatdb_ha.so
loose-greatdb_ha_enable_mgr_vip=1
loose-greatdb_ha_mgr_vip_ip =172.17.140.1
loose-greatdb_ha_mgr_vip_mask=255.255.240.0
loose-greatdb_ha_mgr_vip_nic=eth0

loose-group_replication_single_primary_mode=1
loose-group_replication_enforce_update_everywhere_checks=0

当MGR主的浮动IP被手动删除或者出现异常配置导致VIP绑定行为不对时,可以通过在MGR主上set global greatdb_ha_force_change_mgr_vip = on命令去重新获取MGR拓扑结构从而绑定新的浮动IP,该set命令执行之后,参数greatdb_ha_force_change_mgr_vip值仍然为off,这个是符合预期的行为。

启动说明

配置浮动IP需要相关内核权限,获取相关权限有两种方式,以下二选一即可:

  1. 给greatdbd进程的启动用户,例如是greatdb用户,设置root权限

  2. 通过setcap命令为greatdbd可执行文件添加CAP_NET_ADMIN和CAP_NET_RAW的capability。具体命令如下:

    #执行该命令需要sudo权限或root
    setcap CAP_NET_ADMIN,CAP_NET_RAW+ep bin/greatdbd
    

    注:如果是setcap命令为greatdbd添加capability以后, 需要登录系统的用户和启动greatdbd的保持一致,用root用户登录系统,然后用普通用户启动greatdbd,setcap会失效,从而绑定浮动IP的时候报错没有权限。

setcap以后,环境变量会失效,因此配置的LD_LIBRARY_PATH 和 LD_PRELOAD 都会失效。

对于LD_LIBRARY_PATH:

  1. 可以把非系统目录下的动态库添加软链接到系统库或者在/etc/ld.so.conf.d/ 下添加greatdb.conf文件,并添加非系统库路径,一般是/path/to/greatdb/bin/../lib/private, 可以通过ldd bin/greatdbd查看。

  2. 也可以在/etc/ld.so.preload 中添加非系统库下的动态库路径,一般是如下三个, 可以通过ldd查看

    install/bin/../lib/private/libcrypto.so.1.1
    install/bin/../lib/private/libssl.so.1.1
    install/bin/../lib/private/libprotobuf-lite.so.3.19.4
    

对于LD_PRELOAD:

对于通过greatdbd_safe 设置的LD_PRELOAD jemalloc.so 失效的问题,也可以通过上述的方式2添加。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论