在使用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需要相关内核权限,获取相关权限有两种方式,以下二选一即可:
给greatdbd进程的启动用户,例如是greatdb用户,设置root权限
通过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:
可以把非系统目录下的动态库添加软链接到系统库或者在/etc/ld.so.conf.d/ 下添加greatdb.conf文件,并添加非系统库路径,一般是/path/to/greatdb/bin/../lib/private, 可以通过ldd bin/greatdbd查看。
也可以在/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添加。




