Loading... ## 前言 此前做了lvs的高可用集群,生产环境中一般还是nginx作为负载均衡用得比较多。所以本次主要学习了如何让多nginx负载均衡器进行高可用 **环境** - 两台后端web服务器(分别提供不一样的主页,方便测试) - 两台nginx前端负载均衡服务器 !> keepalived需要监控nginx的状态,nginx出现故障时自动转移 ## 一、配置前端服务 配置编辑nginx的配置文件,定义集群 upsteam websrvs { server 172.16.10.10:80 weight=1; server 172.16.10.20:80 weight=2 } #定义在server外面 #然后再server中设置proxy server { ... location / { proxy_pass http://websrvs/; } #访问根,直接代理到后端服务器 ... } 便于测试,这里的调度算法为`rr` 第二台nginx服务器配置文件相同 ## 二、keepalived配置 !> 特别注意nginx的运行状态,nginx故障后要实现自动转移 编辑`keepalived`配置文件,我直接贴出来 ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from kaadmin@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id node1 vrrp_mcast_group4 224.0.0.100 vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_nginx { script "/usr/bin/killall -0 nginx &> /dev/null" interval 1 weight -10 #当nginx没有运行,就降低优先级 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.16.123.123/16 dev ens33 label ens33:0 #VIP地址配置 } track_script { chk_nginx } #调用脚本 notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } 还有以下脚本,进行keepalived的检测和nginx启动 #!/bin/bash # vip=172.16.123.123 contact='root@localhost' #定义收件人 notify(){ mailsubject="`hostname` to be $1:$vip floating" #主题 mailbody="`date '+%F %H:%M:%S'`:vrrp transition,`hostname` changed to be $1" #主体 echo ${mailbody} | mail -s "$mailsubject" $contact } case "$1" in master) notify master systemctl restart nginx.service #不管主备,都要重启nginx服务,保证nginx在线 exit 0 ;; backup) notify backup systemctl restart nginx.service exit 0 ;; fault) notify fault exit 0 ;; *) echo "Usage:`basename $0` {master|backup|fault}" exit 1 ;; esac 备用nginx配置相同,脚本和配置文件都直接拷贝到备用主机,只需要修改keepalived的部分配置文件 state BACKUP #修改为备用主机 priority 98 #优先级降低 #脚本需要定义,这样才能实现高可用 ## 三、扩展,双主模型 !> 双主模型的时候,不要再脚本中加入nginx启动命令,这样会导致很多正常用户的连接丢失 双主模型参考: <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://blog.beijixs.cn/archives/358/" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://blog.beijixs.cn/usr/uploads/2019/10/1077146099.jpg);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">keepalived的双主模型</p> <div class="inster-summary text-muted"> 前言 所谓双主模型。就是连个节点都配置外部地址,通过dns多条A记录进行调度,可以实现负载均衡效果(效果... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> !> 需要注意的几个地方是虚拟路由id,主备,网卡,认证字符和优先级;同时双主模型有session保持的问题,这个问题最好的方法是做session服务(生产环境常用) ------------ 最后修改:2019 年 10 月 18 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏