将多台服务器搭建成一个集群来运行应用程序,能够避免单点故障,还能提高服务器的承载能力linux
linux集群按功能能够划分为两大类:高可用和负载均衡。nginx
高可用集群:一般是两条服务器,一台工做,另一台做为冗余,当一台服务器宕机不能提供服务了,就会有其余服务器顶替。经常使用的软件有heartbeat和keepalived,但heartbeat已经好久没有跟新了。vim
负载均衡集群:把用户的请求分摊到多台服务器上面。实现负载均衡的开源软件有LVS、keepalived、haproxy、Nginx等,商业的负载均衡设备 F五、NetScaler。bash
VRRP协议是实现路由高可用的一种通讯协议,在这个协议里会把多台功能相同的路由器组成一个组,这个组会有一个主角色(masteer)和多个备用角色(backup)。工做的时候主角色会经过组播的形式向各个备用角色发送VRRP协议的数据包,当备用角色收不到主角色发来的VRRP数据包的时候,就会认为主已经宕机了,这个时候就会须要根据优先级来让一个备用角色成为新的主。服务器
keepalived就是采用VRRP协议来实现高可用集群,keepalived有三个模块:core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件加载和解析。check模块负责健康检查。vrrp模块用来实现VRRP协议。负载均衡
1. 准备两台linux机器,在两台机器上都下载keepalived,一台作主角色,另外一台作备用角 [root@xinylinux-1 ~]# yum install -y keepalived [root@xinylinux-2 ~]# yum install -y keepalived测试
2. 两台机器上都要安装Nginx [root@xinylinux-1 ~]# yum install -y nginxspa
另外一台之前已经安装了源码包日志
3. 编辑主角色(master)的keepalived配置文件router
[root@xinylinux-2 ~]# 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" //自定义脚本监控Nginx服务
interval 3 //每隔3秒执行一次这个脚本
}
vrrp_instance VI_1 {
state MASTER //角色为主
interface ens33 //针对哪一个网卡监听VIP
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com //自定义密码
}
virtual_ipaddress {
192.168.188.100 //定义VIP,即虚拟IP
}
track_script {
chk_nginx //定义监控脚本
}
}
4. 定义一个监控Nginx服务的脚本
[root@xinylinux-2 ~]# 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
5. 脚本更改权限
[root@xinylinux-2 ~]# chmod 755 /usr/local/sbin/check_ng.sh
6. 启动主上的keepalived,
[root@xinylinux-2 ~]# systemctl start keepalived
[root@xinylinux-2 ~]# ps aux |grep keepalived
root 1731 0.0 0.1 118652 1400 ? Ss 22:00 0:00 /usr/sbin/keepalived -D
root 1732 0.0 0.3 127516 3304 ? S 22:00 0:00 /usr/sbin/keepalived -D
root 1733 0.1 0.2 127456 2848 ? S 22:00 0:00 /usr/sbin/keepalived -D
root 1830 0.0 0.0 112720 976 pts/0 R+ 22:00 0:00 grep --color=auto keepalived
7.配置备用角色keepalived配置文件
和主的内容差很少,只要把state 改成BACKUP,priority的数值要比主上的小,VIP改一下。就能够了
8.编辑监控脚本
内容:
#!/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
systemctl start nginx
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
9.启动keepalived服务
而后测试