标签:Linux学习
十五周四次课(4月9日)18.1 集群介绍
18.2 keepalived介绍
18.3/18.4/18.5 用keepalived配置高可用集群
18.1 集群介绍
根据功能划分为两大类:高可用和负载均衡
高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务
实现高可用的开源软件有:heartbeat、keepalived
负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2
实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx,商业的有F5、Netscaler
18.2 keepalived介绍
在这里我们使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果
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协议的。
18.3/18.4/18.5 用keepalived配置高可用集群
准备两台机器100和101,101作为master,100作为backup,102作用VIP
VIP是一个新的概念,它的英文名字是“Virtual IP”,即“虚拟IP”,这个IP是由keepalived给服务器配置上的,服务器靠这个VIP对外提供服务,当master机器宕机,VIP被分配到backup上
两台机器都执行yum install -y keepalived
两台机器都安装nginx,其中101上已经编译安装过nginx,100上需要yum安装nginx: yum install -y nginx
查看keepalived的配置文件:cat /etc/keepalived/keepalived.conf
清空配置文件:> /etc/keepalived/keepalived.conf
编辑101上keepalived配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf获取
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
aming@aminglinux.com //定义接受告警的人
}
notification_email_from root@aminglinux.com //定义发邮件地址(实际上没用)
smtp_server 127.0.0.1 //定义发邮件地址,若为127.0.0.1则使用本机自带邮件服务器发送
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx { //chk_nginx为自定义名字,后面还会用到它
script "/usr/local/sbin/check_ng.sh" //自定义脚本,该脚本为监控nginx服务的脚本
interval 3 //每隔3s执行一次该脚本
}
vrrp_instance VI_1 {
state MASTER //角色为master
interface ens33 //针对哪个网卡监听vip
virtual_router_id 51 //虚拟路由的id,和从上保持一致,说明它们是一组
priority 100 //权重为100,master要比backup大
advert_int 1
authentication {
auth_type PASS //认证形式是密码
auth_pass aminglinux>com //定义密码,这个密码自定义
}
virtual_ipaddress {
192.168.37.102 //定义VIP
}
track_script {
chk_nginx //定义监控脚本,这里要和上面vrrp_script后面的字符串保持一致
}
}
101编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh获取
文件路径就是上面配置文件里定义好的vim /usr/local/sbin/check_ng.sh
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
/etc/init.d/nginx start
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
给脚本755权限:chmod 755 /usr/local/sbin/check_ng.sh
启动服务:systemctl start keepalived
查看nginx是否会自动加载:
service nginx stop
ps aux|grep nginx
没有自动加载,查看日志:cat /var/log/messages
找到关键的错误信息:SECURITY VIOLATION - scripts are being executed but script_security not enabled.
关闭防火墙
再次查看nginx
VIP地址是否加载:ip add
分别关闭2台主机的防火墙
iptables -F
systemctl stop firewalld
setenforce 0
主页显示:
ls /usr/local/nginx/conf/vhost/
cat /usr/local/nginx/conf/vhost/aaa.com.conf
cat /data/wwwroot/default/index.html
100上编辑配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf获取
查看keepalived的配置文件:cat /etc/keepalived/keepalived.conf
清空配置文件:> /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
aming@aminglinux.com
}
notification_email_from root@aminglinux.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh"
interval 3
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.37.102
}
track_script {
chk_nginx
}
}
100上编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh获取
文件路径就是上面配置文件里定义好的vim /usr/local/sbin/check_ng.sh
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
systemctl start nginx //和主不一样,因为从是yum安装的,主是编译安装的
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
给脚本755权限:chmod 755 /usr/local/sbin/check_ng.sh
启动服务 systemctl start keepalived
主页显示:
因为是yum安装的,所以默认页的位置在:/usr/share/nginx/html/index.html
cat /usr/share/nginx/html/index.html
现在访问192.168.37.102 //主机在master上
测试高可用
关闭master上的keepalived服务
systemctl stop keepalived
ip add // vip释放了
Backup上
ip add //绑定了vip
查看backup主机日志:tail /var/log/messages
Netlink reflector reports IP 192.168.37.102 added //192.168.37.102这个IP被增加了
在master上用curl查看
curl -I 192.168.37.102 //nginx在backup上
启动master上的keepalived服务
systemctl start keepalived
curl -I 192.168.37.102 //nginx在master上
查看backup主机日志:tail /var/log/messages
Netlink reflector reports IP 192.168.37.102 removed //192.168.37.102这个IP被移除了
标签:Linux学习
原文地址:http://blog.51cto.com/415326/2096256