lvs+keepalived+nginx实现负载均衡【配置、nginx心跳脚本、邮件警告于一体】

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上任】

在这里插入图片描述
收到如下邮箱表示配置成功了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值