LVS要实现的最终目标是:利用Linux操作系统和LVS集群软件实现一个高可用、高性能的、低成本的服务器应用集群。
LVS架设的服务器集群系统由3个部分组成,最前端的是负载均衡层,中间是服务器群组层,底端是数据共享存储层。在用户看来,整个LVS集群系统的所有内部应用结果都是透明的。最终用户只是在使用一个虚拟服务器提供的高性能服务
## 集群:只能有一个来对接服务,不能同时在线
负载均衡:多个同时进行使用,同时在线
LVS的IP负载均衡技术是通过IPVS模块来实现的。IPVS的LVS集群系统的核心软件,它的主要作用是:安装在Director Sever上,同时在DIrecttor Server上虚拟一个IP地址,用户必须通过这个虚拟的IP地址访问服务器。这个虚拟IP一般称为LVS的VIP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Seve列表中选取一个服务节点响应用户的请求。
在用户的请求到达负载调度器之后,调度器如何将请求发送到提供服务的Real Sever节点,而Real Sever节点如何返回数据给用户,是IPVS实现的重点技术。IPVS实现负载均衡的方式由3种,分别是NAT、TUN和DR。
这里着重介绍DR模式及其配置
用直接路由技术实现虚拟服务器。它的连接调度和管理与NAT和TUN相同,但它的报文转发方法右有所不同,DR通过改写请求报文的MAC地址,将请求发送到Real Sever。而Real Sever将响应直接返回给用户,免去了VS/TUN的IP隧道开销。这种方式是3种负载调度方式中性能最好的,但是有求Director Sever与Real Sever必须由一块网卡连在同一物理网段上。
轮叫调度(Round Robin):1:1调度,调度器通过“轮叫“调度算法将外部用户请求按顺序1:1地分配到集群中每个Real Sever上。这种算法平等地对待每一台Real Sever,而不管服务器实际的负载状况和连接状态。
加权轮叫调度(Round Robin)::对不同性能的Real Sever设置不同的权值。这样保证了处理能力强的服务器处理更多的访问流量,充分合理地利用了服务器资源。同时,调度器还可以自动查询Real Sever的负载情况,并动态地调整其权值。
LVS是一个基于内核级别的应用软件,因此具有很高的处理性能。由LVS构建的负载均衡集群系统具有优秀的处理能力,每个服务节点的故障不会影响整个系统的正常使用,又能够实现负载的合理均衡,使应用具有超高负荷的服务能力,可支持上百万个并发连接请求。
在负载均衡调度器上进行IPVS软件的安装
在这里选择server3作为均衡调度器
[root@server3 ~]yum install ipvsadm -y
[root@server3 ~]ipvsadm -Ln ##此时还未添加策略
添加VIP策略
轮叫调度(Round Robin)::
[root@server3 ~]ipvsadm -A -t 172.25.65.100:80 -s rr ##rr表示round robin
##将VIP与Real Server IP关联起来
[root@server3 ~]ipvsadm -a -t 172.25.65.0.100:80 -r 172.25.65.1:80 -g
[root@server3 ~]ipvsadm -a -t 172.25.65.0.100:80 -r 172.25.65.2:80 -g
[root@server3 ~]ipvsadm -Ln ##查看到相关策略
在三台主机上都添加上VIP
Director server:server3 Real Sever :server1 server2
添加临时IP即可
ip addr add 172.25.65.100/32 dev eth0 ##子网掩码24位和32位都可以
采用httpd服务进行测试
[root@server2 ~]yum install httpd -y
[root@server2 ~]cd /var/www/html
[root@server2 ~]vim index.html ##在里面写入server2,对于测试而言,能看到测试效果就可以
##在server1上也做相同的操作
systemctl restart httpd ##重新启动服务
测试:在物理主机上
[root@foundation65 ~] curl 172.25.65.100 ##多次测试,会发现一直是在一台主机上
[root@foundation65 ~]arp -an | grep 172.25.65.100 会发现此时访问的真实主机网卡就是server2的
arp -d n172.25.65.100 ##清除连接
此时不能进行负载均衡,只能有一个Real Server在工作
[root@server1 ~]#yum install arptables -y
arptables -A INPUT -d 172.25.65.100 -J DROP
arptables m-=A OUTPUT -s 172.25.65.100 -j mangle --mangle-ip-s 172.25.65.2
arptables m-=A OUTPUT -s 172.25.65.100 -j mangle --mangle-ip-s 172.25.65.1
arptables -L ##策略的查看
arptables --delete OUTPUT 1 ##删除某条策略,不需要删除策略就不需要执行这条命令
[root@foundation65 ~]#curl 172.25.65.100 ##连续测试多次
[root@server3 ~]#ipvsadm -Ln ##查看访问server1和server2的次数
加权轮叫调度(Round Robin)::
清空策略
ipvsadm -C
ipvsadm -Ln ##策略已经被清空,没有策略
重新添加加权轮叫调度策略
[root@server3 ~]ipvsadm -A -t 172.25.65.100:80 -s wrr ##wrr表示加权round robin
##将VIP与Real Server IP关联起来
[root@server3 ~]ipvsadm -a -t 172.25.65.0.100:80 -r 172.25.65.1:80 -g -w 2
[root@server3 ~]ipvsadm -a -t 172.25.65.0.100:80 -r 172.25.65.2:80 -g -w 1
[root@server3 ~]ipvsadm -Ln ##查看到相关策略
测试:
[root@foundation65 ~]#curl 172.25.65.100 ##连续测试多次
[root@server3 ~]#ipvsadm -Ln ##查看访问server1和server2的次数
如果还没有设置arp,就会出现轮询现象
原因:是因为此时三个机器都有VIP
此时若刚好是访问到搭建ipvsadm的调度器,那么就会刚好出现轮询现象,但是在没有广播之前,不能保证每次都访问到具有轮询的这个主机
此时netstat -an | grep VIP 一定是具有ipvsadm的那个机器
##检测后端服务器状态是否完好
对于目前配置的lvs,虽然可以进行循环调度,但是当其中的后端主机挂了,它并不能自动去寻找正常工作的后端服务器,还是一直轮询访问,但是这个时候由于后端主机已经挂了,就会发生报错,而这个不是用户愿意看到的。
所以我们使用 ldirectord-3.9.5-3.1.x86_64 这个软件来更加智能地管理调度
高可用:无论服务端发生任何情况,都能保证用户能顺利连接,一般和其他的服务一起使用,保证客户使用时的流畅性,不会因为后端服务器的宕机等情况断开。比如ldirector的心跳服务和轮询调度的结合使用,保证访问一直正常。
[root@server2 ~]#systemctl stop httpd ##模拟服务宕了
[root@server3 ~]#yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
##红帽中装高可用的软件,必须将yum源重新配
df 查看当前挂载位置,cd /var/www/html/westos/addons/ 有 HighAvaliablity
将其添加到共享本机yum源的主机的yum配置文件中
再进行安装即可;
rpm -pql ldirectord-3.9.5-3.1.x86_64.rpm
[root@server3 ~]#cd /etc/ha.d/
[root@server3 ~]#cp /usr/share/doc/ldirectord-3.9.9/ldirectord.cf /etc/ha.d/
vim /etc/ha.d/ldirectord.cf ##对配置文件进行以下修改
ipvsadm -C ##清除原先的策略
systemctl start ldirectord ##开启服务
systemctl stutus ldirectord ##查看服务状态
ipvsadm -Ln ##查看策略
测试:
[root@foundation65 ~]#curl 172.25.65.100 ##此时不会进行轮叫,因为server2的主机服务已经宕了,但是也不会报错,会自动继续去访问server1
在调度器上开启httpd服务,当后端的两台主机都宕机了以后,会自动访问调度机器 在ldirector中
只要后端有一个主机可以,那么就不会去访问调度机,调度机是最后的防线。
[root@server3 ~]yum install httpd -y
[root@server3 ~]vim /var/www/html/index.html ##写入server3能看到测试效果就可以
[root@server3 ~]systemctl start httpd
[root@server1 ~]systemctl stop httpd
[root@server2 ~]systemctl stop httpd
##后端两台主机都已经宕机
vim /etc/ha.d/ldirector.cf
##在配置文件中加入
fallback=127.0.0.1:80 gate ##如果两个后端主机都挂了,那么就访问自己主机的80端口
curl 172.25.65.100 ##访问到的一直都是server3
在进行设置keepalivd的设置时,要先把ldirector关掉
keepalived是集群管理中保证集群高可用的一个服务软件(防止单点故障)
它能够保证当个别节点宕机时,整个网络可以不间断地运行,所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能
[root@server3~]# tar zxf keepalived-2.0.6 ##可以到keepalive的官网去查询
[root@server3~]# cd keepalived-2.0.6
[root@server3~]./configure --prefix=/usr/local/keepalived --with-init=systemd
##源码编译缺什么补什么
yum install
gcc openssl-devel -y
make && make install
ln -s /usr/local/keepalived/etc/sysconifg/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/localkeepalived/sbin/keepalived /sbin/ ##设置软链接
再开一台主机(server4)和server3一起充当前端
配置和server3相同
[root@server4~]# tar zxf keepalived-2.0.6 ##可以到keepalive的官网去查询
[root@server4~]# cd keepalived-2.0.6
[root@server4~]./configure --prefix=/usr/local/keepalived --with-init=systemd
##源码编译缺什么补什么
yum install
gcc openssl-devel -y
make && make install
ln -s /usr/local/keepalived/etc/sysconifg/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/localkeepalived/sbin/keepalived /sbin/##设置软链接
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了
Keepalived高可用服务对之间的故障切换转移,是通过 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)来实现的。
在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
那么,什么是VRRP呢?
VRRP ,全 称 Virtual Router Redundancy Protocol ,中文名为虚拟路由冗余协议 ,VRRP的出现就是为了解决静态踣甶的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器。
[root@server3 ~]ip addr del 172.25.65.100/32 dev eth0
[root@server3 ~]systemctl disable ldirectord
[root@server3 ~]cd /etc/keepalived/ ##在文件中进行以下设置
在文件中写入以下内容
写完之后scp到server4中
[root@server3 ~]systemctl start keepalived
[root@server4 ~]cd /etc/keepalived/
将配置文件中的state 改为 BACKUP ##server4只是一个备机
[root@server4 ~]systemctl start keppalived
yum install mailx ##在用户无法正常访问到后端主机时,会发送邮件给此时正在工作的Director Sever
注意:集群只能一个在线,一个主机,其他都是备机,负载均衡是多个同时在线,轮询工作