1 集群介绍
2 keepalived介绍
3 用keepalived配置高可用集群
4 负载均衡集群介绍
5 LVS介绍
6 LVS调度算法
7 LVS NAT模式搭建
1、集群介绍
Linux集群根据功能划分为两大类:高可用和负载均衡。
- 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 - 高可用衡量标准,4个九,就是99.99%,表示一个比例,在一年时间内99.99%的时间都是在线的,不允许宕机,不允许服务不可用。
- 实现高可用的开源软件有:heartbeat、keepalived
- 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2
- 实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx,商业的有F5、Netscaler
2、keepalived介绍
- 在这里使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果;heartbeat 切换的时候,会不是很及时。
- keepalived通过VRRP(Virtual Router Redundancy Protocl虚拟路由冗余协议)来实现高可用。
- 在这个协议里,会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。
- master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。
- Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。
3、用keepalived配置高可用集群
- 准备两台机器130和132,130作为master,132作为backup
- 两台机器都执行yum install -y keepalived
- 两台机器都安装nginx,其中130上已经编译安装过nginx,132上需要yum安装nginx: yum install -y nginx
- 设定vip为100
- 编辑130上keepalived配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf获取
- 130编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh获取
- 给脚本755权限
- systemctl start keepalived 130启动服务
- 132上编辑配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf获取
- 132上编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh获取
- 给脚本755权限
- 132上也启动服务 systemctl start keepalived
首先准备两台机器,都需要安装keepalived,一个作为master,一个作为backup
两台机器装nginx服务,可以yum直接安装
master上配置
编辑keepalived配置文件,按快捷键> !$清空内容,添加内容如下
notification_email//用于设置报警邮件地址
smtp_server 127.0.0.1 //设置邮件的smtp server地址
smtp_connect_timeout 30 //设置连接smtp sever超时时间
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh" //检查服务是否正常
interval 3 //检查的时间间断是3秒
}
virtual_router_id 51 //定义路由器ID
priority 100 //权重
virtual_ipaddress//设置VIP
track_script//加载监控脚本
定义监控脚本,添加内容如下:
停止Keepalived服务是为了避免发生脑裂
然后更改脚本的权限,启动keepalived服务,查看进程
停掉nginx服务,查看nginx服务进程
查看ip地址,使用 ip add 命令,ifconfig命令无法查看到
检查两台机器的防火墙和selinux是否关闭
backup上配置
编辑keepalived配置文件,添加内容如下:
创建监控脚本,添加内容如下:
更改监控脚本权限,启动Keepalived服务,并查看
测试访问IP
访问master的IP
访问内容可以修改
访问backup的IP
访问192.168.133.132,出现和访问master的IP一样的内容,说明访问到的机器是master
测试高可用
- 先确定好两台机器上nginx差异,比如可以通过curl -I 来查看nginx版本
- 测试1:关闭master上的nginx服务
- 测试2:在master上增加iptabls规则
- iptables -I OUTPUT -p vrrp -j DROP
- 测试3:关闭master上的keepalived服务
- 测试4:启动master上的keepalived服务
执行命令ip add可以看到,VIP绑定在master上
在master上增加iptabls规则限制vrrp发包,并查看日志变化
访问VIP,发现还是在master上
所以封掉vrrp协议,不能达到切换资源的目的,恢复防火墙规则
模拟生产环境中宕机,停掉keepalived服务,查看IP
访问VIP,发现内容发生改变
启动master上的keepalived服务,查看IP又回来了
访问VIP,内容又变回来了
4、负载均衡集群介绍
- 主流开源软件LVS、keepalived、haproxy、nginx等
- 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用
- keepalived的负载均衡功能其实就是lvs
- lvs这种4层的负载均衡是可以分发TCP协议,web服务是80端口,除了分发80端口,还有其他的端口通信的,比如MySQL的负载均衡,就可以用LVS实现,而nginx仅仅支持http,https,mail,haproxy;haproxy也支持MySQL这种TCP负载均衡的
- 相比较来说,LVS这种4层的更稳定,能承受更多的请求,承载的并发量更高,而nginx这种7层的更加灵活,能实现更多的个性化需求
5、LVS介绍
- LVS是由国人章文嵩开发
- 流行度不亚于apache的httpd,基于TCP/IP做的路由和转发,稳定性和效率很高
- LVS最新版本基于Linux内核2.6,有好多年不更新了
- LVS有三种常见的模式:NAT、DR、IP Tunnel
- LVS架构中有一个核心角色叫做分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs)
LVS NAT模式
- 借助iptables的nat表来实现
- 用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去
- rs需要设定网关为分发器的内网ip
- 用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈
- 在nat模式中,只需要分发器有公网ip即可,所以比较节省公网ip资源
LVS IP Tunnel模式
- 这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip
- 客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为rs的IP,这样数据包就到了rs上
- rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己
LVS DR模式
- 这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip
- 和IP Tunnel不同的是,它会把数据包的MAC地址修改为rs的MAC地址
- rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己
6、LVS调度算法
- 轮询 Round-Robin rr
- 加权轮询 Weight Round-Robin wrr
- 最小连接 Least-Connection lc
- 加权最小连接 Weight Least-Connection wlc
- 基于局部性的最小连接 Locality-Based Least Connections lblc
- 带复制的基于局部性最小连接 Locality-Based Least Connections with Replication lblcr
- 目标地址散列调度 Destination Hashing dh
- 源地址散列调度 Source Hashing sh
常用的算法是前四种
7、LVS NAT模式搭建
准备工作
- 三台机器
- 分发器,也叫调度器(简写为dir)
- 内网:133.130,外网:142.147(vmware仅主机模式)
- rs1
- 内网:133.132,设置网关为133.130
- rs2
- 内网:133.133,设置网关为133.130
- 三台机器上都执行执行
- systemctl stop firewalld; systemc disable firewalld
- systemctl start iptables-services; iptables -F; service iptables save
NAT模式搭建
- 在dir上安装ipvsadm
- yum install -y ipvsdam
- 在dir上编写脚本,vim /usr/local/sbin/lvs_nat.sh//内容如下
#! /bin/bash
# director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,阿铭的两个网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24 -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.147.144:80 -s wlc -p 3
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1
NAT模式效果测试
- 两台rs上都安装nginx
- 设置两台rs的主页,做一个区分,也就是说直接curl两台rs的ip时,得到不同的结果
- 浏览器里访问192.168.142.147,多访问几次看结果差异
准备三台机器,一台作为分发器(内网:133.130,外网:142.147),另外两台是real server,分别为rs1(内网:133.132,网关为133.130)和rs2(内网:133.133,网关为133.130)
分发器增加一块网卡,查看网卡网段,所以设置IP192.168.142.147
然后查看是否ping通
三台机器配置好了之后,全部需要关闭防火墙
然后在rs1,rs2上安装iptables-services包,启动iptables服务
systemctl start iptables
systemctl enable iptables
然后调用新规则,以免默认规则影响实验效果;最后关闭selinux,最好修改下配置文件
安装ipvsadm工具
然后编写脚本,vim /usr/local/sbin/lvs_nat.sh,保存退出;然后执行该脚本sh /usr/local/sbin/lvs_nat.sh,脚本无输出表示无错误
$IPVSADM -A -t 192.168.147.144:80 -s rr -p 3 #-A:=add,添加规则;-t:=tcp;-s 指定算法; -p:指定超时时间
在rs1和rs2上安装nginx,并分别修改主页内容
然后可以做测试,如下表示测试成功