nginx负载均衡高可用

打印 上一主题 下一主题

主题 730|帖子 730|积分 2190

nginx负载均衡高可用

1.高可用
  1.         一般是指2台服务器启动着相同的业务系统,如果有一台服务器死机了,另外一台服务器能快速的接管,对于用户是无感知的。
复制代码
2.高可用的软件
  1. 硬件
  2.         F5
  3. 软件
  4.         keepalived
  5.         heartbeat
  6. MySQL指定的高可用软件
  7.         MGR
  8.         MHA
  9. Redis指定的高可用软件
  10.         Redis-Cluster
  11.         Sentinel
复制代码
3.Keepalived概述
  1.         keepalived是一个高可用软件,可以和任何应用配合使用
  2.         Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
复制代码
4.keepalived实现原理
  1.         keepalived软件是基于VRRP协议实现,VRRP(虚拟路由冗余协议)主要用于解决单点故障
复制代码

5.keepalived核心概念
  1. 1.选举:
  2.         通过选举投票,决定谁是主节点和备节点
  3. 2.抢占式、非抢占式:
  4.         当Master故障,Backup自动接管,那么Master恢复后夺权就是抢占式,没有夺权就是非抢占式
  5. 3.脑裂:
  6.         当两台服务器都认为自己是master,那么就会出现这种现象
复制代码
脑裂的原因
  1. 1.服务器网线松动等网络故障
  2. 2.服务器硬件故障发生损坏现象而崩溃
  3. 3.主节点和备节点都开启了防火墙
  4. ## 解决脑裂故障的脚本
  5. #!/bin/sh
  6. vip=10.0.0.3
  7. lb01_ip=10.0.0.5
  8. while true;do
  9.     ping -c 2 $lb01_ip &>/dev/null
  10.     if [ $? -eq 0 -a `ip add|grep "$vip"|wc -l` -eq 1 ];then
  11.         echo "ha is split brain.warning."
  12.     else
  13.         echo "ha is ok"
  14.     fi
  15. sleep 5
  16. done
复制代码
6.keepalived安装配置

环境准备

主机名WanIPLanIP角色应用lb0110.0.0.5172.16.1.5Master keepalived主节点keepalivedlb0210.0.0.6172.16.1.6Backup keepalived备节点keepalived部署keepalived(lb01 lb02)
  1. 1.安装keepalived
  2. yum install -y keepalived
  3. 2.修改master配置文件
  4. [root@lb01 ~]# cat /etc/keepalived/keepalived.conf
  5. global_defs {                   #全局配置
  6.     router_id lb01              #标识身份->名称
  7. }
  8. vrrp_instance VI_1 {
  9.     state MASTER                #标识角色状态
  10.     interface eth0              #网卡绑定接口
  11.     virtual_router_id 50        #虚拟路由id
  12.     priority 150                #优先级
  13.     advert_int 1                #监测间隔时间
  14.     authentication {            #认证
  15.         auth_type PASS          #认证方式
  16.         auth_pass 1111          #认证密码
  17.     }
  18.     virtual_ipaddress {         
  19.         10.0.0.3                #虚拟的VIP地址
  20.     }
  21. }
  22. [root@lb02 ~]# cat /etc/keepalived/keepalived.conf
  23. global_defs {                   #全局配置
  24.     router_id lb02              #标识身份->名称
  25. }
  26. vrrp_instance VI_1 {
  27.     state BACKUP                #标识角色状态
  28.     interface eth0              #网卡绑定接口
  29.     virtual_router_id 50        #虚拟路由id
  30.     priority 100                #优先级
  31.     advert_int 1                #监测间隔时间
  32.     authentication {            #认证
  33.         auth_type PASS          #认证方式
  34.         auth_pass 1111          #认证密码
  35.     }
  36.     virtual_ipaddress {         
  37.         10.0.0.3                #虚拟的VIP地址
  38.     }
  39. }
复制代码
keepalived配置区别Master节点配置Backup节点配置router_idlb01lb02stateMASTERBACKUPpriority150100
  1. 3.启动master和backup上的keepalived
  2. systemctl start keepalived.service
  3. 4.查看master虚拟ip地址
复制代码
  1. 5.停掉master上的keepalived查看虚拟ip是否到backup服务器上
  2. [root@lb01 ~]# systemctl stop keepalived.service
复制代码

非抢占式配置
  1. 1、两个节点的state都必须配置为BACKUP
  2. 2、两个节点都必须加上配置 nopreempt
  3. 3、其中一个节点的优先级必须要高于另外一个节点的优先级。
  4. # keepalived配置
  5. [root@lb01 ~]# vim /etc/keepalived/keepalived.conf
  6. global_defs {                   #全局配置
  7.     router_id lb01             #标识身份->名称
  8. }
  9. vrrp_instance VI_1 {
  10.     state BACKUP                #标识角色状态
  11.     interface eth0              #网卡绑定接口
  12.     nopreempt
  13.     virtual_router_id 50        #虚拟路由id
  14.     priority 150                #优先级
  15.     advert_int 1                #监测间隔时间
  16.     authentication {            #认证
  17.         auth_type PASS          #认证方式
  18.         auth_pass 1111          #认证密码
  19.     }
  20.     virtual_ipaddress {
  21.         10.0.0.3                #虚拟的VIP地址
  22.     }
  23. }
  24. [root@lb02 ~]# vim /etc/keepalived/keepalived.conf
  25. global_defs {                   #全局配置
  26.     router_id lb02             #标识身份->名称
  27. }
  28. vrrp_instance VI_1 {
  29.     state BACKUP                #标识角色状态
  30.     interface eth0              #网卡绑定接口
  31.     nopreempt
  32.     virtual_router_id 50        #虚拟路由id
  33.     priority 150                #优先级
  34.     advert_int 1                #监测间隔时间
  35.     authentication {            #认证
  36.         auth_type PASS          #认证方式
  37.         auth_pass 1111          #认证密码
  38.     }
  39.     virtual_ipaddress {
  40.         10.0.0.3                #虚拟的VIP地址
  41.     }
  42. }
复制代码
keepalived结合nginx做高可用



主机名WanIPLanIP角色应用lb0110.0.0.5172.16.1.5Master keepalived主节点、nginx负载均衡keepalived、nginxlb0210.0.0.6172.16.1.6Backup keepalived备节点、nginx负载均衡keepalived、nginxweb0110.0.0.7172.16.1.7web网站nginx、phpweb0210.0.0.8172.16.1.8web网站nginx、php关联nginx
  1. 1.编写脚本
  2. nginx_count=$(ps -ef|grep [n]ginx|wc -l)
  3. #1.判断Nginx是否存活,如果不存活则尝试启动Nginx
  4. if [ $nginx_count -eq 0 ];then
  5.         systemctl start nginx
  6.         sleep 3
  7.         #2.等待3秒后再次获取一次Nginx状态
  8.         nginx_count=$(ps -ef|grep [n]ginx|wc -l)
  9.         #3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本
  10.         if [ $nginx_count -eq 0 ];then
  11.                 systemctl stop keepalived        
  12.         fi
  13. fi
  14. 简化脚本
  15. [root@lb01 ~]# vim check_web.sh
  16. # /bin/sh
  17. nginx_count=$(ps -ef |grep [n]ginx}|wc -l)
  18. if [ $nginx_count -eq 0 ];then
  19.         systemctl stop keepalived
  20. fi
  21. 2.配置两台负载均衡
  22. [root@lb01 ~]# vim /etc/nginx/conf.d/wordpress.jl.com.conf
  23. upstream blog.jl.com{
  24.         server 172.16.1.7;
  25.         server 172.16.1.8;
  26. }
  27. server {
  28.         listen 80;
  29.         server_name wordpress.jl.com;
  30.         location / {
  31.                 proxy_pass http://blog.jl.com;
  32.                 include proxy_params;
  33.         }
  34. }
  35. [root@lb02 ~]# vim /etc/nginx/conf.d/wordpress.jl.com.conf
  36. upstream blog.jl.com{
  37.         server 172.16.1.7;
  38.         server 172.16.1.8;
  39. }
  40. server {
  41.         listen 80;
  42.         server_name wordpress.jl.com;
  43.         location / {
  44.                 proxy_pass http://blog.jl.com;
  45.                 include proxy_params;
  46.         }
  47. }
复制代码
keepalived关联nginx
  1. 1.修改keepalived配置文件
  2. [root@lb01 ~]# vim /etc/keepalived/keepalived.conf
  3. global_defs {                   #全局配置
  4.     router_id lb01              #标识身份->名称
  5. }
  6. vrrp_script check_web {
  7.         script "/root/check_web.sh"
  8.         interval 5
  9. }
  10. vrrp_instance VI_1 {
  11.     state BACKUP                #标识角色状态
  12.     interface eth0              #网卡绑定接口
  13.     virtual_router_id 50        #虚拟路由id
  14.     priority 150                #优先级
  15.     advert_int 1                #监测间隔时间
  16.     authentication {            #认证
  17.         auth_type PASS          #认证方式
  18.         auth_pass 1111          #认证密码
  19.     }
  20.     virtual_ipaddress {
  21.         10.0.0.3                #虚拟的VIP地址
  22.     }
  23.     track_script {
  24.                 check_web
  25.         }
  26. }
  27. 2.给脚本添加执行权限
  28. chmod +x check_web
  29. 3.将域名解析到vip上
  30. 10.0.0.3 wordpress.jl.com
  31. 4.浏览器访问网站
复制代码
  1. 5.停掉lb01的nginx服务
  2. systemctl stop nginx
  3. 6.继续访问网站
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表