美文网首页
Nginx 高可用

Nginx 高可用

作者: YonchanLew | 来源:发表于2022-03-09 14:50 被阅读0次

1、使用Keepalived程序让nginx高可用

下载:https://www.keepalived.org/download.html
上传到服务器
解压:tar -zxvf keepalived-2.0.18.tar.gz
然后就安装三部曲,./configure、make、make install

打开配置文件

vim keepalived.conf
global_defs { 
  # 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 
  router_id keep_171 
}
vrrp_instance VI_1 { 
  # 表示状态是MASTER主机还是备用机BACKUP 
  state MASTER 
  # 该实例绑定的网卡  #查看网卡名称 ip addr
  interface ens33 
  # 保证主备节点一致即可 
  virtual_router_id 51 
  # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选 
  priority 100 
  # 主备之间同步检查时间间隔,单位秒 
  advert_int 2 
  # 认证权限密码,防止非法节点进入 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  # 虚拟出来的ip,可以有多个(vip) 
  virtual_ipaddress { 
    192.168.1.161
  } 
}

启动

./keepalived

注册为系统服务

在keepalived下有个etc目录的,进入去
cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/

systemctl start keepalived.service

2、keepalived也可能崩的,也需要主备

配置备

global_defs { 
  router_id keep_172 
}
vrrp_instance VI_1 { 
  # 备用机设置为BACKUP 
  state BACKUP 
  interface ens33 
  virtual_router_id 51 
  # 权重低于MASTER 
  priority 80 
  advert_int 2 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress { 
    # 注意:主备两台的vip都是一样的,绑定到同一个vip 
    192.168.1.161 
  } 
}

增加Nginx重启检测脚本

vim /etc/keepalived/check_nginx_alive_or_not.sh

#!/bin/bash 

A=`ps -C nginx --no-header |wc -l` 
# 判断nginx是否宕机,如果宕机了,尝试重启 
if [ $A -eq 0 ];then 
  /usr/local/nginx/sbin/nginx 
  # 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机 
  sleep 3 
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then 
    killall keepalived 
  fi 
fi

增加运行权限

chmod +x /etc/keepalived/check_nginx_alive_or_not.sh

配置keepalived监听nginx脚本

vrrp_script check_nginx_alive { 
  script "/etc/keepalived/check_nginx_alive_or_not.sh" 
  interval 2 # 每隔两秒运行上一行脚本 
  weight 10 # 如果脚本运行失败,则升级权重+10 
}

在 vrrp_instance 中新增监控的脚本

track_script { 
  check_nginx_alive # 追踪 nginx 脚本 
}

重启Keepalived使得配置文件生效

systemctl restart keepalived

3、双主热备

规则:以一个虚拟ip分组归为同一个路由



主节点配置:

global_defs { 
  router_id keep_171 
}
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 { 
    192.168.1.161 
  } 
}
vrrp_instance VI_2 { 
  state BACKUP 
  interface ens33 
  virtual_router_id 52 
  priority 80 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress { 
    192.168.1.162 
  } 
}

备节点配置

global_defs { 
  router_id keep_172 
}
vrrp_instance VI_1 { 
  state BACKUP 
  interface ens33 
  virtual_router_id 51 
  priority 80 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress { 
    192.168.1.161
  }
}
vrrp_instance VI_2 { 
  state MASTER 
  interface ens33 
  virtual_router_id 52 
  priority 100 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress { 
    192.168.1.162 
  } 
}

4、LVS

一般不会直接使用keepalived直接作用在nginx上,而是keepalived+LVS+Nginx实现高可用。
LVS 基于四层,工作效率高
单个Nginx承受不了压力,需要集群
LVS 充当Nginx集群的调度者
Nqinx 接受请求来回,LVS可以只接受不响应




5、前期准备:

服务器与ip规划:
LVS - 1台
VIP(虚拟IP):192.168.1.150
DIP(转发者IP/内网IP):192.168.1.151
Nginx - 2台(RealServer)
RIP(真实IP/内网IP):192.168.1.171
RIP(真实IP/内网IP):192.168.1.172
所有计算机节点关闭网络配置管理器,因为有可能会和网络接口冲突:

systemctl stop NetworkManager 
systemctl disable NetworkManager

创建子接口

cd /etc/sysconfig/network-scripts/
#数字可以是其他,只是随便起个别名
cp ifcfg-ens33 ifcfg-ens33:1

修改子接口配置: vim ifcfg-ens33:1,保留这些即可

BOOTPROTO="static"
DEVICE="ens33:1"
ONBOOT="yes"
IPADDR=192.168.1.150  #虚拟IP
NETMASK=255.255.255.0

service network restart
安装集群管理工具
yum install ipvsadm

6、搭建LVS-DR模式- 为两台RS配置虚拟IP

#这个文件上网查一查
cp ifcfg-lo ifcfg-lo:1

修改为
DEVICE=lo:1
IPADDR=192.168.1.150
NETMASK=255.255.255.255
NETWORK=127.0.0.1
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

service network restart
另一台

cp ifcfg-lo ifcfg-lo:1

修改为
DEVICE=lo:1
IPADDR=192.168.1.150
NETMASK=255.255.255.255
NETWORK=127.0.0.1
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

这样两台虚拟ip都构建好了

7、搭建LVS-DR模式- 为两台RS配置arp

ARP响应级别与通告行为的概念

  1. arp-ignore:ARP响应级别(处理请求)
    只要本机配置了ip,就能响应请求
    请求的目标地址到达对应的网络接口,才会响应请求
  2. arp-announce:ARP通告行为(返回响应)
    本机上任何网络接口都向外通告,所有的网卡都能接受到通告
    尽可能避免本网卡与不匹配的目标进行通告
    只在本网卡通告

打开sysctl.conf:

vim /etc/sysctl.conf

配置 所有网卡 、 默认网卡 以及 虚拟网卡 的arp响应级别和通告行为,分别对应: all , default , lo :

两台都是相同配置
# configration for lvs 
net.ipv4.conf.all.arp_ignore = 1 
net.ipv4.conf.default.arp_ignore = 1 
net.ipv4.conf.lo.arp_ignore = 1 

net.ipv4.conf.all.arp_announce = 2 
net.ipv4.conf.default.arp_announce = 2 
net.ipv4.conf.lo.arp_announce = 2

刷新配置文件:

sysctl -p

增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理:

两台都是相同配置
route add -host 192.168.1.150 dev lo:1

route -n

开机自启

echo "route add -host 192.168.1.150 dev lo:1" >> /etc/rc.local

8、搭建LVS-DR模式- 使用ipvsadm配置集群规则

创建LVS节点,用户访问的集群调度者

ipvsadm -A -t 192.168.1.150:80 -s rr -p 5

-A:添加集群
-t:tcp协议
ip地址:设定集群的访问ip,也就是LVS的虚拟ip
-s:设置负载均衡的算法,rr表示轮询
-p:设置连接持久化的时间

创建2台RS真实服务器

ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.171:80 -g 
ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.172:80 -g

-a:添加真实服务器
-t:tcp协议
-r:真实服务器的ip地址
-g:设定DR模式

保存到规则库,否则重启失效

ipvsadm -S

检查集群

查看集群列表
ipvsadm -Ln
查看集群状态
ipvsadm -Ln --stats

其他命令:

# 重启ipvsadm,重启后需要重新配置 
service ipvsadm restart 
# 查看持久化连接 
ipvsadm -Ln --persistent-conn 
# 查看连接请求过期时间以及请求源ip和目标ip 
ipvsadm -Lnc 
# 设置tcp tcpfin udp 的过期时间(一般保持默认) 
ipvsadm --set 1 1 1 
# 查看过期时间 
ipvsadm -Ln --timeout
#更详细的帮助文档
ipvsadm -h 
man ipvsadm

至此,已经实现单个LVS+两个Nginx,但这样LVS还是有可能崩的,所以LVS要配置主备

9、Keepalived+LVS,主配置

修改Keepalived的配置文件

global_defs {
  router_id LVS_151
}

vrrp_instance VI_1 { 
  state MASTER 
  interface ens33 
  virtual_router_id 41 
  priority 100 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress {
    192.168.1.150
  }
}

#配置集群地址访问的IP+端口,端口和nginx保持一致,都是80
virtual server 192.168.1.150 80 { 
  # 健康检查的时问,单位:秒
  delay_loop 6
  #配置负载均衡的算法,默认是轮询
  lb_algo rr
  # 设置LVS的模式 NAT | TUN | DR
  lb_kind DR
  # 设置会话持久化的事件
  persistence_timeout 5
  #协议 -t
  protocol TCP

  #负载均衡的真实服务器,也就是nginx节点的具体的真实ip地址
  real_server 192.168.1.171 80 {
    #轮询的默认权重配比设置为1
    weight 1
    #设置健康检查
    TCP_CHECK {
      #检查的80端口
      connect_port 80
      #超时时间
      connect_timeout 2
      # 重试次数 2次
       nb_get_retry 2
       # 间隔时间 3秒
       delay_before_retry 3
     }
  }
  real_server 192.168.1.172 80 {
    weight 1
    #设置健康检查
    TCP_CHECK {
      #检查的80端口
      connect_port 80
      #超时时间
      connect_timeout 2
      # 重试次数 2次
       nb_get_retry 2
       # 间隔时间 3秒
       delay_before_retry 3
     }
  }
}
清空规则
ipvsadm -C
重启
systemctl restart keepalived

10、Keepalived+LVS,备配置

修改Keepalived的配置文件

global_defs {
  router_id LVS_152
}

vrrp_instance VI_1 { 
  state BACKUP 
  interface ens33 
  virtual_router_id 41 
  priority 50 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress {
    192.168.1.150
  }
}

#配置集群地址访问的IP+端口,端口和nginx保持一致,都是80
virtual server 192.168.1.150 80 { 
  # 健康检查的时问,单位:秒
  delay_loop 6
  #配置负载均衡的算法,默认是轮询
  lb_algo rr
  # 设置LVS的模式 NAT | TUN | DR
  lb_kind DR
  # 设置会话持久化的事件
  persistence_timeout 5
  #协议 -t
  protocol TCP

  #负载均衡的真实服务器,也就是nginx节点的具体的真实ip地址
  real_server 192.168.1.171 80 {
    #轮询的默认权重配比设置为1
    weight 1
    #设置健康检查
    TCP_CHECK {
      #检查的80端口
      connect_port 80
      #超时时间
      connect_timeout 2
      # 重试次数 2次
       nb_get_retry 2
       # 间隔时间 3秒
       delay_before_retry 3
     }
  }
  real_server 192.168.1.172 80 {
    weight 1
    #设置健康检查
    TCP_CHECK {
      #检查的80端口
      connect_port 80
      #超时时间
      connect_timeout 2
      # 重试次数 2次
       nb_get_retry 2
       # 间隔时间 3秒
       delay_before_retry 3
     }
  }
}
清空规则
ipvsadm -C
重启
systemctl restart keepalived

相关文章

  • Nginx高可用集群实战,以及原理分析

    知识要点: Nginx高可用集群简介 Keepalived安装配置 高可用集群实践 Nginx高可用集群简介 今天...

  • nginx + keepalived高可用

    参考: Keepalived+Nginx实现高可用Web负载均衡、Nginx + Keepalived 高可用 简...

  • nginx 高可用

    tip: nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器 ng...

  • Nginx 高可用

    1、使用Keepalived程序让nginx高可用 下载:https://www.keepalived.org/d...

  • Nginx系列-7 nginx 搭建高可用集群

    Keepalived+Nginx 高可用集群(主从模式) 上述采用nginx方式: 会有问题: nginx宕机 当...

  • Nginx负载均衡高可用理解

    要实现nginx的高可用,需要实现备份机。 1.1. 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到...

  • day12

    下周:keepalived(高可用软件,和nginx没有关系)nginx常用模块、nginx常见问题 1.什么是高...

  • Java架构师成长直通车:LVS+Nginx实现高可用集群

    LVS+Nginx实现高可用集群 常见服务器 安装 Nginx(CentOS) Nginx 的进程模型 Nginx...

  • Nginx文章集

    查看当前 nginx 连接数 Nginx优化配置,轻松搞定十万并发 LVS+KeepAlived+Nginx高可用...

  • MySQL主从复制简介

    高可用性标准(全年无故障率) 高可用软件 负载均衡,有一定的高可用LVS Nginx主备系统:有考可用,但是需要...

网友评论

      本文标题:Nginx 高可用

      本文链接:https://www.haomeiwen.com/subject/fihbrrtx.html