虚拟IP技术 ip地址漂移技术

1.虚拟IP

  在 TCP/IP 的架构下,所有想上网的电脑,不论是用何种方式连上网路,都必须要有一个唯一的 IP-address。事实上IP地址是主机硬件地址的一种抽象,简单的说,MAC地址是物理地址,IP地址是逻辑地址。

  虚拟IP,就是一个未分配给真实主机的IP,也就是说对外提供服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的任意一个都可以连接到这台主机。

  虚拟IP一般用作达到HA(High Availability)的目的,比如让所有项目中数据库链接一项配置的都是这个虚IP,当主服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用服务器。

2.虚拟IP原理

  ARP是地址解析协议,它的作用很简单,将一个IP地址转换为MAC地址,然后给传输层使用。

  每台主机中都有一个ARP高速缓存,存储同一个网络内的IP地址与MAC地址的对应关 系,以太网中的主机发送数据时会先从这个缓存中查询目标IP对应的MAC地址,会向这个MAC地址发送数据。操作系统会自动维护这个缓存。

  在Linux下可以使用arp命令操作ARP高速缓存。

  比如存在物理机A(IP是192.168.192.54 )和物理机器B(IP是192.168.192.40),A作为对外服务的主服务器(比如数据库主库),B作为备份机器,两台服务器之间的通信是通过 Heartbeat,即主服务器会定时的给备份服务器发送数据包,告知主服务器服务正常,当备份服务器在规定时间内没有收到主服务器的 Heartbeat,就会认为主服务器宕机,则备份服务器就会升级为主服务器。假设物理机A的ARP缓存如下:

  另外物理机器B(IP是192.168.192.40)的ARP缓存如下:

  当机器B通过BeatHeart得知机器A对外服务质量低于预期的时候(比如发生故障,服务无响应),会将自己的ARP缓存发送出去,让路由器修改 路由表,告知虚拟地址应该指向我(物理机器B,192.168.192.40),这时候,外界再次访问虚拟IP的时候,机器B会变成主服务器,而A降级为 备份服务器。这就完成了主从机器的自动切换,这一切对外界是透明的。

用LVS来分析过程

1、VIP(virtual ip):用来提供virtual server服务的ip地址。分别绑定在Director一个物理网卡上(对外接收请求包)和RS的回环设备上(回环设备需要绑定两个ip,一个是127.0.0.1,另一个就是vip)。

2、DIP(director ip):与vip绑定在一个物理网卡上,用来转发请求包到RS的RIP对应的mac上,此设备可以通过arp请求获取RIP对应的mac地址。

3、RIP(real server ip):绑定在RS上的一个物理网卡上,用来接收从Directory转发过来的请求包。

  虚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的机器。

实例设置虚ip漂移 

  我们可以通过 Keepalived 来实现这个过程。 Keepalived 是一个基于 VRRP 协议(Virtual Router Redundancy Protocol,即虚拟路由冗余协议)来实现的LVS(负载均衡器)服务高可用方案,可以利用其来避免单点故障。

  一个 LVS 服务会有2台服务器运行 Keepalived,一台为主服务器(MASTER),另一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master,保证路由器的高可用,继续提供服务,从而保证了高可用性。

先来准备两台机器,IP地址如下:

lc1: 172.24.8.101
lc7: 172.24.8.107

  我们现在要实现添加一个虚IP:172.24.8.150,当 lc1 机器正常时,172.24.8.150 指向 lc1,当 lc1 出现故障时指向 lc7

  此时通过 ping 可以看到 172.24.8.150 是无法 ping 通的。

在这两台机器上分别安装 Keepalived

$ sudo yum install -y keepalived

配置 Keepalived

lc1 的配置  

$ cat keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface enp7s0f0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.24.8.150
    }
}

lc7 的配置  

vrrp_instance VI_1 {
    state MASTER
    interface enp7s0f0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.24.8.150
    }
}

启动 lc1 和 lc7 上的 Keepalived 服务

sudo systemctl restart keepalived.service

将 Keepalived 加入开机启动项

sudo systemctl enable keepalived.service

测试

  通过 ping 172.24.8.150 发现已经可以通了。  

 查看 lc1 的 IP信息

$ ip addr show enp7s0f0
2: enp7s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 6c:92:bf:0d:09:47 brd ff:ff:ff:ff:ff:ff
    inet 172.24.8.101/24 brd 172.24.8.255 scope global enp7s0f0
       valid_lft forever preferred_lft forever
    inet 172.24.8.150/32 scope global enp7s0f0
       valid_lft forever preferred_lft forever
    inet6 fe80::6e92:bfff:fe0d:947/64 scope link
       valid_lft forever preferred_lft forever

  其中可以看到 inet 172.24.8.150/32 scope global enp7s0f0,说明现在 lc1 是作为虚拟IP的 master 来运行的。  

 查看 lc7 的 IP信息

$ ip addr show enp7s0f0
2: enp7s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 6c:92:bf:0d:21:49 brd ff:ff:ff:ff:ff:ff
    inet 172.24.8.107/24 brd 172.24.8.255 scope global enp7s0f0
       valid_lft forever preferred_lft forever
    inet6 fe80::6e92:bfff:fe0d:2149/64 scope link
       valid_lft forever preferred_lft forever

  此时 lc7 中没有虚拟IP 的信息。  

验证 Failover

 我们手动停止 lc1 上的 Keepalived 服务:

sudo systemctl stop keepalived.service

 此时 lc1 的 IP信息为:

$ ip addr show enp7s0f0
2: enp7s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 6c:92:bf:0d:09:47 brd ff:ff:ff:ff:ff:ff
    inet 172.24.8.101/24 brd 172.24.8.255 scope global enp7s0f0
       valid_lft forever preferred_lft forever
    inet6 fe80::6e92:bfff:fe0d:947/64 scope link
       valid_lft forever preferred_lft forever

  可以看到 lc1 已经不在有 虚拟IP 的信息了。  

  

 查看 lc7 的 IP信息:

ip addr show enp7s0f0
2: enp7s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 6c:92:bf:0d:21:49 brd ff:ff:ff:ff:ff:ff
    inet 172.24.8.107/24 brd 172.24.8.255 scope global enp7s0f0
       valid_lft forever preferred_lft forever
    inet 172.24.8.150/32 scope global enp7s0f0
       valid_lft forever preferred_lft forever
    inet6 fe80::6e92:bfff:fe0d:2149/64 scope link
       valid_lft forever preferred_lft forever

  可以看到 lc7 的 IP信息中 已经有虚拟IP 172.24.8.150 的信息了。

  此时如果再把 lc1 上的 Keepalived 启动,可以看到 虚拟IP 又重新绑定到了 lc1 上。

  

原文地址:https://www.cnblogs.com/myseries/p/11409895.html

时间: 2024-08-07 14:32:21

虚拟IP技术 ip地址漂移技术的相关文章

浮动IP地址(Float IP)与 ARP欺骗技术

浮动IP地址: 一个网卡是可以添加多个IP的. 就是多个主机工作在 同一个集群中,即两台主机以上.每台机器除了自己的实IP外,会设置一个浮动IP,浮动IP与主机的服务(HTTP服务/邮箱服务)绑在一起的.即应用服务在哪台机器上启动,浮动IP也在这台机器上激活,这台机器看上去就有两个IP地址.对于客户端它只需访问浮动IP即可. 即使主机端的机器由于故障发生切换,客户端只要连接上浮动IP,就可以找到主机端的服务. 好处就是一旦其中一台机器不能工作了,可以很快的将服务切换到另外一台主机上.提高系统的冗

IP 地址漂移

1.概念 应用访问虚拟ip,当主服务器正常工作时,虚拟ip指向主服务器,当主服务器宕掉后,虚拟ip自动指向从服务器,当主服务器被人修好后,再自动指向主服务器, 这种虚拟ip的指向方式称为ip地址漂移. 2.优点 应用只需要访问vip即可,切换后后数据库时不影响对应用的访问. 3.实现 在主从服务器上安装keepalived来实现ip地址漂移.

13、IP类别和地址

IP类别和地址 1.动机 大型组织将使用多种联网技术 组织间的沟通很重要 通用服务-任何两台计算机都应该能够通信 但是,不同的网络技术不能仅连接在一起 网络互联 互连异构网络并提供通用服务 用于连接异构网络的基本硬件组件是路由器 硬件:路由器连接不同的网络 软件:Internet协议通过创建单个虚拟网络来提供通用服务 2.网络结构 尽管单个路由器可以连接多个网络,但是大多数组织使用多个路由器 虚拟网络 互联协议 TCP / IP Internet协议 始于1970年代 互联网在1990年代已进入

【DCN】端口与地址绑定技术

端口与地址绑定技术 与AM技术不同之处在于,AM端口下绑定的MAC或IP能够通信,不限制绑定的MAC在其它接口下通信. 开启MAC-CPU学习模式 mac-address-learning cpu-control 静态Swithport port-security 端口配置模式 Switchport port-security                                                                   <开启端口绑定功能> Switchp

Nat-----网络地址转换技术

Nat-------网络地址转换技术 一:实验拓扑 二:Pc机IP地址划分 Pc1   192.168.10.10   255.255.255.0    192.168.10.1 Pc2   192.168.10.10    255.255.255.0   192.168.10.1 Pc3   192.168.10.10    255.255.255.0   192.168.10.1 Pc4   192.168.10.10    255.255.255.0   192.168.10.1   三:

NAT(地址转换技术): Network Address Translation Protocol解析

版权声明:本文为@小小呆原创文章,出处! https://blog.csdn.net/gui951753/article/details/79593307 目录 NAT产生背景ip地址基础知识NAT技术的工作原理和特点静态NAT动态NATNAT重载(经常应用到实际中)NAT技术的优缺点优点缺点NAT穿越技术应用层网关(ALG)ALG的实际应用NAT技术的未来参考文献 NAT产生背景 今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣.他们浏览新闻,搜索资料,下载软件,广交新朋,分享信

Windows Azure 配置实现虚拟机外网IP绑定(云服务)

我们上一篇介绍了如何对已存在的虚拟网络的外网IP做绑定,今天主要介绍配置实现虚拟机外网绑定,两者区别在于一个已存在,一个不存在,如果不存在的话,我们需要新建一个云服务,同时对新建的云服务做标记,标记后,可创建对应得虚拟机来完成外网IP绑定,具体见下:首先注意配置保留虚拟机外网IP需要注意以下事项 一. 操作前的注意事项: 1. 如果虚拟机要使用虚拟网络,只能在Regional Vnet中使用ReservedIP,已经有部署的基于地缘组的虚拟网络无法直接转换为Regional Vnet 2. 这个

Java获取本机的IP与MAC地址

有些机器有许多虚拟的网卡,获取IP地址时会出现一些意外,所以需要一些验证: 1 // 获取mac地址 2 public static String getMacAddress() { 3 try { 4 Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces(); 5 byte[] mac = null; 6 while (allNetInterfaces.hasMoreEle

基于CentOS6.6配置Apache虚拟主机(多IP、多主机、多端口)

Apache配置虚拟主机(多IP.多主机.多端口)本文以CentOS6.6 作服务端,Win7作客户端.参考网上诸多文档加以实验,现总结如下.如有问题,有意还请指出.谢谢! [一 基于多IP地址]实验:Server=CentOS6.6,Client=win7.我以root权限直接操作了.1.安装和起服务httpd(即:Apache)[[email protected] ~]# yum install httpd -y    <==yum安装httpd[[email protected] ~]#