当前位置: 首页 > >

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


?


修改虚拟IP

在网卡eth1上添加一个虚拟ip?192.168.26.74


?


1.添加ip


[root@zw-test-db mastermha]#/sbin/ip addr add 192.168.26.74/32 dev eth1


?


2.查看添加的虚拟ip


[root@zw-test-db mastermha]# ip addr


1: lo: mtu 65536 qdisc noqueue state UNKNOWN?


? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00


? ? inet 127.0.0.1/8 scope host lo


? ? inet6 ::1/128 scope host?


? ? ? ?valid_lft forever preferred_lft forever


2: eth1: mtu 1500 qdisc mq state UP qlen 1000


? ? link/ether 00:50:56:a3:6f:08 brd ff:ff:ff:ff:ff:ff


? ? inet 192.168.26.233/24 brd 192.168.26.255 scope global eth1


? ??inet 192.168.26.74/32 scope global eth1 ?#这个ip就是我刚新加的


? ? inet6 fe80::250:56ff:fea3:6f08/64 scope link?


? ? ? ?valid_lft forever preferred_lft forever


?


3.ping一下看新加的虚拟ip能否ping通


[root@zw-test-db mastermha]# ping 192.168.26.74


PING 192.168.26.74 (192.168.26.74) 56(84) bytes of data.


64 bytes from 192.168.26.74: icmp_seq=1 ttl=64 time=0.028 ms


64 bytes from 192.168.26.74: icmp_seq=2 ttl=64 time=0.029 ms


64 bytes from 192.168.26.74: icmp_seq=3 ttl=64 time=0.020 ms


64 bytes from 192.168.26.74: icmp_seq=4 ttl=64 time=0.023 ms


?


4.比如要想删除刚添加的虚拟ip就用如下命令:


[root@zw-test-db mastermha]#/sbin/ip addr del 192.168.26.74/32 dev eth1


?


5.?为了防止下次*粽也坏教砑拥男槟鈏p,可以把命令加到/etc/rc.loca里面


/sbin/ip addr add 192.168.26.74/32 dev eth1


?


自动切换流程


  (1)、主机默*蠖凇⑼馔槟釯P,当主机的MySQL、Nginx无法访问或服务器宕机,主机上的failover.sh守护进程会自动摘除自己绑定的内、外网虚拟IP(如果主机上的failover.sh死掉,无法摘除自己绑定的虚拟IP也没关系),备机上的failover.sh守护进程会自动接管备机原来绑定的内、外网虚拟IP,并发送ARPing包给内、外网网关更新MAC,强行接管。
  (2)、备机绑定虚拟IP后,会发送ARPing包给内、外网网关,通知网关更新虚拟IP的MAC地址为备机的MAC地址,从而保证了切换后能够通过虚拟IP及时访问到备机。
  (3)、如果主机的MySQL、Nginx启动起来,全部恢复正常访问,主机上的failover.sh守护进程会检测主机上的MySQL数据是否已经完全从备机上同步过来。如果同步延迟时间为0,主机会自动接管内、外网虚拟IP,并发送ARPing包给内、外网网关,而备机也会自动摘除内、外网虚拟IP。
  (4)、整个切换流程均由failover.sh自动完成,无需人工处理。?


?


ARP

首先我们需要先大致了解一下MAC地址,MAC(Media Access Control, 介质访问控制)地址是烧录在Network Interface Card(网卡,NIC)里的,也叫硬件地址,是由48比特长(6字节),16进制的数字组成.0-23位叫做组织唯一标志符(organizationally unique ,是识别LAN(局域网)节点的标识.24-47位是由厂家自己分配。网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。


如果你的PC中安装有多个网卡,那么相对于每块网卡Ethernet? adapter项所显示的内容都会有所不同,相信大多数PC上显示的都是“本地连接”,这是中文版WIDNOWS XP系统中以太网卡的默认命名。此处Physical Address项目所显示的就是“本地连接”的MAC地址。


  在以太网中,如果主机A需要向主机B发送数据,在发送前必须先解决一个问题??我怎么才能知道主机B“位置”呢?可能有人会说我知道主机B的IP地址啊……,但实际上,在以太网环境中数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。


  ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
  在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,我们可以使用arp ?a命令查看当前缓存表


我们以主机A(192.168.1.5)向主机B(192.168.1.1)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.1的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.1.1的MAC地址是00-aa-00-62-c6-09”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。


  下面我们通过一个实例来简单说明一下ARP协议是如何工作的:如下图,小编首先使用arp ?d命令将ARP缓存表清空,第二步Ping一个IP地址192.168.99.252,第三步使用arp ?a命令查看ARP缓存表,这时表中出现了一条? 192.168.99.252? 00-19-21-0a-95-9d? dynamic? 记录,该条记录的类型为Dynamic,意思是说,这条记录是动态产生的。ARP记录也会出现静态的记录条目,相应的类型为static。正如前面所说的,ARP缓存表具有老化机制,几分钟后小编再次使用arp ?a命令查看缓存表,刚才的那条记录已经不存在了。


下图是小编使用wireshark(一个抓包工具)抓到的刚才ARP数据包的信息,由于在本机ARP缓存表中没有IP地址192.168.99.252相对应的MAC地址记录,所以在通讯之前系统会向网络中首先发送一个广播包??所有字符都为”f”的MAC地址,用来询问192.168.99.252的MAC地址是什么?局域网中所有的PC都将收到这个广播包,但只有IP地址为192.168.99.252的PC才会对此请求作出回应??告之192.168.99.204我的MAC地址是00:19:21:0a:95:9d,其它PC则将数据包直接丢弃,在发送方知到了目的主机的MAC地址后便可以进行通讯了。



友情链接: