负载均衡LVS集群之DR模式搭建(DR + ldirectord + Keepalived)

lvs概述:

1.LVS简介

LVS的是Linux Virtual Server的简写,翻译为Linux虚拟服务器,即一个虚拟的服务器集群系统,
是由我国章文嵩博士在1998年5月所研究成立,也是中国国内最早出现的自由软件项目之一。

2.LVS的组成

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm
1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

3.LVS相关的几种IP

VIP :(virtual IP)   LVS服务器上接收外网数据报文的网卡IP地址
DIP: (director IP)  LVS服务器上发送数据报文到real server的网卡IP地址
RIP :(real server)  真实服务器上的IP,即提供服务的服务器IP(常简称为RS)
CIP :(client IP )   客户端的IP

LVS/DR模式:

1.DR模式原理

图解:
在这里插入图片描述
原理简述:

每个RS(Real Server)上都有两个IP:VIP和RIP,但是VIP是隐藏的,即不能提供解析等功能,
只是用来做请求回复的源IP的,Director(VS)上只需要一个网卡,在该网卡上配置两个IP:VIP和DIP,
在VS接收到客户端的请求后,VS根据负载算法选择一台RS的网卡mac作为客户端请求包中的目标mac,
通过arp转交给后端RS处理,后端RS再通过自己的路由网关回复给客户端client。

工作模式:

client  ---->  vs  ---->  rs  ---->  client

vs:  virtual server (虚拟服务器)
rs:  real    server (真实服务器)

2.DR模式特点

1.各DIP(VS)必须与 RIP(RS) 在同一局域网内(即具有相同的广播域),且两个有相同的目标地址(vip);
2.RS的RIP可以使用私有地址,也可以使用公网地址,以方便配置;不支持支持端口映射;
3.RS可以使用必须为uninx操作系统(OS);且RS需要配置vip但不做响应;
4.Director(VS)仅负责处理入站请求,响应报文由RS( Real server) 直接发往客户端;
5.Real server(RS)不能将网关指向DIP(DS),而直接使用前端网关响应请求报文;

3.DR模式优缺点

优点:

负载均衡器VS只负责将请求包分发给物理服务器RS,而物理服务器RS将应答包直接发给用户。所以,负载均衡器VS能处理很巨大的请求量。
这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。
使用LVS/DR方式,如果你的负载均VS拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量,甚至更高;

缺点:

这种方式需要所有的DIR和RIP都在同一广播域;不支持异地容灾。

总结:

LVS/DR是三种模式中性能最高的一种模式,比LVS-NAT模式下负载的RS serve更多,通常在100台左右,对网络环境要求更高,也是日常应用的最多的一种工作模式。

1.轮叫机制(轮询)

实验环境:

vs: server1  172.25.66.1
rs: server2  172.25.66.2
rs: server3  172.25.66.3
VIP:172.25.66.100
DIP:172.25.66.1
RIP:172.25.66.2,172.25.66.3
CIP:172.25.66.254

1.配置虚拟服务器(vs)

#安装编写调度策略工具,报错,因为用到了高可用,故需要更改yum源
[root@server1 ~]# yum install -y ipvsadm -y 
Loaded plugins: product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel-source                                              | 3.9 kB     00:00     
Setting up Install Process
No package ipvsadm available.
Error: Nothing to do
# 查看高可用yum源
[root@foundation66 ~]# cd /var/www/html/rhel6.5/
[root@foundation66 rhel6.5]# ls

在这里插入图片描述

#1.配置高可用yum源
[root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo 
#################
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.66.254/rhel6.5/LoadBalancer
enabled=1

在这里插入图片描述

# 清理缓存
[root@server1 ~]# yum clean all
# 查看yum源详细信息,检查配置高可用yum源是否配置成功
[root@server1 ~]# yum repolist

在这里插入图片描述

#2.安装编写调度策略工具
[root@server1 ~]# yum install -y ipvsadm -y 
# 查看调度策略(开始什么也没有)
[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@server1 ~]# lsmod

在这里插入图片描述

#3.添加策略:vip(virtual ip:虚拟ip)  -s表示算法(rr:轮询)
[root@server1 ~]# ipvsadm -A -t 172.25.66.100:80 -s rr
# 查看调度策略
[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.66.100:http rr
#4.添加策略: 真实ip(real ip),-a表示添加策略, -g表示直连模式(DR模式)
[root@server1 ~]# ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.2:80 -g
[root@server1 ~]# ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.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.66.100:http rr
  -> server2:http                 Route   1      0          0         
  -> server3:http                 Route   1      0          0   
#5.保存策略,默认保存在/etc/sysconfig/ipvsadm文件中
[root@server1 ~]# /etc/init.d/ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]    

注意:1.若策略添加错误,该怎么办?

#1).清除策略,-C表示clean
[root@server1 ~]# ipvsadm -C
[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).若已经保存了策略,直接打开保存策略的文件,删除添加错误的策略即可
[root@server1 ~]# /etc/init.d/ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]
[root@server1 ~]# ifconfig 

在这里插入图片描述

#6.给eth1网卡添加vip, 注意:vip和调度器ip要在同一局域网内 
[root@server1 ~]# ip addr add 172.25.66.100/24 dev eth1
[root@server1 ~]# ip addr show eth1

在这里插入图片描述
2.配置真实后端服务器(rs)

在server2上:

#1.查看是否安装了apache,若是没有需要安装
[root@server2 ~]# rpm -q httpd
httpd-2.2.15-29.el6_4.x86_64
#2.编写apahce默认发布文件
[root@server2 ~]# cat /var/www/html/index.html 
<h1>www.westos.org ---- server2</h1>
#3.开启apache
[root@server2 ~]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.66.2 for ServerName
                                                           [  OK  ]

在server3上:

#1.查看是否安装了apache,若是没有需要安装
[root@server3 ~]# rpm -q httpd
httpd-2.2.15-29.el6_4.x86_64
#2.编写默认发布文件
[root@server3 ~]# cat /var/www/html/index.html 
<h1>www.westos.org ---- server3</h1>
#3.开启apache
[root@server3 ~]#  /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.66.3 for ServerName
                                                           [  OK  ]

测试:

#发现此时无法轮询
[root@foundation66 ~]# curl 172.25.66.100
^C
[root@foundation66 ~]# curl 172.25.66.100
^C
[root@foundation66 ~]# curl 172.25.66.100
^C
[root@foundation66 ~]# curl 172.25.66.100
^C
[root@foundation66 ~]# curl 172.25.66.100
^C
[root@foundation66 ~]# curl 172.25.66.100
^C

为何此时无法实现轮询呢?

(1)检查虚拟服务器

#查看策略,发现可以调度,说明调度器没有问题,问题出在后端
[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.66.100:http rr
  -> server2:http                 Route   1      0          2         
  -> server3:http                 Route   1      0          2         

(2)检查后端服务器

#发现没有vip,此时vs和rs无法进行通信(vs:virtual server   rs: real server)
[root@server2 ~]# ip addr show eth1

在这里插入图片描述
解决方案:给后端服务器添加vip

在server2上:

#给eth1网卡添加vip,32表示ip仅自己可用
[root@server2 ~]# ip addr add 172.25.66.100/32 dev eth1
[root@server2 ~]# ip addrshow eth1

在这里插入图片描述
在server3上:

[root@server3 ~]# ip addr show eth0

在这里插入图片描述

#给eth1网卡添加vip,32表示ip仅自己可用
[root@server3 ~]# ip addr add 172.25.66.100/32 dev eth1
[root@server3 ~]# ip addr show eth1

在这里插入图片描述
测试:

发现此时便可以轮询

[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>

查看策略,发现确实它通过vs调度器的调度算法实现了轮询

#查看策略
[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.66.100:http rr
  -> server2:http                 Route   1      0          4         
  -> server3:http                 Route   1      0          4         

但发现当客户访问vip时,它会随机调转到调度器VS(server1)或是后端服务器RS(server2 / server3),显然这样很不合理

#1).查看mac地址,发现访问的是调度器:server1,所以可以实现轮询
[root@foundation66 ~]# arp -an | grep 100
? (172.25.66.100) at 52:54:00:70:34:55 [ether] on br0

在这里插入图片描述

[root@server1 ~]# ip addr  show eth1

在这里插入图片描述

##2).清理缓存
[root@foundation66 ~]# arp -d 172.25.66.100
[root@foundation66 ~]# arp -an | grep 100
#发现此时无法实现轮询
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
#3).查看mac地址,发现此时访问的是server2(后端服务器),所以无法实现轮询
[root@foundation66 ~]# arp -an | grep 100
? (172.25.66.100) at 52:54:00:e0:50:76 [ether] on br0

在这里插入图片描述

[root@server2 ~]# ip addr show eth1

在这里插入图片描述
当访问vip,调度的是后端服务器VS时,由于不是调度器,便没有办法根据调度算法实现轮询

## 多清理机次缓存,发现访问vip时,它是随机转到调度器或是后端服务器上,这样显然是不合理的
[root@foundation66 ~]# arp -d 172.25.66.100
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# arp -d 172.25.66.100
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>

在这里插入图片描述
那么怎样才能实现访问vip时,只能调转到调度器上呢?

解决方案:给真实后端服务器添加arp火墙策略

在server2上:

#1.安装arp火墙管理工具
[root@server2 ~]# yum install -y arptables_jf
#2.添加火墙策略
#1).当数据流进来时,直接拒绝vip,DROP表示丢弃
[root@server2 ~]# arptables -A IN -d 172.25.66.100 -j DROP
# 查看策略
[root@server2 ~]# arptables -L

在这里插入图片描述

#2).当数据流出去时,以本机ip返回
[root@server2 ~]# arptables -A OUT -s 172.25.66.100 -j mangle --mangle-ip-s 172.25.66.2
#查看策略
[root@server2 ~]# arptables -L

在这里插入图片描述

#3.保存策略
[root@server2 ~]# /etc/init.d/arptables_jf  save
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]

在server3上:

#1.安装arp工具
[root@server3 ~]# yum install -y arptables_jf
#2.添加策略
[root@server3 ~]# arptables -A IN -d 172.25.66.100 -j DROP
[root@server3 ~]# arptables -A OUT -s 172.25.66.100 -j mangle --mangle-ip-s 172.25.66.3
#查看策略
[root@server3 ~]# arptables -L
#3.保存策略
[root@server3 ~]# /etc/init.d/arptables_jf  save
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]

注意:如果策略添加错误,只需刷新策略即可

# 刷新策略
[root@server2 ~]# arptables -F
[root@server3 ~]# arptables -L

在这里插入图片描述
测试:

此时便实现了稳定的轮询(当客户访问vip时,每次访问的都是调度器,无论清理多少次缓存,这样便实现了一直轮询)

#注意:在清理缓存前必须是访问的是调度器才可以
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# arp -d 172.25.66.100
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# arp -d 172.25.66.100
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>

2.健康检查(DR + ldirectord)

如果某个后端服务器(RS)出现故障,我们该怎么办呢?

#1.模拟后台服务器:server3出现故障(关闭apache服务)
[root@server3 ~]# /etc/init.d/httpd stop
Stopping httpd:                                            [  OK  ]

若不设定健康检查,此时某个后端服务器挂了,客户在访问时便会出现一会儿报错,一会儿访问正常的现象,这样显然不合理

#2.此时客户在访问vip时,发现时而可以访问,时而不能访问,这样很不合理
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
curl: (7) Failed connect to 172.25.66.100:80; Connection refused
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
curl: (7) Failed connect to 172.25.66.100:80; Connection refused

解决方案:设定健康检查

安装包:

ldirectord-3.9.5-3.1.x86_64.rpm

实验前提:

#当访问vip时,已经实现了稳定的轮询
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>

在这里插入图片描述

#1.下载安装包
[root@server1 mnt]# ls
ldirectord-3.9.5-3.1.x86_64.rpm
#安装健康检查工具,报错,有依赖性
[root@server1 mnt]# yum install -y ldirectord-3.9.5-3.1.x86_64.rpm 

在这里插入图片描述

#查看高可用yum源,/var/www/html/rhel6.5/为6.5镜像的挂载目录
[root@foundation66 ~]# cd /var/www/html/rhel6.5/
[root@foundation66 rhel6.5]# ls

在这里插入图片描述

#2.配置高可用yum源
[root@server1 mnt]# vim /etc/yum.repos.d/rhel-source.repo 
###################
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.66.254/rhel6.5/HighAvailability
enabled=1

在这里插入图片描述

#清理缓存
[root@server1 mnt]# yum clean all
#查看yum源的详细信息
[root@server1 mnt]# yum repolist

在这里插入图片描述

#3.安装健康检查工具
[root@server1 mnt]# yum install -y ldirectord-3.9.5-3.1.x86_64.rpm 
#列出包含ldirec字段的软件的信息;q代表query,a代表all
[root@server1 mnt]# rpm -qa | grep ldirec
ldirectord-3.9.5-3.1.x86_64
#查看主配置文件
[root@server1 mnt]# rpm -qc ldirectord
/etc/logrotate.d/ldirectord
#查看所有配置文件(包括帮助文档)
[root@server1 mnt]# rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm

在这里插入图片描述

[root@server1 mnt]# cd /etc/ha.d
[root@server1 ha.d]# ls
resource.d  shellfuncs
[root@server1 ha.d]# pwd
/etc/ha.d
#4.拷贝文件
[root@server1 ha.d]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf .
[root@server1 ha.d]# ls
ldirectord.cf  resource.d  shellfuncs
#5.设定健康检查
[root@server1 ha.d]# vim ldirectord.cf 
######################
virtual=172.25.66.100:80             #vip(虚拟ip)
        real=172.25.66.2:80 gate     #rip(真实ip)
        real=172.25.66.3:80 gate
        fallback=127.0.0.1:80 gate   #若是后端服务器都出现了故障,就报错
        #receive="Test Page"
        #virtualhost=www.x.y.z

在这里插入图片描述

#6.重启ldirectord服务
[root@server1 ha.d]# /etc/init.d/ldirectord start
Starting ldirectord... success

测试:

#1.模拟后端服务器:server3出现故障(关闭apache服务)
[root@server3 ~]# /etc/init.d/httpd stop
Stopping httpd:                                            [  OK  ]
#2.查看策略,发现调度器自动将坏掉的后端服务器:server3移除了
[root@server1 ha.d]# 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.66.100:http rr
  -> server2:http                 Route   1      0          6  

在这里插入图片描述

#3.此时客户端访问时,只能访问server2,也就解决了客户在访问vip时,时而成功时而失败的窘况
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>

那若是两个后端服务器(RS)都出现故障了,又该再怎么解决呢?

#模拟后端服务器:server2也出现故障
[root@server2 ~]# /etc/init.d/httpd stop
Stopping httpd:    
#此时客户便无法访问,但没有给客户返回任何信息,这样显然不友好
[root@foundation66 ~]# curl 172.25.66.100
curl: (7) Failed connect to 172.25.66.100:80; Connection refused
[root@foundation66 ~]# curl 172.25.66.100
curl: (7) Failed connect to 172.25.66.100:80; Connection refused

解决方案:当两个后端服务器都出现故障时,代理服务器(vs)自动给客户一个错误信息反馈

#1.查看是否安装了apache,若没有需要自己安装
[root@server1 ha.d]# rpm -q httpd
httpd-2.2.15-29.el6_4.x86_64
#2.删除默认发布目录中的所有文件
[root@server1 ha.d]# cd /var/www/html/
[root@server1 html]# rm -rf *
[root@server1 html]# ls
#3.编写默认发布文件
[root@server1 html]# vim index.html
####################
<h1>网站正在维护.....</h1>

在这里插入图片描述

# 4.将pache的端口改为默认端口:80
[root@server1 html]# vim /etc/httpd/conf/httpd.conf 
####################
136 Listen 80

在这里插入图片描述

#查看apache的端口是否为默认端口:80
[root@server1 html]# netstat -antlup

在这里插入图片描述
测试:

#此时客户再访问vip时,便会友好的给客户返回一个报错信息
[root@foundation66 ~]# curl 172.25.66.100
<h1>网站正在维护.....</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>网站正在维护.....</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>网站正在维护.....</h1>

总结:

当后台服务器中有一台挂掉,这台服务器就会自动从调度器上删除,所以当访问挂调的这台服务器时,另一台服务器就会自动接替工作,此时访问便不会出错。
当两台服务器都挂了,本机自己便会接替工作,但由于它是一台服务器,在访问数据过大时,不能独自承担,所以发布站点正在维护,防止服务器崩溃。

3.高可用集群(DR+Keepalived)

那如果调度器出现故障了,该怎么办呢?

一旦调度器损坏,所有的机制都将被破坏,为了防止这种情况的发生,需要进行添加备用调度器

解决方案:配置主备调度器,即再添加一个调度器server4

安装包:

keepalived-2.0.6.tar.gz

实验环境:

server1   主调度器       172.25.66.1
server4   备用调度器     172.25.66.4

server2   后端服务器     172.25.66.2
server3   后端服务器     172.25.66.3

1.配置主调度器

#1.下载安装包
[root@server1 html]# cd /mnt
[root@server1 mnt]# ls
keepalived-2.0.6.tar.gz  ldirectord-3.9.5-3.1.x86_64.rpm
#2.解压
[root@server1 mnt]# tar zxf keepalived-2.0.6.tar.gz 
[root@server1 mnt]# ls
keepalived-2.0.6  keepalived-2.0.6.tar.gz  ldirectord-3.9.5-3.1.x86_64.rpm
[root@server1 mnt]# cd keepalived-2.0.6
[root@server1 keepalived-2.0.6]# pwd
/mnt/keepalived-2.0.6
#3.源码编译三部曲:报错,有依赖性
[root@server1 keepalived-2.0.6]# ./configure  --prefix=/usr/local/keepalived --with-init=SYSV
#解决依赖性:安装 openssl-devel
[root@server1 keepalived-2.0.6]# yum install -y openssl-devel
#再次编译,没有error即可
[root@server1 keepalived-2.0.6]# ./configure  --prefix=/usr/local/keepalived --with-init=SYSV

注意:出现 no acceptable C compiler found in $PATH报错,如何解决?

[root@server1 keepalived-2.0.6]# ./configure  --prefix=/usr/local/keepalived --with-init=SYSV
.........
configure: error: in `/mnt/keepalived-2.0.6':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details

在这里插入图片描述
安装gcc即可

[root@server1 keepalived-2.0.6]# yum install -y gcc
[root@server1 keepalived-2.0.6]# ./configure  --prefix=/usr/local/keepalived --with-init=SYSV

在这里插入图片描述

[root@server1 keepalived-2.0.6]# make && make install
[root@server1 keepalived-2.0.6]# cd /usr/local
[root@server1 local]# ls
bin  etc  games  include  keepalived  lib  lib64  libexec  sbin  share  src
[root@server1 local]# cd keepalived/
[root@server1 keepalived]# ls
bin  etc  sbin  share
[root@server1 keepalived]# cd etc/
[root@server1 etc]# ls
keepalived  rc.d  sysconfig
[root@server1 etc]# cd rc.d/
[root@server1 rc.d]# ls
init.d
[root@server1 rc.d]# cd init.d/
[root@server1 init.d]# ls
keepalived
[root@server1 init.d]# pwd
/usr/local/keepalived/etc/rc.d/init.d
#4.给脚本一个可执行权限
[root@server1 init.d]# chmod +x keepalived 
[root@server1 init.d]# ll
total 4
-rwxr-xr-x 1 root root 1308 Jan 25 16:05 keepalived
#5.制作软链接
[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 init.d]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
#6.关闭健康检查服务,因为高可用自带健康检查
[root@server1 init.d]# /etc/init.d/ldirectord stop
Stopping ldirectord... success
#开机不启动
[root@server1 init.d]# chkconfig ldirectord off
#查看vip
[root@server1 init.d]# ip addr show eth1

在这里插入图片描述

#7.移除vip,因为高可用会自动添加vip,实现vip的漂移
[root@server1 init.d]# ip addr del 172.25.66.100/24 dev eth1
RTNETLINK answers: Cannot assign requested address
[root@server1 init.d]# ip addr show eth1
#8.编写配置文件
[root@server1 init.d]# cd /etc/keepalived/
[root@server1 keepalived]# ls
keepalived.conf  samples
[root@server1 keepalived]# vim keepalived.conf 
#######################
  3 global_defs {
  4    notification_email {            
  5         root@localhost              #邮件报警
  6     }
  7    notification_email_from keepalived@localhost    #何种身份报警
  8    smtp_server 127.0.0.1            #本机
 
 12    #vrrp_strict
 
 27     virtual_ipaddress {
 28         172.25.66.100               #vip
 29     }

 36    #persistence_timeout 50
 39     real_server 172.25.66.2 80 {    #rip
 40         TCP_CHECK {    #健康检查
 41         weight 1
 42             connect_timeout 3     #延迟3秒
 43             retry 3               #尝试3次
 44             delay_before_retry 3  #若还是不成功,则报错

 45         }
 46     }
 47     real_server 172.25.66.3 80 {    #rip
 48         TCP_CHECK {    #健康检查
 49         weight 1
 50             connect_timeout 3     #延迟3秒
 51             retry 3               #尝试3次
 52             delay_before_retry 3  #若还是不成功,则报错
 53         }
 54     }
 55 
 56 }

在这里插入图片描述
在这里插入图片描述

#9.开启keepalived服务
[root@server1 keepalived]# /etc/init.d/keepalived start
Starting keepalived:                                       [  OK  ]
[root@server1 keepalived]# cd /usr/local/
[root@server1 local]# ls
bin  etc  games  include  keepalived  lib  lib64  libexec  sbin  share  src
#10.将编译好的脚本文件发送给辅调度器
[root@server1 local]# scp -r keepalived/ [email protected]:/usr/local

2.配置备用调度器

[root@server4 ~]# cd /usr/local/
[root@server4 local]# ls
bin  etc  games  include  keepalived  lib  lib64  libexec  sbin  share  src
[root@server4 local]# cd keepalived/etc/rc.d/init.d
[root@server4 init.d]# pwd
/usr/local/keepalived/etc/rc.d/init.d
#1.查看年脚本是否有可执行权限,若是没有需要自己添加
[root@server4 init.d]# ll
total 4
-rwxr-xr-x 1 root root 1308 Jan 25 16:40 keepalived
#2.制作软链接
[root@server4 init.d]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@server4 init.d]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@server4 init.d]# ln -s /usr/local/keepalived/etc/keepalived /etc/
[root@server4 init.d]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
#3.更改配置文件
[root@server4 init.d]# cd /etc/keepalived/
[root@server4 keepalived]# ls
keepalived.conf  samples
[root@server4 keepalived]# vim keepalived.conf
##########################
18     state BACKUP    #备用调度器
21     priority 50     #更改优先级,只需比主调度器低即可

在这里插入图片描述

#4.开启keepalived服务
[root@server4 keepalived]# /etc/init.d/keepalived start
Starting keepalived:                                       [  OK  ]

测试:

[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl 172.25.66.100
<h1>www.westos.org ---- server3</h1>

1.检测能否自动添加vip,实现调度(查看两个调度器的ip即可)
2.模拟某个后端服务器出现故障,检测高可用是否能实现健康检查
3.模拟主调度器出现故障,检测高可用是否能实现vip的漂移
4.恢复主调度器,检测vip是否会漂移回来(主调度器的优先级高)

猜你喜欢

转载自blog.csdn.net/lilygg/article/details/86637515