lvs原理以及配置lvs+ldirectord lvs+keepalived

lvs指的是Linux虚拟服务器,是一个虚拟的服务器集群系统
LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。
LVS的工作原理如下:
在这里插入图片描述
负载均衡层:
  处于整个集群的最前端,由一台或者多台调度器构成,LVS模块部署在调度器上,调度器根据既定的算法来实现将网络请求调度到不同后端服务器,完成对应的功能。
服务器集群层:
  由一组实际运行着应用服务的服务器构成,后端服务器支持的服务包括,web服务,邮件服务,FTP服务,DNS服务等一个或者多个,每个服务器之间可以通过LAN或者更大范围的WAN相连,在实际的应用场景中,调取服务器也可以作为应用服务器提供服务。
共享数据层:
  向服务器集群中的所有real server提供共享存储空间和内容一致性的存储区域。一般是由磁盘阵列组成,提供数据的一致性。也可以由NFS提供。目前来说磁盘阵列更为适合,NFS受网络影响较大,不太稳定。
负载均衡技术
  当前负载均衡技术有很多实现方案,例如基于DNS域名依次轮流解析、基于客户端调度访问、基于应用层系统负载的调度,还有基于IP地址的调度等,相比较而言IP负载均衡技术更为成熟和效率。LVS的IP负载均衡技术是依赖于ipvs内核模块来实现的,ipvs是LVS集群系统的核心软件,它的主要作用是:安装在调度器上,同时在调度器上虚拟出一个IP地址(这个地址可以正常访问互联网),用户必须通过这个虚拟的IP地址访问集群服务。这个虚拟IP一般称为LVS的VIP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中根据不同的调度算法计算选取一个服务节点响应用户的请求。
三种工作模式
DR 模式:
客户端请求 VIP 时,通过因特网先到达调度器,调度器会根据调度算法将
这个请求转发给真实的服务器,转发的过程中仅仅是修改了数据报文中的 MAC
地址,因此 DR 模式需要调度器与真实服务器在同一个物理网络。当真实服务器
接受到数据请求后进行处理,然后发送响应给客户端,但此时的源 IP 为真实的
服务器 IP,即 RIP,目标 IP 为客户端 IP,即 CIP,但是客户端并没有请求
RIP,所以客户端是不会接收数据响应,所以,就要修改源 IP 为 VIP,但是不
可以将 VIP 设置在出口网卡上,否则会响应客户端的 arp 请求。失去了调度的
意义,因此要在 lo 接口配置 VIP,并且将 VIP 隐蔽,即设置 NETMASK 为
255.255.255.255,这样,数据响应从真实服务器出去的时候的源 IP 是 VIP,目
的 IP 是 CIP,客户端就会接收次数据响应,从真实服务器到客户端是通过
Internet
优点:性能最高
缺点:要求调度器的网卡必须与物理网卡在一个物理网段上
NET 模式:
客户端请求 VIP 时,通过因特网到达调度器,调度器根据调度算法转发给
真实的服务器,转发的过程中修改了目的 IP,因为客户端请求的是 VIP,而 VIP
在调度器,真实的服务器并不会做出响应,因此需要修改目的 IP 为 RIP,这
时,客户端会对请求做出回应(设置真实服务器的网关为调度器),此时,回应
的源 IP 为 RIP,调度器再修改源 IP 为 VIP,再次发送给客户端
缺点:请求报文和响应报文都经过调度器,这会使调度器成为一个瓶颈,所
以当网站访问量较大时,调度器的压力会比较大。
优点:配置简单
Tunnel 模式:
客户端请求 VIP 时,通过因特网到达调度器,调度器收到数据包后进行封
装,即在原有的包头加上 IP Tunnel 的包头,然后通过调度算法发送给真实服
务器,真实服务器再进行拆包,并且与调度器达成协议,从而对请求做出响
应,直接由公网达到客户端,此时的源 IP 是 VIP,原理同 DR 模式。
优点:相对 NET 模式来说,可以支持更大的访问量
缺点:需要隧道协议

LVS实验
直接路由模式(DR模式)
本实验需三台服务器:
调度服务器: 172.25.15.1 server1
真实服务器1: 172.25.15.2 server2
真实服务器2: 172.25.15.3 server3
根据工作原理,首先,我们需要配置负载均衡层,这里我们用的是ipvs来实现的
1.安装ipvsadm软件包,但是这个软件包不在yum仓库里,所以需要重新配置yum仓库,经查找发现,这个软件包在镜像下的LoadBalancer目录下,因此重新配置yum源,这里我用server1作为ipvsadm服务器,因此,yum源应在server1重新配置:

[rhel-source]
	name=Red Hat Enterprise Linux $releasever - $basearch - Source
	baseurl=http://172.25.15.250/rhel6.5
	enabled=1
	gpgcheck=1
	gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


	[LoadBalancer]
	name=LoadBalancer
	baseurl=http://172.25.15.250/rhel6.5/LoadBalancer
	enable=1

配置完成后,再执行安装命令

yum install ipvsadm -y

安装完成后,可以使用ipvsadm -l来列出内核虚拟服务器表,可以发现,安装完成后什么也没有,需自行添加

[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

2.添加虚拟服务器和真实服务器

ipvsadm -A -t 172.25.15.100:80 -s rr

-A表示添加虚拟服务器,-t说明虚拟服务器提供的是TCP连接 -s是使用调度时的算法,rr表示调度算法采用轮询模式

[root@server1 ~]# ipvsadm -a -t 172.25.15.100:80 -r 172.25.15.2:80 -g

-a:在内核虚拟服务器表的一条记录里面添加一条新的真实服务器记录,-r:真实服务器,-g:指定LVS工作模式为直接路由模式(DR模式)

[root@server1 ~]# ipvsadm -a -t 172.25.15.100:80 -r 172.25.15.3:80 -g 

再次查看内核虚拟服务器表

[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.15.100:http rr
  -> server2:http                 Route   1      0          0         
  -> server3:http                 Route   1      0          0

可以看到server2和server3两台真实服务器已被成功添加

3.给ipvsadm所在的服务器添加这个虚拟ip,ipvsadm所在的服务器需要通过这个虚拟IP来掩盖真实IP,有效减少了DDOS攻击。此时,server1服务器可以完成调度的作用,但是不能与真实主机通信,也就不能将真实主机上的数据返回至客户端,因此需要给真实主机添加这个虚拟IP

ip addr add 172.25.15.100/24 dev eth0

查看添加的虚拟IP是否成功

扫描二维码关注公众号,回复: 5394046 查看本文章
[root@server1 ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:3a:4c:7a brd ff:ff:ff:ff:ff:ff
    inet 172.25.15.1/24 brd 172.25.15.255 scope global eth0
    inet 172.25.15.100/24 scope global secondary eth0
    inet6 fe80::5054:ff:fe3a:4c7a/64 scope link 
       valid_lft forever preferred_lft forever

4.给真实服务器添加刚才在调度服务器的虚拟ip
真实服务器1:

[root@server2 ~]#ip addr add 172.25.15.100/32 dev eth0
[root@server2 ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:cd:5b:63 brd ff:ff:ff:ff:ff:ff
    inet 172.25.15.2/24 brd 172.25.15.255 scope global eth0
    inet 172.25.15.100/32 scope global eth0
    inet6 fe80::5054:ff:fecd:5b63/64 scope link 
       valid_lft forever preferred_lft forever

真实服务器2:

[root@server3 ~]#ip addr add 172.25.15.100/32 dev eth0
[root@server3 ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:3a:36:74 brd ff:ff:ff:ff:ff:ff
    inet 172.25.15.3/24 brd 172.25.15.255 scope global eth0
    inet 172.25.15.100/32 scope global eth0
    inet6 fe80::5054:ff:fe3a:3674/64 scope link 
       valid_lft forever preferred_lft forever

为什么设置子网掩码为32位,请看上面的三种工作模式原理
5.给两台真实服务器分别配置http服务并写入简单的网页
此时可以在另一台主机上进行测试:
curl 172.25.15.100 访问100的虚拟服务器时,会有三种可能,有可能进入的是server1,server1会完成调度,也有可能进入的是真实服务器serve2或者server3,如果进入的是真实服务器,那就失去的调度的意义,因此还需要给真实服务器做火墙策略,用于更改mac地址。
6.给真实服务器安装arptables_jf软件,并添加策略。
真实服务器1:

[root@server2 html]# yum install -y arptables_jf  #安装
[root@server2 html]# arptables -A IN -d 172.25.15.100 -j DROP  #所有以172.25.15.100为目的地址而进入防火墙的通通DROP
[root@server2 html]# arptables -A OUT -s 172.25.15.100 -j mangle --mangle-ip-s 172.25.15.2   #所有以172.25.15.100作为源地址的数据出去时通通以172.25.15.2出去
[root@server2 html]# arptables -L  #查看策略
Chain IN (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       
DROP       anywhere             172.25.15.100        anywhere           anywhere           any    any        any        any       

Chain OUT (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       
mangle     172.25.15.100        anywhere             anywhere           anywhere           any    any        any        any       --mangle-ip-s server2 

Chain FORWARD (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       
[root@server2 html]# /etc/init.d/arptables_jf save   #保存策略
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]

真实服务器2:

[root@server3 html]# yum install -y arptables_jf 
[root@server3 html]# arptables -A IN -d 172.25.15.100 -j DROP
[root@server3 html]# arptables -A OUT -s 172.25.15.100 -j mangle --mangle-ip-s 172.25.15.3
[root@server3 html]# arptables -L
Chain IN (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       
DROP       anywhere             172.25.15.100        anywhere           anywhere           any    any        any        any       

Chain OUT (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       
mangle     172.25.15.100        anywhere             anywhere           anywhere           any    any        any        any       --mangle-ip-s server3 

Chain FORWARD (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       
[root@server3 html]# /etc/init.d/arptables_jf save
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]

测试:用另一台主机访问172.25.15.100

[root@foundation15 ~]# curl 172.25.15.100
server3
[root@foundation15 ~]# curl 172.25.15.100
server2
[root@foundation15 ~]# curl 172.25.15.100
server3
[root@foundation15 ~]# curl 172.25.15.100
server2
[root@foundation15 ~]# curl 172.25.15.100
server3
[root@foundation15 ~]# curl 172.25.15.100
server2

在调度服务器上我们可以看到调度的次数

[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.15.100:80 rr
  -> 172.25.15.2:80               Route   1      0          3             #server2被访问了3次
  -> 172.25.15.3:80               Route   1      0          3             #server3被访问了3次

隧道模式:
练习隧道模式之前要先清空server1配置的直接路由模式:

[root@server1 ~]# ipvsadm -C
[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

1.添加虚拟服务器和真实服务器

[root@server1 ~]# ipvsadm -A -t 172.25.15.100:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.15.100:80 -r 172.25.15.2:80 -i
[root@server1 ~]# ipvsadm -a -t 172.25.15.100:80 -r 172.25.15.3:80 -i  #-i表示指定LVS的工作模式为隧道模式

2.配置隧道模式:
调度服务器:

[root@server1 ~]# modprobe ipip
[root@server1 ~]# ip addr del 172.25.15.100/24 dev eth0
[root@server1 ~]# ip addr add 172.25.15.100/24 dev tunl0
[root@server1 ~]# ip link set up tunl0
[root@server1 ~]# ip addr show tunl0
3: tunl0: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 172.25.15.100/24 scope global tunl0
    [root@server1 ~]# ip addr show tunl0
3: tunl0: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 172.25.15.100/24 scope global tunl0
[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.15.100:80 rr
  -> 172.25.15.2:80               Tunnel  1      0          0         
  -> 172.25.15.3:80               Tunnel  1      0          0 

真实服务器1:

[root@server2 html]# modprobe ipip
[root@server2 html]# ip addr del 172.25.15.100/32 dev eth0
[root@server2 html]# ip addr add 172.25.15.100/32 dev tunl0
[root@server2 html]# ip addr show 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:cd:5b:63 brd ff:ff:ff:ff:ff:ff
    inet 172.25.15.2/24 brd 172.25.15.255 scope global eth0
    inet6 fe80::5054:ff:fecd:5b63/64 scope link 
       valid_lft forever preferred_lft forever
3: tunl0: <NOARP> mtu 1480 qdisc noop state DOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 172.25.15.100/32 scope global tunl0
[root@server2 html]# ip link set up tunl0

真实服务器2:

[root@server3 html]# modprobe ipip
[root@server3 html]# ip addr del 172.25.15.100/32 dev eth0
[root@server3 html]# ip addr add 172.25.15.100/32 dev tunl0
[root@server3 html]# ip link set up tunl0
[root@server3 html]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:3a:36:74 brd ff:ff:ff:ff:ff:ff
    inet 172.25.15.3/24 brd 172.25.15.255 scope global eth0
    inet6 fe80::5054:ff:fe3a:3674/64 scope link 
       valid_lft forever preferred_lft forever
3: tunl0: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 172.25.15.100/32 scope global tunl0

3.真实服务器需要关闭反向过滤功能

sysctl -a | grep rp_filter   查看功能是否开启,=0表示关闭,=1表示开启,需要把所有的改为关闭
sysctl -w  xxxxxxxxxx=0     注意:=号两边不能加空格
default.rp_filter需要在配置文件里设置为0才生效,配置文件为/etc/sysctl.conf
sysctl -p

测试:
在另一台主机访问172.25.15.100

[root@foundation15 ~]# curl 172.25.15.100
server3
[root@foundation15 ~]# curl 172.25.15.100
server2
[root@foundation15 ~]# curl 172.25.15.100
server3
[root@foundation15 ~]# curl 172.25.15.100
server2

调度服务器查看调度结果:

[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.15.100:http rr
  -> server2:http                 Tunnel  1      0          2         
  -> server3:http                 Tunnel  1      0          2  

ldirectord
作用:现在,我们假设有两台真实服务器,server2和server3,server1充当的是调度器,那么当server2或者server3出现故障时,客户端就会一次访问的页面是正常的,一次访问的页面是崩溃的,这显然不是一个企业该出现的状况。因此就有了ldirectord的诞生,它主要的作用就是,当某一服务器出现故障时,在ipvsadm内核虚拟服务器表中就会删掉出现故障的服务器的记录,避免用户的页面出现崩溃的现象,如果两个服务器都坏掉了,那么他会访问充当调度器的http页面,我们可以在这个页面给用户显示服务器维护中。

第一步:
指定LVS的工作模式为直接路由模式,具体操作已经在上面有做过,这里不再重复
第二步:
安装ldirectord需要ldirectord的安装包,并且还需要很多依赖包,ldirectord的安装包需要自行下载,依赖包在镜像里面的高可用目录下,需要给server1添加yum源,具体操作如下:
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.15.250/rhel6.5/HighAvailability
enable=1

[root@server1 home]# cat /etc/yum.repos.d/rhel-source.repo 
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.15.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.15.250/rhel6.5/LoadBalancer
enable=1

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.15.250/rhel6.5/HighAvailability
enable=1
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y   安装lidrectord

第三步:
安装成功后,可以通过命令rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm 来查看ldirectord的配置文件

[root@server1 home]# rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm
warning: ldirectord-3.9.5-3.1.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 7b709911: NOKEY
/etc/ha.d
/etc/ha.d/resource.d
/etc/ha.d/resource.d/ldirectord
/etc/init.d/ldirectord
/etc/logrotate.d/ldirectord
/usr/lib/ocf/resource.d/heartbeat/ldirectord
/usr/sbin/ldirectord
/usr/share/doc/ldirectord-3.9.5
/usr/share/doc/ldirectord-3.9.5/COPYING
/usr/share/doc/ldirectord-3.9.5/ldirectord.cf
/usr/share/man/man8/ldirectord.8.gz

配置文件需要将/usr/share/doc/ldirectord-3.9.5/ldirectord.cf文件复制到/etc/ha.d下

[root@server1 home]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/

将复制过来的配置文件更改为自己需要的virtual和real

25 virtual=172.25.15.100:80
 26         real=172.25.15.2:80 gate
 27         real=172.25.15.3:80 gate
 删掉28行多与的real
 37         #receive="Test Page"
 38         #virtualhost=www.x.y.z
[root@server1 html]# /etc/init.d/ldirectord start
Starting ldirectord... success

第四步:
给server1写一个简单的页面,告知用户服务器维护中。如果出现连接不上的问题,可能时端口号没有改过来,可以用命令netstat-tnlp查看http端口号是否正确

测试:
首先,确保server2和server3的http都是正常工作的,然后curl 172.25.15.100测试是否可以正常轮询

[root@foundation15 Desktop]# curl 172.25.15.100
server3
[root@foundation15 Desktop]# curl 172.25.15.100
server2
[root@foundation15 Desktop]# curl 172.25.15.100
server3
[root@foundation15 Desktop]# curl 172.25.15.100
server2

然后,将server2或server3的http关闭其中一个,然后curl172.25.15.100测试是否可以正常访问服务器,不出现崩溃

[root@server2 html]# /etc/init.d/httpd stop
Stopping httpd:                                            [  OK  ]
[root@foundation15 Desktop]# curl 172.25.15.100
server3
[root@foundation15 Desktop]# curl 172.25.15.100
server3
[root@foundation15 Desktop]# curl 172.25.15.100
server3

最后,将server2和server3的http全部关闭,然后curl 172.25.15.100测试是否出现了服务器维护中的网页

[root@server3 html]# /etc/init.d/httpd stop
Stopping httpd:                                            [  OK  ]
[root@foundation15 Desktop]# curl 172.25.15.100
服务器维护中。。
[root@foundation15 Desktop]# curl 172.25.15.100
服务器维护中。。

Keepalived
官方给出的简介:
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
本次实验的作用:
keepalived实现了高可用和服务器健康检测的集合,它可以实现ldirectord的功能,也可以实现当调度器坏掉时,虚拟服务器的IP漂移即高可用性。因此,本次实验需要四台虚拟机,将第四台服务器的主机名改为server4,IP改为172.25.15.4,将server1的yum源拷贝到server4的yum源,因为server4是server1的备份,所以内容应该相同。
第一步:
下载keepalived包,并拷到server1和server4上,解压keepalived,解压完成后会生成一个目录

[root@server1 home]# ls
keepalived-2.0.6.tar.gz  ldirectord-3.9.5-3.1.x86_64.rpm
[root@server1 home]# tar zxf keepalived-2.0.6.tar.gz 
[root@server1 home]# ls
keepalived-2.0.6  keepalived-2.0.6.tar.gz  ldirectord-3.9.5-3.1.x86_64.rpm

第二步:
编译keepalived
编译前需要安装一系列环境支持:
yum install kernel-devel openssl-devel gcc make -y
编译三部曲:
注意:编译需在解压生成的目录下

./configure --prefix=/usr/local/keepalived --with-init=SYSV    #添加系统启动方式模块
[root@server1 keepalived-2.0.6]# make && make install

第三步:
给keepalived启动脚本做一个软链接,方便启动
做软链接前先给启动脚本可执行权限,脚本才能启动:

[root@server1 ~]# cd /usr/local/keepalived/etc/rc.d/init.d/
[root@server1 init.d]# ll
total 4
-rw-r--r-- 1 root root 1308 Feb 20 12:49 keepalived
[root@server1 init.d]# chmod +x keepalived 
[root@server1 init.d]# ll
total 4
-rwxr-xr-x 1 root root 1308 Feb 20 12:49 keepalived
[root@server1 init.d]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

给配置文件做一个软链接:

[root@server1 init.d]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@server1 init.d]# ln -s /usr/local/keepalived/etc/keepalived/ /etc/

给环境变量文件做一个软链接:

[root@server1 sysconfig]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/

第四步:
为了看到keepalived的效果,先将之前的ldirectord关闭,删除虚拟IP

[root@server1 sysconfig]# /etc/init.d/ldirectord stop
Stopping ldirectord... success
[root@server1 sysconfig]# chkconfig ldirectord off
[root@server1 sysconfig]#ip addr del 172.25.15.100/24 dev eth0

修改配置文件:

[root@server1 init.d]# cd /etc/keepalived/
[root@server1 keepalived]# ls
keepalived.conf  samples
[root@server1 keepalived]# vim keepalived.conf 

修改后的内容如下:

  1 ! Configuration File for keepalived
  2 
  3 global_defs {
  4    notification_email {
  5      root@localhost
  6    }
  7    notification_email_from keepalived@localhost
  8    smtp_server 127.0.0.1
  9    smtp_connect_timeout 30
 10    router_id LVS_DEVEL
 11    vrrp_skip_check_adv_addr
 12    # vrrp_strict
 13    vrrp_garp_interval 0
 14    vrrp_gna_interval 0
 15 }
 16 
 17 vrrp_instance VI_1 {
 18     state MASTER
 19     interface eth0
 20     virtual_router_id 51
 21     priority 100
 22     advert_int 1
 23     authentication {
 24         auth_type PASS
 25         auth_pass 1111
 26     }
 27     virtual_ipaddress {
 28         172.25.15.100
 29     }
 30 }
 31 
 32 virtual_server 172.25.15.100 80 {
 33     delay_loop 6
 34     lb_algo rr
 35     lb_kind DR
 36     #persistence_timeout 50
 37     protocol TCP
 38 
 39     real_server 172.25.15.2 80 {
 40         weight 1
 41             connect_timeout 3
 42             retry 3
 43             delay_before_retry 3
 44         }
 45     real_server 172.25.15.3 80 {
 46         weight 1
 47             connect_timeout 3
 48             retry 3
 49             delay_before_retry 3
 50         }
 51     }

启动服务:

[root@server1 keepalived]# /etc/init.d/keepalived start
Starting keepalived:                                       [  OK  ]

第一步到第四步,server1和server4都要做,server4在修改配置文件时,只需在server1的基础上,将state改为BACKUP,将优先级改为50
测试:
在另一台主机上访问172.25.15.100

[root@foundation15 Desktop]# curl 172.25.15.100
server2
[root@foundation15 Desktop]# curl 172.25.15.100
server3
[root@foundation15 Desktop]# curl 172.25.15.100
server2
[root@foundation15 Desktop]# curl 172.25.15.100
server3

查看调度服务器的调度结果

[root@server1 keepalived]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.15.100:http rr
  -> server2:http                 Route   1      0          2         
  -> server3:http                 Route   1      0          2  

当其中一台web服务器down掉,会自动剔除:

[root@server2 html]# /etc/init.d/httpd stop
Stopping httpd:                                            [  OK  ]
[root@foundation15 Desktop]# curl 172.25.15.100
server3
[root@foundation15 Desktop]# curl 172.25.15.100
server3
[root@server1 keepalived]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.15.100:http rr
  -> server3:http                 Route   1      0          4 

当主调度服务器挂掉后,备用调度服务器会顶上:

[root@server1 keepalived]# /etc/init.d/keepalived stop
Stopping keepalived:                                       [  OK  ]
[root@server1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:d7:f8:7a brd ff:ff:ff:ff:ff:ff
    inet 172.25.15.1/24 brd 172.25.15.255 scope global eth0
    inet6 fe80::5054:ff:fed7:f87a/64 scope link 
       valid_lft forever preferred_lft forever
[root@foundation15 Desktop]# curl 172.25.15.100
server3
[root@foundation15 Desktop]# curl 172.25.15.100
server3

猜你喜欢

转载自blog.csdn.net/lm236236/article/details/87562399