概述
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是否成功
[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
最后
以上就是尊敬石头为你收集整理的lvs原理以及配置lvs+ldirectord lvs+keepalived的全部内容,希望文章能够帮你解决lvs原理以及配置lvs+ldirectord lvs+keepalived所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复