如何让你的程序支持HA?

关于HA以及OceanBase中HA的应用请参考前面的两篇博客: HA在OceanBase中的应用, OceanBase中主备Rootserver如何管理切换

实现程序支持HA,要点是能够检测到VIP是否飘到了自己的机器上。如何检测呢?主Server和备Server都需要开一个线程,在这个线程里只做一件事:检查本机IP是否与VIP一致,如果一致则说明VIP飘到了自己的机器上。

这里仔细一想是有问题的:本机IP改了,外面的Server如何得知变成了多少?如何和它保持通信?最简单的情况,一个SSH连接上去,结果它的IP变了,连接岂不是会断开?

怎么办呢?让我们先来补充一点基础知识。

(1) 一台计算机可以有多个网卡,每个网卡可以有一个自己的独立IP,对外呈现为多个IP

(2)可以把多个网卡绑定成一个虚拟网卡(bond),对外只呈现为一个IP

(3)每个网卡(物理网卡或虚拟网卡)都可以有一个或多个虚拟IP(VIP)

(4)每个虚拟IP对应一个虚拟设备,设备命名规则是网卡名+":"+数字编号。例如eth0的VIP设备名称为eth0:0,eth0:1,...bond0的VIP设备名称为bond0:0, bond0:1

为一个设备添加/删除一个虚拟IP的方法如下(以bond0为例):

添加:sudo ifconfig bond0:0 10.32.36.219 netmask 255.255.255.0 up
删除:sudo ifconfig bond0:0 down


有了基础知识,再回到原始问题上:

(1)如何实现“VIP漂移”这个动作呢?

其实十分简单,要让VIP漂移到哪台机器上,就在哪台机器上执行下面的语句。VIP为10.32.36.219。

sudo ifconfig bond0:0 10.32.36.219 netmask 255.255.255.0 up

“同时”在原来持有VIP的机器上执行

sudo ifconfig bond0:0 down

HA软件很复杂,但其核心就是围绕着上面两个动作展开的,包括执行时机、执行顺序等。

(2)程序如何检测自己持有VIP呢?

同样很简单,在线程里不断执行下面这个函数即可。isLocalAddr函数逐个检查本机所持有的全部IP地址,与vip逐个匹配。

bool CNetUtil::isLocalAddr(uint32_t ip, bool loopSkip)
{
    int             fd, intrface;
    struct ifreq    buf[16];
    struct ifconf   ifc;

    if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) <= 0) {
        return false;
    }

    ifc.ifc_len = sizeof(buf);
    ifc.ifc_buf = (caddr_t) buf;
    if (ioctl(fd, SIOCGIFCONF, (char *) &ifc)) {
        close(fd);
        return false;
    }

    intrface = ifc.ifc_len / sizeof(struct ifreq);
    while (intrface-- > 0)
    {
        if(ioctl(fd,SIOCGIFFLAGS,(char *) &buf[intrface])) {
            continue;
        }
        if(loopSkip && buf[intrface].ifr_flags&IFF_LOOPBACK) continue;
        if (!(buf[intrface].ifr_flags&IFF_UP)) continue;
        if (ioctl(fd, SIOCGIFADDR, (char *) &buf[intrface])) {
            continue;
        }
        if (((struct sockaddr_in *) (&buf[intrface].ifr_addr))->sin_addr.s_addr == ip) {
            close(fd);
            return true;
        }
    }
    close(fd);
    return false;
}

例如我们有一个简单的主备策略:当发生VIP漂移的时候,备会切换成主,老的主则自动退出。

slave执行的代码:

const char *config_vip = "10.32.36.219";
uint32_t vip = getAddr(config_vip); // 将ip字符串地址转成2进制地址
while(true)
{
   if (isLocalAddr(vip, true))
   {
       break; // vip漂移到了本机
   }
}
// 下面是变成master后的代码
....

master执行的代码:

const char *config_vip = "10.32.36.219";
uint32_t vip = getAddr(config_vip); // 将ip字符串地址转成2进制地址
while(true)
{
   if (!isLocalAddr(vip, true))
   {
       exit(0); // 自己不再是master,退出
   }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《企业级 VMware vSphere 6.7虚拟化技术配置与管理》课程共分为“上集”和“下集”两部分,本套视频为“下集”部分,“上集”部分已经对VMware vSphere 6.7的计算资源、网络资源、存储资源、虚拟机配置与管理等进行了详细讲解,“下集”部分以“上集”为基础进行技术延伸,全面对vMotion、DRS、HA、FT、性能监控、VDP备份等特性进行理论讲解和实战配置。 通过本课程学习,可以全面掌握vMotion、资源池、DRS、HA、FT、VDP、监控等高可用性运维技能。 《企业级 VMware vSphere虚拟化技术配置与管理》下集部分具体课程章节如下。 第1章 《VMware vSphere 6.7 vMotion配置与管理》主要内容本章我们详细介绍了冷迁移、通过 vMotion 迁移、通过 Storage vMotion 迁移、CPU 兼容性和 EVC、在 vSphere Client中迁移已关闭电源或已挂起的虚拟机、将开机状态的虚拟机迁移至新计算资源和存储、关于迁移兼容性检查等内容。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 第2章 《VMware vSphere 6.7 资源和DRS配置与管理》主要内容本章我们主要讲解了CPU虚拟化资源管理知识、内存虚拟化资源管理知识、存储虚拟化资源管理知识、资源池、DRS群集、Storage I/O Control、科学合理的进行资源分配相关理论和操作。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 第3章 《VMware vSphere 6.7 HA配置与管理》主要内容本章我们主要讲解了业务连续性和最小化停机时间、vSphere HA 的工作原理、vSphere HA 准入控制、vSphere HA 互操作性等知识。通过实践操作,可以掌握创建 vSphere HA 群集,配置 vSphere HA群集,配置 Proactive HA。为了提高vCenter Server的高可用性,讲解了vCenter High Availability知识。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 第4章 《VMware vSphere 6.7 FT配置与管理》主要内容本章我们从理论上讲解了Fault Tolerance 的工作原理、Fault Tolerance工作用例、Fault Tolerance 环境要求、限制和许可、Fault Tolerance 互操作性。以理论为基础,实践了打开Fault Tolerance功能、测试Fault Tolerance故障切换、迁移辅助虚拟机、挂起Fault Tolerance、恢复Fault Tolerance、关闭Fault Tolerance等内容。最后总结了使用Fault Tolerance的科学做法、Fault Tolerance的故障排除方法。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 第5章 《VMware vSphere Data Protection(VDP)》 主要内容本章我们从理论上讲解vSphere Data Protection的基本功能、体系架构。演示了VDP的安装和配置,讲解了怎样正确使用VDP以及使用VDP进行管理备份,自动备份验证,管理恢复,复制作业,文件级恢复,紧急恢复,VDP代理等相关功能,最后针对VDP常见故障进行了总结分析。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 第6章 《VMware vSphere 6.7 监控和性能》 主要内容本章我们从理论上讲解了vSphere监控、性能、日志等相关基本知识。实践操作了使用性能图表监控清单对象、监控事件和警报、系统日志文件的配置。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 企业级 VMware vSphere 6.7虚拟化技术配置与管理(上集)视频课程:https://edu.csdn.net/course/detail/35162企业级 VMware vSphere 6.7虚拟化技术配置与管理(下集)视频课程:https://edu.csdn.net/course/detail/35171

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值