linux-keepalived-02 keepalived-+LVS+Apache部署
概念解析
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。
可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
lvs官网:http://www.linuxvirtualserver.org。
当web服务器太多时,RS就压力很大,所以引入DS。
重要参数:
1 | arp_announce |
优点
1、开源,免费
2、在网上能找到一些相关技术资源
3、具有软件负载均衡的一些优点
缺点
1、最核心的就是没有可靠的支持服务,没有人对其结果负责;
2、功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等;
3、开启隧道方式需重编译内核;
4、配置复杂;
5、主要应用于LINUX,目前没有专门用于WINDOWS的版本,不过可以通过配置,使windows成为LVS集群中的real server(win2003、win2008中)。
LVS相关概念
ipvs:ipvs称之为IP虚拟服务器(IP Virtual Server,简写为IPVS),是运行在LVS下的提供负载平衡功能的一种技术。工作于内核当中,定义转发规则。
ipvsadm:工作于用户空间,是一个工具,同时它也是一条命令,用于管理LVS的策略规则。
DS:前端负载均衡节点 direct-server
RS:后端真实节点 real-server
DIP:负载均衡节点的IP地址
VIP:虚拟IP地址,必须要与RS在同一网段
RIP:真实节点的IP地址
CIP:客户端IP地址
LVS/NAT模型
RS的网关必须为DIP
DIP要和RIP处于同一网络
RS支持任意操作系统
RIP必须为私网地址
DS支持端口映射
LVS/DR模型
前端路由必须发送给DS
VIP要和RIP处于同一网络
RS的网关不能够指向DIP
不支持端口映射
RS响应报文绝不通过DS
在环回口上配置VIP地址,因为环回口本来没有ip
LVS/TUN模型
主要是解决DR转发到不同数据中心的RS
lvs负载均衡算法
rr:轮询
wrr:加权轮询
lc:最少连接数
wlc:加权最少连接数
ip hash:源地址哈希
sip hash:目的地址哈希
实验环境
DR1:192.168.141.53
DR2:192.168.141.69
RS1:192.168.141.12
RS2:192.168.141.132
VIP:192.168.141.99(单主模型)
RS部署
1 | 在rs1和执行下面的脚本: |
DR部署
1 | dr1设置为主,dr2设置为从,二者配置文件的差异在于: |
如果用浏览器测试的话,因为有缓存的原因,现象就不是那么的准确。所以我们这里采用windows的cmd来进行测试,多次输入命令:curl 192.168.141.99即可。
1 | C:\Users\zhong>curl 192.168.141.99 |
可以看到,访问同一个ip:192.168.141.99得到的却是不同的结果,而且访问到RS1和RS2主页的比例正如我们在上面配置文件里设置好的那样,是2:1。
验证keepalive的健康检查功能
将RS1的httpd关掉,查看dr1上转发目的主机列表,列表里已经没有RS1了
1 | [root@rs1 ~]# systemctl stop httpd |
将RS1的httpd重新开启,再次查看dr1上转发目的主机列表,列表里又有RS1了
1 | [root@rs1 ~]# systemctl restart httpd |
验证keepalive的vip切换功能
分别查看DR1和DR2的ip,可以看到vip:192.168.141.99在DR1的ens33网卡上
1 | [root@dr1 keepalived]# ip add |
关掉dr1的keepalived
1 | [root@dr1 keepalived]# systemctl stop keepalived |
再次查看DR1和DR2的ip,可以看到vip:192.168.141.99在DR2的ens33网卡上,切换成功!
1 | [root@dr1 keepalived]# ip add |
重启DR1的keepalived
1 | [root@dr1 keepalived]# systemctl restart keepalived |
再次查看DR1和DR2的ip,可以看到vip:192.168.141.99在DR1的ens33网卡上,切换成功!
1 | [root@dr1 keepalived]# ip add |