2019独角兽企业重金招聘Python工程师标准>>>
集群介绍
Linux集群根据功能划分为两大类:高可用和负载均衡。
- 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 - 高可用衡量标准,4个九,就是99.99%,表示一个比例,在一年时间内99.99%的时间都是在线的,不允许宕机,不允许服务不可用。
- 实现高可用的开源软件有:heartbeat、keepalived
- 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2
- 实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx,商业的有F5、Netscaler
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协议的。
用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,内容又变回来了
扩展
heartbeat和keepalived比较
DRBD工作原理和配置
mysql+keepalived