nginx安装
安装keepalived【主备服务器都要安装,建议搭建一台先,后面克隆修改配置文件即可】
注意:以下所有的搭建都在nginx已经搭建完成的基础上进行操作
yum install -y libnfnetlink-devel curl gcc openssl-devel libnl3-devel net-snmp-devel
安装keepalived
cd /usr/local
wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
tar xvf keepalived-2.0.7.tar.gz
cd keepalived-2.0.7
./configure --prefix=/usr/local/keepalived
make && make install
初始化及启动
# keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/,也可以不做软链接,直接修改启动脚本中文件路径即可(安装目录下)
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
# 将keepalived主程序加入到环境变量(安装目录下)
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
# keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用
cp /usr/local/keepalived-2.0.7/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
# 将配置文件放到默认路径下
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
开机启动:systemctl enable keepalived
启动、关闭、重启systemctl start|stop|restart keepalived
搭建集群配置
##MASTER Configuration 【/etc/keepalived/keepalived.conf】
global_defs {
vrrp_version 3
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" ##监控脚本
interval 2 ##时间间隔,2秒
weight 20 ##权重
}
vrrp_instance VI_1 {
interface ens33 #设置实例绑定的网卡ID,通过ifconfig或ip addr指令查看
state MASTER #标示状态为MASTER 备份机为BACKUP
priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99
virtual_router_id 51 #同一实例下virtual_router_id必须相同MASTER和BACKUP的值相同
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
unicast_src_ip 192.168.1.189 ##本机ip
authentication { #设置认证
auth_type PASS #主从服务器验证方式,主从需要设置相同值
auth_pass 8888
}
unicast_peer {
192.168.1.190 ##方便查看所有节点
}
virtual_ipaddress { #设置vip
192.168.1.100 #可以多个虚拟IP,换行即可
}
track_script {
check_nginx #监控脚本
}
}
##BACKUP Configuration【/etc/keepalived/keepalived.conf】
global_defs {
vrrp_version 3
#notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
#XXX@XXX.com
#}
#notification_email_from XXX@XXX.com #指定发件人
#smtp_server XXX.smtp.com #指定smtp服务器地址
#smtp_connect_timeout 30 #指定smtp连接超时时间
#router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" ##监控脚本
interval 2 ##时间间隔,2秒
weight 20 ##权重
}
vrrp_instance VI_1 {
interface ens33 #设置实例绑定的网卡ID,通过ifconfig或ip addr指令查看
state BACKUP #标示状态为MASTER 备份机为BACKUP
priority 99 #MASTER权重要高于BACKUP 比如BACKUP为99
virtual_router_id 51 #同一实例下virtual_router_id必须相同MASTER和BACKUP的值相同
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
unicast_src_ip 192.168.1.190 ##本机ip
authentication { #设置认证
auth_type PASS #主从服务器验证方式,主从需要设置相同值
auth_pass 8888
}
unicast_peer {
192.168.1.189 ##方便查看所有节点
}
virtual_ipaddress { #设置vip
192.168.1.100 #可以多个虚拟IP,换行即可
}
track_script {
check_nginx #监控脚本
}
}
check_nginx.sh【注意:window上传的可能要设置格式》vi 》 :set ff=unix (默认是doc,可通过:set ff查看文件格式)】
cd /etc/keepalived
touch check_nginx.sh
chmod 777 /etc/keepalived/check_nginx.sh
内容如下:
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/nginx-1-13/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
测试
/usr/nginx-1-13/sbin/nginx ##启动nginx
/usr/nginx-1-13/sbin/nginx -s stop ##停止nginx
/usr/nginx-1-13/sbin/nginx -s reload ##针对修改配置文件进行的操作,无需重启nginx
systemctl start keepalived ##启动
systemctl stop keepalived ##停止
systemctl reload keepalived ##针对修改配置文件进行的操作,无需重启 keepalived
ps aux|grep nginx ##查看是否启动nginx
ps aux|grep keepalived ##查看是否启动keepalived
ip addr ###查看主机地址和lvs的虚拟ip地址
即virtual_ipaddress {
192.168.1.100 #可以多个虚拟IP,换行即可
}
- 主备keepalived都启动【nginx已启动了】
ip addr
189 master
190 backup
浏览器输入:192.168.1.100 访问master
- 杀死主的保留备机
ip addr
189 master
190 backup
浏览器输入:192.168.1.100 访问backup
上面测试成功说明故障转移搭建成功
关闭主服务器的nginx【需要重启主服务器的keepalived】,发现过两秒后nginx又重启了说明搭建nginx心跳检查搭建成功
以上都成功则nginx高可用搭建成功
小知识
如何判断访问的是master nginx还是backup nginx??
修改nginx安装目录html/index.html内容
keepalived.conf 与check_nginx.sh不起效的原因
您可能是windows上传文件到linux
使用vi查看文件格式
:set ff //查看文件格式【dos和unix】
:set ff=unix /设置文件格式,后一直回车到文件末尾即可
设置keepalived日志
修改vi /etc/sysconfig/keepalived文件,讲最后一行修改为
KEEPALIVED_OPTIONS="-D -d -S 0"
修改vi /etc/rsyslog.conf 文件,在最后一行增加
local0.* /var/log/keepalived.log
重启:
/etc/init.d/rsyslog restart
查看日志输出:
/etc/init.d/keepalived restart;tail -f /var/log/keepalived.log
注意【keepalived.conf】
vrrp_script 要在 vrrp_instance前面
virtual_ipaddress 要在 track_script 前面
所有的 ‘’{‘’ 前面要有空格
主备切换即发生故障时实现邮件推送
注意:以下所有的搭建都在lvs+keepalived+nginx已经搭建完成的基础上进行操作
第一步 配置keepalived配置【主备都要配置】,以下内容为keepalived.conf的内容
track_script {
check_nginx
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
notify_master <STRING>|<QUOTED-STRING>:当前节点成为主节点时触发的脚本
notify_backup <STRING>|<QUOTED-STRING>:当前节点转为备节点时触发的脚本
notify_fault <STRING>|<QUOTED-STRING>:当前节点转为“失败”状态时触发的脚本
notify <STRING>|<QUOTED-STRING>:通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
yum install -y mailx 【主备都要安装】
第二步 编辑notify.sh内容【主备都要配置】
#!/bin/bash
#sh脚本中执行命令可以用$()或``反引号,例如$(ip addr)=`ip addr`
##从ip addr输出信息中查找含 'global ens33'字符串的行,再从行中查找第二列的信息
vip=$(ip addr |grep 'global ens33' |awk '{print $2}')
##从ifconfig ens33输出信息中查找含 'inet'字符串的行,再从行中查找第二列的信息,再从列中查找第一行的信息
ip=$(ifconfig ens33 |grep 'inet' |awk '{print $2}'|awk 'NR==1{print}')
contact='442232278@qq.com'
notify() {
mailsubject="`hostname` to be $1: $vip floating"
mailbody="[$(date "+%Y-%m-%d %H:%M:%S")] \n request was given to $ip to process and vip:[$vip] was given `hostname`"
echo -e $mailbody | mail -s "$mailsubject" $contact
}
##$1表示取出notify_master "/etc/keepalived/notify.sh master" 指令中的master【/etc/keepalived/notify.sh master表示执行notify.sh的同时向改脚本中传入master】
case "$1" in
master)
##表示调用上面的notify函数同时传入第一个参数master,函数中获取传入的第一个参数用$1,以此类推
notify master
exit 0
;;
backup)
notify backup
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo 'Usage: `basename $0` {master|backup|fault}'
exit 1
;;
esac
第三步 配置邮件服务器【主备都要配置】
关闭本机的sendmail服务或者postfix服务
#执行下面的命令
#sendmial
service sendmail stop
chkconfig sendmail off
#postfix
service postfix stop
chkconfig postfix off
#再狠一点就直接卸载吧..
yum remove sendmail
yum remove postfix
vi /etc/nail.rc
set from=你的QQ邮箱 ##邮件接收人
set smtp=smtp.qq.com ##采用SMTP
set smtp-auth-user=你的QQ邮箱
set smtp-auth-password=授权码
set smtp-auth=login
第四步测试
停止或重启master keepalived即可,使其发生主备切换【即master挂了,backup上任,master活了,master上任】
收到如下邮箱表示配置成功了