精华内容
下载资源
问答
  • 1、虚拟ip概念: 分析虚拟IP前,先说一下:动态 IP 、固定 IP 、实体 IP 实体 IP:在网络的世界里,为了要辨识每一部计算机的位置,因此有了计算机 IP 位址的定义。一个 IP 就好似一个门牌!例如,你要去微软的...

    1、虚拟ip概念:

    分析虚拟IP前,先说一下:
    动态 IP 、固定 IP 、实体 IP 

    实体 IP:在网络的世界里,为了要辨识每一部计算机的位置,因此有了计算机 IP 位址的定义。一个 IP 就好似一个门牌!例如,你要去微软的网站的话,就要去『 207.46.197.101 』这个 IP 位置!这些可以直接在网际网络上沟通的 IP 就被称为『实体 IP 』了。

    固定 IP 与 动态 IP:基本上,这两个东西是由于近来网络公司大量的成长下的产物,例如,你如果向中华电信申请一个商业型态的 ADSL 专线,那他会给你一个固定的实体 IP ,这个实体 IP 就被称为『固定 IP 』了。而若你是申请计时制的 ADSL ,那由于你的 IP 可能是由数十人共同使用,因此你每次重新开机上网时,你这部计算机的 IP 都不会是固定的!于是就被称为『动态 IP』或者是『浮动式IP』。基本上,这两个都是『实体IP』,只是网络公司用来分配给用户的方法不同而产生不同的名称而已。

    虚拟 IP:不过,众所皆知的,IP 位址仅为 xxx.xxx.xxx.xxx 的资料型态,其中, xxx 为 1-255 间的整数,由于近来计算机的成长速度太快,实体的 IP 已经有点不足了,好在早在规划 IP 时就已经预留了三个网段的 IP 做为内部网域的虚拟 IP 之用。这三个预留的 IP 分别为:

    A级:10.0.0.0 - 10.255.255.255
    B级:172.16.0.0 - 172.31.255.255
    C级:192.168.0.0 - 192.168.255.255

    上述中最常用的是192.168.0.0这一组。不过,由于是虚拟 IP ,所以当您使用这些地址的时候﹐当然是有所限制的,限制如下:

    私有位址的路由信息不能对外散播
    使用私有位址作为来源或目的地址的封包﹐不能透过Internet来转送
    关于私有位址的参考纪录(如DNS)﹐只能限于内部网络使用

    由于虚拟 IP 的计算机并不能直接连上 Internet ,因此需要特别的功能才能上网。不过,这给我们架设IP网络做成很大的方便﹐比如﹕即使您目前的公司还没有连上Internet﹐但不保证将来不会啊。如果使用公共IP的话﹐如果没经过注册﹐等到以后真正要连上网络的时候﹐就很可能和别人冲突了。也正如前面所分析的﹐到时候再重新规划IP的话﹐将是件非常头痛的问题。这时候﹐我们可以先利用私有位址来架设网络﹐等到真要连上intetnet的时候﹐我们可以使用IP转换协定﹐如 NAT (Network Addresss Translation)等技术﹐配合新注册的IP就可以了。

    2、虚拟IP原理

    我们知道一般的IP地址是和物理网卡绑定的,而VIP相反,是不与实际网卡绑定的的IP地址。当外网的上的一个机器,通过域名访问某公司内网资源时,内网的DNS服务器会把域名解析到一个VIP上。当外网主机经过域名解析得到这个VIP后,就将数据包发往这个VIP。但是在内网中,这个VIP是不与具体的设备相连接的,所以外网发过来的目的地址是VIP的IP数据包,究竟会到哪台机器呢?

    其实,这个在内网的过程是,通过ARP协议来完成的。也就是说这个VIP可以映射到的MAC地址是可以控制的。VIP在内网中被动态的映射到不同的MAC地址上,也就是映射到不同的机器设备上,那么就可以起到负载均衡的效果啦。

    PS:VIP的概念的是LVS中一个概念,具体学习《Linux负载均衡软件LVS之概念篇》

    3、为什么需要虚拟ip(HA的重要性)

     HA即(high available)高可用,又被叫做双机热备,用于关键性业务。简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至B机器继续提供服务。常见的实现高可用的开源软件有 heartbeat 和 keepalived。

        这样,一台 web 服务器一天24小时提供web服务,难免会存在 web 服务挂掉或服务器宕机宕机的情况,那么用户就访问不了服务了,这当然不是我们期望的。如果这样,有2台服务器,A对外提供 web 服务,B作为备用,如果A挂掉,那么B立刻替代A的位置去提供 web 服务,这样对用户来说是透明的。但是有个问题,服务器A的 ip 是 10.0.0.100,服务器B的 ip 是 10.0.0.101,显然向用户提供A或B的ip地址是不可行的,因为用户总不能去切换ip来访问的吧。这时heartbeat或keepalived可以提供一个虚拟IP:10.0.0.102,用户只需要访问 10.0.0.102,当A提供服务时,VIP 会设置在A服务器上,当B提供服务时,VIP会设置在B服务器上,这样就可以让用户通过访问 10.0.0.102 来获取web服务,即使A或B服务器切换也不影响用户的正常访问。

    下面我们使用 heartbeat 来做 HA 集群,并且把 nginx 服务作为 HA 对应的服务。

    4、具体的实现(方案的细节)

    高可用性HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。HA系统是目前企业防止核心计算机系统因故障停机的最有效手段。

    实现HA的方式,一般采用两台机器同时完成一项功能,比如数据库服务器,平常只有一台机器对外提供服务,另一台机器作为热备,当这台机器出现故障时,自动动态切换到另一台热备的机器。

    怎么实现故障检测的那?

          心跳,采用定时发送一个数据包,如果机器多长时间没响应,就认为是发生故障,自动切换到热备的机器上去。

    怎么实现自动切换那?

          虚IP。何为虚IP那,就是一个未分配给真实主机的IP,也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的 任意一个都可以连接到这台主机,所有项目中数据库链接一项配置的都是这个虚IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。

     

    开始我也不明白这是怎么实现的,以为是软件动态改IP地址,其实不是这样,其实现原理主要是靠TCP/IP的ARP协议。因为ip地址只是一个逻辑 地址,在以太网中MAC地址才是真正用来进行数据传输的物理地址,每台主机中都有一个ARP高速缓存,存储同一个网络内的IP地址与MAC地址的对应关 系,以太网中的主机发送数据时会先从这个缓存中查询目标IP对应的MAC地址,会向这个MAC地址发送数据。操作系统会自动维护这个缓存。这就是整个实现 的关键。

    下边就是我电脑上的arp缓存的内容。

    (192.168.1.219) at 00:21:5A:DB:68:E8 [ether] on bond0
    (192.168.1.217) at 00:21:5A:DB:68:E8 [ether] on bond0
    (192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond

    192.168.1.217、192.168.1.218是两台真实的电脑,

    192.168.1.217为对外提供数据库服务的主机。

    192.168.1.218为热备的机器。

    192.168.1.219为虚IP。

    大家注意红字部分,219、217的MAC地址是相同的。

    再看看那217宕机后的arp缓存

    (192.168.1.219) at 00:21:5A:DB:7F:C2 [ether] on bond0
    (192.168.1.217) at 00:21:5A:DB:68:E8 [ether] on bond0
    (192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond0 

    这就是奥妙所在。当218 发现217宕机后会向网络发送一个ARP数据包,告诉所有主机192.168.1.219这个IP对应的MAC地址是00:21:5A:DB:7F:C2,这样所有发送到219的数据包都会发送到mac地址为00:21:5A:DB:7F:C2的机器,也就是218的机器。

     

     

    展开全文
  • 虚拟ip的概念

    千次阅读 2019-09-17 19:21:37
    1.虚拟IP是什么? 要是单讲解虚拟 IP,理解起来很困难,所以干脆把 动态 IP 、固定 IP 、实体 IP虚拟 IP都讲解一下,加深理解和知识扩展 实体 IP:在网络的世界里,为了要辨识每一部计算机的位置,因此有了...

    1.虚拟IP是什么?

     

    要是单讲解虚拟 IP,理解起来很困难,所以干脆把
    动态 IP 、固定 IP 、实体 IP 与虚拟 IP都讲解一下,加深理解和知识扩展

    实体 IP:在网络的世界里,为了要辨识每一部计算机的位置,因此有了计算机 IP 位址的定义。一个 IP 就好似一个门牌!例如,你要去微软的网站的话,就要去『 207.46.197.101 』这个 IP 位置!这些可以直接在网际网络上沟通的 IP 就被称为『实体 IP 』了。

    虚拟 IP:不过,众所皆知的,IP 位址仅为 xxx.xxx.xxx.xxx 的资料型态,其中, xxx 为 1-255 间的整数,由于近来计算机的成长速度太快,实体的 IP 已经有点不足了,好在早在规划 IP 时就已经预留了三个网段的 IP 做为内部网域的虚拟 IP 之用。这三个预留的 IP 分别为:

    A级:10.0.0.0 - 10.255.255.255
    B级:172.16.0.0 - 172.31.255.255
    C级:192.168.0.0 - 192.168.255.255

    上述中最常用的是192.168.0.0这一组。不过,由于是虚拟 IP ,所以当您使用这些地址的时候﹐当然是有所限制的,限制如下:

    私有位址的路由信息不能对外散播
    使用私有位址作为来源或目的地址的封包﹐不能透过Internet来转送
    关于私有位址的参考纪录(如DNS)﹐只能限于内部网络使用

    由于虚拟 IP 的计算机并不能直接连上 Internet ,因此需要特别的功能才能上网。不过,这给我们架设IP网络做成很大的方便﹐比如﹕即使您目前的公司还没有连上Internet﹐但不保证将来不会啊。如果使用公共IP的话﹐如果没经过注册﹐等到以后真正要连上网络的时候﹐就很可能和别人冲突了。也正如前面所分析的﹐到时候再重新规划IP的话﹐将是件非常头痛的问题。这时候﹐我们可以先利用私有位址来架设网络﹐等到真要连上intetnet的时候﹐我们可以使用IP转换协定﹐如 NAT (Network Addresss Translation)等技术﹐配合新注册的IP就可以了。

    固定 IP 与 动态 IP:基本上,这两个东西是由于近来网络公司大量的成长下的产物,例如,你如果向中华电信申请一个商业型态的 ADSL 专线,那他会给你一个固定的实体 IP ,这个实体 IP 就被称为『固定 IP 』了。而若你是申请计时制的 ADSL ,那由于你的 IP 可能是由数十人共同使用,因此你每次重新开机上网时,你这部计算机的 IP 都不会是固定的!于是就被称为『动态 IP』或者是『浮动式IP』。基本上,这两个都是『实体IP』,只是网络公司用来分配给用户的方法不同而产生不同的名称而已。

     

    自己的理解

    我们用路由器时,每个手机或电脑都有一个ip地址,这个IP就是虚拟IP。想象一下,如果世界上的每台设备(电脑手机都算)都有一个实际IP地址,IP地址肯定不够用。但如果每个实际的IP地址再对应几万个虚拟的IP地址(比如 192.168.0.0 - 192.168.255.255),那不就够了吗?
    我们给一个路由器分配一个实体IP(只是举个例子),之后每个连接这个路由器的设备给他分配一个虚拟IP(比如 192.168.0.0 - 192.168.255.255 中随机给一个),路由器记下这个虚拟IP和对应的设备,当某个设备访问网络数据时,先经过路由器,然后路由器与网络进行数据交换,因为路由器有实体IP,所以网络可以给路由器发送数据,然后路由器再根据自己分配的虚拟IP发送到相应的设备。

     

    资料来源:http://blog.csdn.net/u014290233/article/details/53635658

     


    2.虚拟IP与arp协议

     

    一、虚拟IP

          虚拟IP(Vrtual IP Address),是一种不与特定计算机或者特定计算机网卡相对应的IP地址。所有发往这个IP地址的数据包最后都会经过真实的网卡到达目的主机的目的进程。

    引用维基上面的定义:https://en.wikipedia.org/wiki/Virtual_IP_address

    A virtual IP address (VIP or VIPA) is an IP address that doesn't correspond to an actual physical network interface (port). Uses for VIPs include network address translation (especially, one-to-many NAT), fault-tolerance, and mobility.

    虚拟IP主要是用来网络地址转换,网络容错和可移动性。

           虚拟IP比较常见的一个用例就是在系统高可用性(High Availability HA)方面的应用,通常一个系统会因为日常维护或者非计划外的情况而发生宕机,为了提高系统对外服务的高可用性,就会采用主备模式进行高可用性的配置。当提供服务的主机M宕机后,服务会切换到备用主机S继续对外提供服务。而这一切用户是感觉不到的,在这种情况下系统对客户端提供服务的IP地址就会是一个虚拟IP,当主机M宕机后,虚拟IP便会漂浮到备机上,继续提供服务。

           在这种情况下,虚拟IP就不是与特定计算主机或者特定某个物理网卡对应的了,而是一种虚拟或者是说逻辑的概念,它是可以自由移动自由漂浮的,这样一来既对外屏蔽了系统内部的细节,又为系统内部的可维护性和扩展性提供了方便。
     

    二、arp协议
     

            arp协议属于TCP/IP协议族里面一种用户将IP地址解析为MAC地址的协议。该协议是用户局域网内解析IP地址对应的物理地址。通常一个主机A给另一个主机B通过网络发送一个IP数据报的时候,首先会发送到主机A所在的路由器上面,然后路由器会判断目的地址是否在本网络内,是则直接转发到本网络内的目的主机,否则会继续传递到下一个路由,直到到达指定的网络的路由器。指定网络的路由器会将此数据报发送到目的主机。整个过程最后都会涉及到由某一个网络中的路由器发送到网内某一主机的过程。这个过程通常是由路由器发送一个arp广播请求,请求IP地址为数据包目的地址的主机将它自己的MAC地址发送过来,因为数据链路层的数据传输是通过物理地址传输的。arp请求会广播到所有网内的主机,网内其他主机收到这个arp请求后,首先会检查发送arp请求的主机的IP地址,然后将该IP地址和其对应的MAC地址存放在缓存中,然后会检查这个arp请求中请求的IP地址是否为自己的IP地址,是则发送一个arp应答,应答包含自己的IP地址和对应的MAC地址。当得到了MAC地址后,便可以将数据包正确传输到目的主机上了。

            arp协议中比较重要的内容之一就是arp缓存,主机操作系统会将IP地址与MAC地址的映射关系存放在主机的一片高速缓存中。

    缓存失效:该缓存会在一定时间内失效,失效后,请求该IP地址时需要广播arp请求重新获取IP地址对应的MAC地址

    缓存更新:当收到ARP请求时,会将发送ARP请求的主机IP地址与MAC地址记录下来,然后去更新本机arp缓存中对应的记录。

     

    三、虚拟IP与arp协议

    虚拟IP和arp协议

            虚拟IP常用于系统高可用性的场景,那么虚拟IP实现的原理是什么?虚拟能够自由漂浮的原理是什么?

            从前文介绍arp协议里面来看,主机与主机的通信过程都会涉及到一个ip地址转换mac地址的过程,那么虚拟IP的通信也不会例外。因此,IP地址在主机通信的过程中其实就是一个逻辑地址。我们知道,每一个主机都存放着网络内一些主机的逻辑地址与物理地址(MAC地址)的映射,问题来了,当虚拟IP VIP在主机A上时,主机A的MAC地址为MAC_A某主机M的arp缓存中存放着一个映射关系:VIP ---à MAC_A;当主机A宕机后,虚拟IPVIP漂浮到了主机B,主机B的MAC地址为MAC_B,那么此时主机M想与虚拟IP通信时,是做不到,因为它的arp高速缓存中的虚拟IP VIP的映射还指向主机A的MAC地址。这个问题解决的思路就是当虚拟IP漂浮后,刷新所有其他主机的arp缓存。

     

    那么虚拟IP是如何实现漂浮后,是如何刷新所有其他主机的arp缓存的呢?

            这里就会引入另一个概念,garp()简称无端arp或者免费arp,主要是用来当某一个主机C开机时,用来确认自己的IP地址没有被人占用而做的一个检测。广播发送这个arp,请求得到本机IP地址的MAC地址,主机C并不希望此次arp请求会有arp应答,因为应答意味着IP地址冲突了。当其他主机收到这个arp请求后,会刷新关于这个arp请求源的主机IP地址的映射。

    Garp的作用主要有两个:

    1.      检测IP地址是否有冲突

    2.      刷新其他主机关于本次IP地址的映射关系

     

            集群管理软件Pacemaker里面的资源代理ocf:heartbeat:IPaddr2中,在虚拟IP漂浮后,会向网络内广播发送garp请求,以此来刷新其他主机的arp缓存。

            在配置OpenStack控制节点高可用性的时候,出现过虚拟IP切换时,某一个主机不能通信的问题,后来发现是arp缓存没有刷新,有时候由于网络的原因,某些主机没有接收到此garp请求,因此ocf:heartbeat:IPaddr2资源代理中可以配置发送garp的次数,这里建议次数配置得多一点,这样可以保证其他主机成功刷新arp缓存。

     

    资料来源:http://blog.csdn.net/u014532901/article/details/52245138


     3. 谈谈VIP漂移那点破事

     

    一直以来都是用nginx的upstream模块做网站最前端的负载均衡,为了防止nginx本身宕机导致网站不能访问,通常都会做两套nginx反向代理,然后用keepalive之类的软件提供VIP。

     

    常见的环境是nginx主节点和从节点各有一个公网IP,一个私有IP,VIP地址也使用公网IP来提供,正常情况下VIP只会在nginx主节点上工作,只有主节点宕机或者网络不可达等情况下,VIP才会漂移到nginx从节点上。如果keepalive配置了非抢占模式,则主节点恢复后,VIP也不会漂移会主节点,而是继续在从节工作。这种配置要求机房网络不做mac地址绑定。

     

    最近做的两套培训系统测试情况如下:

    系统一:主从节点做双网卡绑定,都只有一个私有IP,VIP也为私有IP,通过防火墙的NAT转发用户的访问请求。主节点宕机后,VIP可以漂移至从节点,但用户无法访问网站,telnet防火墙公网IP的80端口提示无法连接。

     

    系统二:主从节点各有两张网卡,分别配置一个公网IP和一个私有IP。VIP地址也使用公网IP来提供。

    主节点宕机后,VIP可以漂移至从节点,但用户无法ping通VIP,自然网站也就打不开。

     

    于是分别对这两种情况进行排查:

    系统二:属于比较常见的配置方案。VIP漂移后无法ping通,第一反应询问机房工作人员,是否相应的设备做了mac地址绑定。得知无绑定策略后继续排查。

    发现配置net.ipv4.ip_nonlocal_bind = 1 参数并使其生效后重新测试正常。

     

    系统一:情况有点特殊,按系统二的解决方法尝试无果后,怀疑端口路由器映射上出现问题。于是继续测试VIP漂移,发现VIP漂移到从节点后,防火墙上的arp表中vip对应的mac地址依旧是主节点网卡的mac地址,原来防火墙才是罪魁祸首,坑爹的货。机房使用的防火墙型号华为Quidway Eudemon1000E,据说默认配置下,这个arp地址表自动刷新需要20分钟!

     

    好吧!于是用下面的命名手工刷新后,万事大吉,网站访问也很顺畅,比较郁闷的是当主节点重新抢占VIP后,依然需要手工刷新下,否则防火墙还是把请求转给从节点响应。

    # arping -I 网卡地址 -c 3 -s VIP地址 网关地址

     

    后记:

    要彻底解决系统一的问题,可以从两方面去着手,首先是考虑去调整防火墙的arp表的自动刷新时间;其次是考虑在从节点上部署一个无限循环的脚本,时时去检测是否抢占到了VIP,若抢占成功,则运行前面的刷新命令,命令成功运行后退出脚本,同时可以用nagios监控该脚本,了解最新的主从切换情况。切记,循环运行一次接受后sleep 1秒,否则会死机的哦!

    如果在主节点上也部署类似的脚本,则会对网络带来负担,因而主节点恢复后的刷新手工运行下就好了,如果忘记运行了,从节点依然可以工作,无伤大雅!

     

    资料来源:

    http://ylw6006.blog.51cto.com/470441/1314004/


    4.HA集群中的虚拟IP原理

     

    高可用性HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。HA系统是目前企业防止核心计算机系统因故障停机的最有效手段。

    实现HA的方式,一般采用两台机器同时完成一项功能,比如数据库服务器,平常只有一台机器对外提供服务,另一台机器作为热备,当这台机器出现故障时,自动动态切换到另一台热备的机器。

    怎么实现故障检测的那?

          心跳,采用定时发送一个数据包,如果机器多长时间没响应,就认为是发生故障,自动切换到热备的机器上去。

    怎么实现自动切换那?

          虚IP。何为虚IP那,就是一个未分配给真实主机的IP,也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的 任意一个都可以连接到这台主机,所有项目中数据库链接一项配置的都是这个虚IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。

     

    开始我也不明白这是怎么实现的,以为是软件动态改IP地址,其实不是这样,其实现原理主要是靠TCP/IP的ARP协议。因为ip地址只是一个逻辑 地址,在以太网中MAC地址才是真正用来进行数据传输的物理地址,每台主机中都有一个ARP高速缓存,存储同一个网络内的IP地址与MAC地址的对应关 系,以太网中的主机发送数据时会先从这个缓存中查询目标IP对应的MAC地址,会向这个MAC地址发送数据。操作系统会自动维护这个缓存。这就是整个实现 的关键。

    下边就是我电脑上的arp缓存的内容。

    (192.168.1.219) at 00:21:5A:DB:68:E8 [ether] on bond0
    (192.168.1.217) at 00:21:5A:DB:68:E8 [ether] on bond0
    (192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond0

     

    192.168.1.217、192.168.1.218是两台真实的电脑,

    192.168.1.217为对外提供数据库服务的主机。

    192.168.1.218为热备的机器。

    192.168.1.219为虚IP。

    大家注意红字部分,219、217的MAC地址是相同的。

    再看看那217宕机后的arp缓存

    (192.168.1.219) at 00:21:5A:DB:7F:C2 [ether] on bond0
    (192.168.1.217) at 00:21:5A:DB:68:E8 [ether] on bond0
    (192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond0 

    这就是奥妙所在。当218 发现217宕机后会向网络发送一个ARP数据包,告诉所有主机192.168.1.219这个IP对应的MAC地址是00:21:5A:DB:7F:C2,这样所有发送到219的数据包都会发送到mac地址为00:21:5A:DB:7F:C2的机器,也就是218的机器。

     

     


     

    5. 基于keepalived 实现VIP转移,lvs,nginx的高可用

     

    一、Keepalived 高可用集群的解决方案

    二、VRRP的有限状态机

    三、利用keepalived 实现主从VIP的切换

    四、实现在状态转变的时候自定义进行通知,

    五、实现负载均衡

    六:实现nginx的高可用

     


     

    一、Keepalived 高可用集群的解决方案

    183501583.png

    最初的诞生是为ipvs提供高可用的,在后端的realserver接收不到主节点的信息之后,keepalived能够自己调用ipvsadm命令生成规则,能够自动实现,将主节点的VIP以及ipvs规则“拿过来”,应用在从节点上,继续为用户服务。还可以实现对后端realserver的健康状况做检测。

    keepalived在一个节点上启动之后,会生成一个Master主进程,这个主进程又会生成两个子进程,分别是VRRP Stack(实现vrrp协议的) Checkers(检测ipvs后端realserver的健康状况检测)

     

    二、VRRP的有限状态机

    183601870.png

    VRRP双方节点都启动以后,要实现状态转换的,刚开始启动的时候,初始状态都是BACKUP,而后向其它节点发送通告,以及自己的优先级信息,谁的优先级高,就转换为MASTER,否则就还是BACKUP,这时候服务就在状态为MASTER的节点上启动,为用户提供服务,如果,该节点挂掉了,则转换为BACKUP,优先级降低,另一个节点转换为MASTER,优先级上升,服务就在此节点启动,VIP,VMAC都会被转移到这个节点上,为用户提供服务,

     

    实验环境:

    虚拟主机版本:

    CentOS6.4-i686

    两个节点:

    node1.limian.com 172.16.6.1

    node2.limian.com 172.16.6.10

    准备

    1、节点一:

    同步时间:

    [root@node1 ~]# ntpdate 172.16.0.1

    安装keepalived

    [root@node1 ~]# yum -y install keepalived

    2、节点二做同样的工作

     

    三、利用keepalived 实现主从VIP的切换

    3.1我们修改下keepalived的配置文件:

     

    1

    2

    3

    [root@node1 ~]# cd /etc/keepalived/

    [root@node1 keepalived]# cp keepalived.conf keepalived.conf.back  //先给配置文件备份一下

    [root@node1 keepalived]# vim keepalived.conf

     

    3.2全局阶段

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    global_defs {

       notification_email {                        //定义邮件服务的

            root@localhost                         //定义收件人,这里改为本机,只是测试使用

       }

       notification_email_from kaadmin@localhost   //定义发件人,

       smtp_server 127.0.0.1                       //定义邮件服务器,一定不能使用外部地址

       smtp_connect_timeout 30                     //超时时间

       router_id  LVS_DEVEL                      

    }

     

    3.3定义vrrp阶段

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    vrrp_instance VI_1 {          //定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称

        state MASTER              //开启后,该节点的优先级比另一节点的优先级高,所以转化为MASTER状态

        interface eth0            //所有的通告等信息都从eth0这个接口出去

        virtual_router_id 7      //虚拟路由的ID,而且这个ID也是虚拟MAC最后一段的来源,这个ID号一般不能大于255,且这个ID一定不能有冲突

        priority 100            //初始优先级

        advert_int 1            //通告的个数

        authentication {        //认证机制

            auth_type PASS      //认证类型

            auth_pass 1111      //密码,应该为随机的字符串

        }

        virtual_ipaddress {     //虚拟地址,即VIP

            172.16.6.100  

        }

    }

    这样我们主节点的配置文件就修改好了,需要复制到从节点上,再做适当的修改就可以使用了

     

    1

    [root@node1 keepalived]# scp keepalived.conf 172.16.6.1:/etc/keepalived/

    3.4登录到从节点;

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    [root@node2 ~]# cd /etc/keepalived/

    [root@node2 keepalived]# vim keepalived.conf

    vrrp_instance VI_1 {

        state BACKUP       //修改从节点的状态,主节点为MASTER,从节点就为BACKUP

        interface eth0

        virtual_router_id 7

        priority 99       //修改优先级,注意从节点的优先级一定要小于主节点

        advert_int 1

        authentication {

            auth_type PASS

            auth_pass 1111

        }

        virtual_ipaddress {

            172.16.6.100

        }

    }

    3.5然后在主节点启动服务

     

    1

    2

    [root@node1 keepalived]# service keepalived start

    [root@node1 ~]# ip addr show   //查看我们定义的VIP

    184053712.png

    3.6在从节点启动服务

    [root@node2 keepalived]# service keepalived start

    把主节点上的服务停掉,看VIP会不会到从节点上

    [root@node2 ~]# ip addr show

     

    184225729.png

    3.7在主节点上启动服务

    1

    2

    [root@node1 ~]# service keepalived start

    [root@node1 ~]# ip addr show    //检测结果发现VIP转移到了主节点

    注:

    默认情况下ARRP工作在“抢占模式”下,如果发现一个节点的服务停止了,另一个节点会立即把VIP和VMAC“抢过来”,如果在“非抢占模式”下,无论你的优先级过高,一个节点服务停止,另一个节点也不会“抢”VIP和VMAC,除非这个节点挂了,两一个节点才会“抢”。

    四、实现在状态转变的时候自定义进行通知,

    4.1这需要依赖于脚本来完成

    主节点

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    [root@node1 ~]# cd /etc/keepalived/

    [root@node1 keepalived]# vim notify.sh   //编写脚本

    #!/bin/bash

    vip=172.16.6.100

    contact='root@localhost'

    thisip=`ifconfig eth0 | awk '/inet addr:/{print $2}' | awk -F: '{print $2}'`

    Notify() {

        mailsubject="$thisip is to bi $vip master"

        mailbody="vrrp transaction, $vip floated to $thisip"

        echo $mailbody | mail -s "$mailsubject" $contact

    }

    case "$1" in

        master)

            notify master

            exit 0

        ;;

        backup)

                notify backup

            exit 0

        ;;

        fault)

            notify fault

            exit 0

        ;;

        *)

            echo 'Usage: `basename $0` {master|backup|fault}'

            exit 1

        ;;

    esac

    [root@node1 keepalived]# chmod +x notify.sh

    [root@node1 keepalived]# ./notify.sh master

    [root@node1 keepalived]# mail   //查看有没有收到通知

    Heirloom Mail version 12.4 7/29/08.  Type ? for help.

    "/var/spool/mail/root": 1 message 1 new

    >N  1 root                  Wed Sep 25 14:54  18/668   "172.16.6.10 is to bi 172.16.6.100 mas"

    &

    转换状态查看是否会收到通知

    1

    2

    3

    4

    5

    6

    7

    8

    9

    [root@node1 keepalived]# ./notify.sh backup

    [root@node1 keepalived]# ./notify.sh fault

    [root@node1 keepalived]# mail

    Heirloom Mail version 12.4 7/29/08.  Type ? for help.

    "/var/spool/mail/root": 3 messages 2 new

        1 root                  Wed Sep 25 14:54  19/679   "172.16.6.10 is to bi 172.16.6.100 mas"

    >N  2 root                  Wed Sep 25 14:57  18/668   "172.16.6.10 is to bi 172.16.6.100 mas"

     3 root                  Wed Sep 25 14:57  18/668   "172.16.6.10 is to bi 172.16.6.100 mas"

    &

    说明脚本正常工作,那么去编辑配置文件

    1

    [root@node1 keepalived]# vim keepalived.conf

    在全局阶段添加

     

    1

    2

    3

    4

    5

    vrrp_script chk_mantaince_down{   //定义可以手动控制状态的脚本

       script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"

       interval 1                    //检查时间间隔

       weight -2                     //如果检测失败,优先级-2

    }

    在vrrp阶段添加如下几行

     

    1

    2

    3

    4

    5

    6

    track_script {     //引用定义的脚本

           chk_mantaince_down

        }

      notify_master"/etc/keepalived/notify.sh master"

       notify_backup"/etc/keepalived/notify.sh backup"

       notify_fault"/etc/keepalived/notify.sh fault"

     

    4.2将该脚本复制到另一个节点,

    1

    [root@node1 keepalived]# scp notify.sh 172.16.6.1:/etc/keepalived/

    并在配置文件中相应的位置添加相同内容

    两个节点都重启服务

    4.3让主节点变成从节点

    1

    root@node1 keepalived]# touch down

    通过监控,发现主节点立即变成从节点,并收到一封邮件

    1

    2

    [root@node1 keepalived]# tail -f /var/log/messages

    You have new mail in /var/spool/mail/root

    五、实现负载均衡

    5.1编辑配置文件

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    [root@node1 keepalived]# vim keepalived.conf

    #####负载均衡阶段#################

    virtual_server 172.16.6.100 80 //指定VIP和端口

        delay_loop 6  //延迟多少个周期再启动服务,做服务检测

        lb_algo rr loadbalance 负载均衡调度算法

        lb_kind DR 类型

        nat_mask 255.255.0.0 掩码

        persistence_timeout 0 持久连接时间

        protocol TCP                     //协议

        real_server 172.16.6.11 80 //定义后端realserver的属性

            weight 1

    HTTP_GET {                    //定义检测的方法

                url {                      //检测的URL

                  path /

    status_code 200       //获取结果的状态码

                }

                connect_timeout 3   //连接超时时间

                nb_get_retry 3       //尝试次数

                delay_before_retry 3  //每次尝试连接的等待时间

            }

    }

    real_server 172.16.6.12 80 {    //定义后端realserver的属性

            weight 1

    HTTP_GET {                      //定义检测的方法

                url {               //检测的URL

                  path /

    status_code 200                 //获取结果的状态码

                }

                connect_timeout 3   //连接超时时间

                nb_get_retry 3       //尝试次数

                delay_before_retry 3 //每次尝试连接的等待时间

            }

        }

    }

    5.2、在从节点上做同样的修改

    5.3重启服务并用ipvsadm命令检测是否会生成规则

    1

    2

    3

    4

    5

    6

    7

    [root@node1 keepalived]# service keepalived restart

    [root@node1 keepalived]# ipvsadm -L -n

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port Scheduler Flags

      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

    TCP  172.16.6.100:80 rr

    [root@node1 keepalived]#

    但是为什么没有我们定义的两个realserver呢?那是因为没启动虚拟机呢,健康状况检测没通过,就不会显示了,我们去启动一个虚拟机,并启动服务即可。

    并执行如下命令,做lvs负载均衡的DR模型

     

    1

    2

    3

    4

    5

    6

    #ifconfig lo:0 172.16.6.11 broadcast 172.16.6.11 netmask 255.255.255.255 up

    #route add -host 172.16.6.11 dev lo:0

    #echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    #echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

    注:

    1、后端的realserver的数量可以添加多台,但是需要在主节点的配置文件中给出相应的配置,并在添加的realserver上执行相关命令即可

    2、尽管keepalived可以自行添加ipvs规则,实现负载均衡,但是无法实现动静分离,在生产环境中我们要根据场景选择最佳的方案。

    六:实现nginx的高可用

    6.1前提

    两个节点上都装上nginx服务,并确保httpd没启用

    # netstat -tunlp //确保80端口没占用

    # service nginx start

    6.2为每个节点的nginx编辑一个页面,以便于效果更直观一些

    1

    2

    3

    4

    [root@node1 ~]# vim /usr/share/nginx/html/index.html  //节点1

    172.16.6.10

    [root@node2 ~]# vim /usr/share/nginx/html/index.html  //节点2

    172.16.6.1

    6.3确保nginx可以正常访问

    184735882.png

    6.4然后停掉服务,

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    [root@node1 keepalived]# vim notify.sh //修改脚本,让它可以监测nginx服务,并可以启动或关闭服务

    ##################

    case "$1" in

        master)

            notify master

            /etc/rc.d/init.d/nginx start

            exit 0

        ;;

        backup)

            notify backup

            /etc/rc.d/init.d/nginx stop

            exit 0

        ;;

        fault)

            notify fault

            /etc/rc.d/init.d/nginx stop

            exit 0

        ;;

    ######################################

    6.5同步脚本到节点2

    1

    [root@node1 keepalived]# scp notify.sh 172.16.6.1:/etc/keepalived/

    6.6在主节点上

    1

    2

    3

    4

    [root@node1 keepalived]# touch down

    [root@node1 keepalived]#ss -tunl   //发现80端口未被监听

    [root@node1 keepalived]# rm -f down

    [root@node1 keepalived]#ss -tunl  //发现80端口已经被监听

     

     


    展开全文
  • 物理环境:双机+多网卡+其中一个网卡绑定2个IP+带arp缓存的交换机使用场景:双机主备切换,通过虚拟一个IP地址来统一对外提供服务问题:主备切换后,虚拟IP绑定成功,但外面不能ping同虚拟IP,也就是虚拟IP不能快速...

    物理环境:双机+多网卡+其中一个网卡绑定2个IP+带arp缓存的交换机

    使用场景:双机主备切换,通过虚拟一个IP地址来统一对外提供服务

    问题:主备切换后,虚拟IP绑定成功,但外面不能ping同虚拟IP,也就是虚拟IP不能快速生效

    注意:如果使用普通的二层交换机,则不存在该问题,因为普通交换机没有arp缓存。当然,通过调整交换机上的arp缓存失效时间,可以缓解该问题,但通常情况下,交换机是别人的,不能随便动。

    解决方法:主动发起arp地址更新,也就是向交换机广播一个arp地址更新指令即可。

    Linux下,直接使用arping命令即可。

    arping -I eth3 -s 172.16.251.54 -b -c 1 172.16.251.49

    -I:指定绑定虚拟IP的物理接口

    -s:指定要变更MAC地址的虚拟IP

    -b:广播模式

    -c:发送广播包的数量控制

    最后为要通知arp地址变更的三层交换上的网关。

    主备服务器切换后,绑定虚拟IP的服务器直接执行上面的指令,即可告诉交换机:该虚拟IP的MAC地址变更了,及时更新。

    这样,通过交换机访问虚拟IP时,交换机就能及时使用新的MAC地址,从而快速上虚拟IP生效。

    Windows下没有arping命令。不过晚上好像有类似的脚本和源码,可以实现同样的功能。0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • 虚拟主机与独立IP是什么?一个虚拟主机可以绑定多少个独立IP?一个主机能否绑定多少个域名?其实不同空间商会有所不同,但一般都会开放2到10个左右的域名绑定权限,本文就将具体介绍一些虚拟主机和独立IP的知识。...

    虚拟主机与独立IP是什么?一个虚拟主机可以绑定多少个独立IP?一个主机能否绑定多少个域名?其实不同空间商会有所不同,但一般都会开放2到10个左右的域名绑定权限,本文就将具体介绍一些虚拟主机和独立IP的知识。

    这里需要说明的是,是不是独立IP其实对域名绑定数量并没有影响。主机能绑定的域名个数一般体现在空间的大小上,为满足使用上的需求空间越大开放的域名绑定数也会越多。

    什么是独立IP

    首先我们要知道,虚拟主机其实只是在服务器中划分出来的一个小小的区,你可以在里面自由管理和存放你的网站。正常情况下,一个服务器只有一个IP地址,所以不管服务器被划分了多了个虚拟主机出来,这些虚拟主机用的都是同一个IP。

    d4d64c20eaa3a15301d02d63728c1f08.png

    而独立IP解决的就是虚拟主机只能共用一个IP的问题。独立IP让每一个虚拟主机都有自己的一个单独IP地址,这样,用户除了记住域名外,在浏览器的地址栏敲入IP地址也可以访问到网站。如果没有独立IP的话,别人要访问你的网站就只能用域名了。另外,由于IP地址紧张,所以使用独立IP是要另外付费的。虽然IP地址不如域名好记忆,而且实际用IP地址找网站的人也并不多。但是独立ip也有它显著的优势,如:一个站点一个单独ip地址,同一台服务器不受其他用户影响。防攻击,安全性高,独享一个ip搜索引擎收录快,认可度更高。

    展开全文
  • 虚拟主机共享IP地址

    千次阅读 2019-04-20 11:37:21
    2.ip是共享的,一个服务器分很多虚拟主机,也就是说很多网站同用一个ip 3.如果收到黑客攻击,那么整个服务器上同ip的网站都受到影响 4.如果这个服务器上某些虚拟主机站点存放了违法信息,被网监查到了,那么就会封...
  • 步骤一:为主机中的不同网卡设置各自的IP地址 # ifconfig eth0 192.168.149.1 # ifconfig eth0:1 192.168.149.2步骤二:在httpd.conf配置文件中,为每个虚拟主机设置不同的。问 怎么设置才能把虚拟机linux ip 和主机...
  • 在云虚拟主机中,屏蔽指定IP地址请参考如下几种方法。 第一种: 通过.htaccess文件屏蔽 通过配置.htaccess文件屏蔽指定IP地址,.htaccess文件中需要配置的代码如下。 RewriteEngine on RewriteBase / Order Deny,...
  • [color=red][b]VIP = Virtual IP Address[/b][/color],[color=blue]虚拟IP地址[/color][color=blue]是[/color]一个不与特定计算机或一个计算机中的网络接口卡(NIC)相连的[color=blue]IP地址[/color]。虚拟IP地址...
  • 其余前提准备包括查询自己ip地址、同局域网通过ip地址访问可以到文章末尾查看。 一、配置虚拟主机: 首先,在D:\wamp\bin\apache\Apache2.4.4\conf下找到httpd.conf 打开,搜索Virtual Hosts,找到下图。将红框...
  • nginx配置多个虚拟ip访问

    千次阅读 2015-07-06 16:37:33
    Ubuntu 配置多个ip地址:/etc/network/interfaces root@ubuntu:/etc/network# cat interfaces auto eth0 iface eth0 inet static address 192.168.88.134 netmask 255.255.255.0 gateway 192.168.88.1 auto eth0...
  • 高性能高可用MySQL(主从同步,读写分离,分库分表,去中心化,虚拟IP,心跳机制) 视频地址:https://www.bilibili.com/video/BV1ry4y1v7Tr?p=8&spm_id_from=pageDriver mysql处理海量数据 主从同步:会带来...
  • 问题:主备切换后,虚拟IP绑定成功,但外面不能ping同虚拟IP,也就是虚拟IP不能快速生效 注意:如果使用普通的二层交换机,则不存在该问题,因为普通交换机没有arp缓存。当然,通过调整交换机上的arp缓存失效时间,...
  • 目录一 网络配置中出现的错误及解决方案二 VMware下网络配置的三种模式简介1、桥接模式(Bridged)2、网络地址转化模式(NAT)3、仅主机模式(host-only)一 网络配置中出现的错误...,等过了一天再使用时发现获取不到IP地址...
  • 虚拟机服务器如何修改IP地址 内容精选换一换Atlas 200 DK开发者板支持通过USB端口或者网线与Ubuntu服务器进行连接,连接示例图如图1所示。Atlas 200 DK连接Ubuntu服务器有以下场景:通过USB端口直连Ubuntu服务器:...
  • 这篇文章转载别人,想原创做者致敬!web我本人也遇到一样的问题,故转载记录。安全本文重点描述如何使用IIS访问共享资源来架设站点或执行 ASP.Net 等脚本。服务器一般状况下,拥有多台服务器的朋友在使用IIS创建站点...
  • 无法显示虚拟机的网络适配器,连接不上Xshell, ens32迷惑,试了百度很多的办法都查询不到ip 地址或许你和我遇到的是同一种问题,可以参考这篇博客,希望对你有所帮助!
  • 简洁版10.10.10.1/24 和 10.10.10.1/25 一个是子网掩码为24的10.10.10.1的IP地址 一个是子网掩码为25的10.10.10.1的IP地址 表面上两个IP地址是一样的,但因为子网掩码的不同,导致网段的不同 好比一号楼有201号房间...
  • 代理ip能查到真实ip吗?

    千次阅读 2021-03-05 14:25:25
    您能否代理IP跟踪真实IP?目前代理ip被广泛使用,许多人选择使用代理IP,因为它有许多强大的功能,但最重要的是要切换IP,隐藏真实的IP地址。但如果真的使用代理IP的话,这绝对没有错吧?为何有些人反映他们自己使用...
  • IP欺骗攻击原理及如何修改IP

    千次阅读 2021-05-01 11:49:07
    IP欺骗包括把一台计算机伪装成别人机器的IP地址的这种情况,所以IP欺骗最基本的方法就是搞清楚一个网络的配置,然后改变自己的IP地址。 (2)源路由攻击 源路由可使信息包的发送者将此数据包要经过的路径写在数据包...
  • 网络的普及给人们提供了极大的便利,利用互联网工作学习,购物游戏以成为日常必不可少的一部分,太多的事情或者操作需要通过网络来完成,但它带来方便的同时也出现了许多的网络问题,这其中关于IP地址受限或IP被封禁...
  • 求助各位,服务器IP别人域名解析怎么屏蔽?现在碰到一个难题想请大家帮帮忙,,最近我的网站IP被另一个域名解析了并且可以访问,请问大家怎么才可以阻止其他域名解析我站的IP呢,,我查询了一些资料,说主机头可以解决这个...
  • 家里的朋友怎么上网?比如像边肖这样搞互联网很麻烦,因为在家上网工作,用电脑,特别是虚拟机的ip,本来绑定到公司的ip,很麻烦。不过毕竟家里的ip和公司的不一样,...1.检查虚拟网络编辑器。 这里先检查一下自...
  • 虚拟磁盘

    2021-08-01 01:56:41
    虚拟磁盘(Virtual disk),就是在本地电脑里面虚拟出一个远程电脑里面的磁盘。感觉像是在本机上的硬盘一样。其实它没在本机上。网络虚拟磁盘iSCSI加大网吧客户机硬盘容量,高速安全稳定iSCSI Cake主要用于网吧共享...
  • 先说答案:当然是可以告诉别人IP地址跟门牌号一样它就是网络世界的门牌号本文篇幅较长,大概5000多字,其中会涉及到:私有IP地址;公有IP地址;匿名IP地址;DNS服务器;域名;防火墙等等。当然,我都会以通俗易懂...
  • 什么是IP地址、IP协议?

    万次阅读 多人点赞 2019-06-20 13:28:19
    什么是IP地址? IP地址协议 互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(英语:IP Address),是分配给用户上网使用的网际协议(英语:Internet Protocol, IP)的设备的...
  • 使用代理IP实现爬虫

    2021-02-01 22:49:52
    比如限制单个ip一秒或者几秒内访问服务器几次,超过这个次数就把这个ip拉进"黑名单",我们一般自己的网络只有一个ip,ip封了就没办法继续访问这个网站了,那我们怎么办呢,我们可以使用别人ip去访问啊,这样就算封了...
  • VM虚拟机移动后IP修改,要做一些什么操作,就可以在自己电脑上使用了 第一步:我们打开虚拟机 你要在虚拟机文件的里面打开你创建保存的虚拟机文件: 打开后是这样的: 你可以打开并且允许虚拟机了,但是他就是连不...
  • 配置apache基于ip虚拟主机: 1. 首先打开 apache 下的 conf 文件夹中的 httpd.conf 文件找到下面的文字: 2. 打开的时候第二行前面有一个#这是文件中的注释,将第二行的“#”去掉,然后就打开了虚拟主机,可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,130
精华内容 14,052
关键字:

虚拟别人的ip