Keepalived高可用LVS反向代理服务器

Keepalived是什么?

Keepalived是VRRP在Linux上的一种实现,以守护进程方式运行。
能够更具配置文件自动生成ipvs规则并对各个RS做健康状态监测。

VRRP:Virtual Router Redundancy Protocol,也叫做虚拟路由冗余协议。
他的原理是将多个设备组成一个虚拟路由器。
这些设备之间会通过VRRP协议传递心跳信息以检测设备是否已经故障。
他早期用于网络设备冗余,防止单点故障。
其实通俗来说,就是设备的热备份。
在故障产生的时候,可以省去人为地切换,减少故障时间。

使用Keepalived之前我们需要掌握的知识 常用实现方案:

主备模型:
将多个服务器配置成 一个虚拟路由器,一主多备。
主主模型:
组成多个虚拟路由器,提供多个服务。
虽然本质上都是一主多备,但是角色分配不一样。

主备之间的工作模式:

抢占模式:优先级。
一开始定义成Master,优先级低还是会被抢走。
非抢占模式:先到先得
服务器之间不会根据优先度动态竞选成Master”
除非本王死了,要不然你一辈子都是太子“那种感觉。

Keepalived中的术语:

VRID:虚拟路由器的标识。有相同 VRID 的一组路由器构成一个虚拟路由器。
虚拟 MAC 地址:一个虚拟由器拥有一个虚拟 MAC 地址。
虚拟 MAC 地址的格式为 00-00-5E-00-01-{VRID}。
通常情况下,虚拟路由器回应 ARP 请求使用的是虚拟 MAC 地址,
只有虚拟路由器做特殊配置的时候,才回应接口的真实 MAC 地址。
优先级:VRRP 根据优先级来确定虚拟路由器中每台路由器的地位。
优先级是0-255之间的数值,数字越大优先级越高

VRRP工作过程:

1.选出一个主路由器:看优先级;优先级一样就看ip,谁大谁是Master。
2.发送arp欺骗的IP报文,通知其连接的设备,并开始承担报文转发的任务。
3.周期性发送心跳信息、优先级、还有工作状况。
因为不可能同时将同一个对外的IP地址配置在两台路由器上面。
所以要arp欺骗报文,告诉对方自己的MAC地址给ARP表。

配置Keepalived高可用LVS反向代理后端Web服务器

实验拓扑:


KeepAlived

主机名主机地址安装组件
node1   192.168.2.201,192.168.2.221   Keepalived  
node2   192.168.2.202,192.168.2.222   Keepalived  
node3   192.168.2.203   Apache  
node4   192.168.2.204   Apache  

本文中的服务器使用CentOS7.1,Keepalived-1.2.13
服务器均关闭iptables和selinux

注意: 这里我们node1和node2为什么要设置两个ip? 因为你试想只有一个ip的话,当node1发生故障,ip转移到node2的时候,我们怎么访问node1? 所以192.168.2.201用作固定访问用,实际环境中可以是内网ip地址。 而192.168.2.221则视为keepalived可以转移的公网ip。 (1)node1和node2安装keepalived和ipvsadm [root@node1 ~]# yum install ipvsadm keepalived [root@node2 ~]# yum install ipvsadm keepalived (2)修改网络配置 [root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO="static" DEFROUTE=yes PEERDNS=yes PEERROUTES=yes NAME=eno16777736 DEVICE=eno16777736 ONBOOT=yes IPADDR="192.168.2.201" NETMASK="255.255.255.0" DNS1="192.168.2.1" GATEWAY="192.168.2.1" [root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736:0 TYPE=Ethernet BOOTPROTO="static" NAME=eno16777736:0 ONBOOT=yes IPADDR="192.168.2.211" NETMASK="255.255.255.0" DNS1="192.168.2.1" GATEWAY="192.168.2.1" ONPARENT=yes [root@node1 ~]# service network restart [root@node1 ~]# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.2.201 netmask 255.255.255.0 broadcast 192.168.2.255 inet6 fe80::250:56ff:fe3c:d757 prefixlen 64 scopeid 0x20<link> ether 00:50:56:3c:d7:57 txqueuelen 1000 (Ethernet) RX packets 125436 bytes 31500491 (30.0 MiB) RX errors 0 dropped 6 overruns 0 frame 0 TX packets 234981 bytes 17023789 (16.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.2.211 netmask 255.255.255.0 broadcast 192.168.2.255 ether 00:50:56:3c:d7:57 txqueuelen 1000 (Ethernet) (3)修改keepalived配置(全局配置段和主机配置段) [root@node1 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_HOST1 } vrrp_instance VI_1 { state MASTER interface eno16777736 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.2.221/24 dev eno16777736 label eno16777736:1 } } vrrp_instance VI_2 { state BACKUP interface eno16777736 virtual_router_id 52 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 192.168.2.222/24 dev eno16777736 label eno16777736:2 } } 注意: 1.node2的配置中 将VI_1的改为priority 99,state BACKUP, 将VI_2的改为priority 100,state MASTER!!! 也就是说, VI_1中,node1的优先度是100的MASTER,node2则是优先度99的BACKUP VI_2中,node1的优先度是99的BACKUP,node2则是优先度是100的MASTER 2.这里一个VI就是一个虚拟路由器,所以这里有两个VI,所以组成了两个虚拟路由器。 这样是为了可以实现双主,不会让备份主机处于空闲而造成浪费。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0ef976207589d8f15ba2712e99b302d0.html