栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Nginx HA双机热备

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nginx HA双机热备

HA Cluster高可用集群

HA Cluster是指高可用性集群,是保证业务连续性的有效解决方案,一般
有两个或两个以上的节点,且分为活动节点及备用节点。
故障自动切换,MASTER/BACKUP,MASTER宕机了,BACKUP
充当主机使用。主要时解决web服务的单点故障

Keepalived软件概述

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS
集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功
能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务
(例如:Nginx、HAproxy、MySQL等)的高可用解决方案软件。

Keepalived组成和原理

Keepalived软件主要是通过VRRP协议实现高可用功能的(故障切换方
式)。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协
议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它
能够保证当个别节点宕机时,整个网络可以不间断地运行。
(FailOver+VIP漂移)
使用Keepalived进行VIP(虚拟的IP地址),所有服务器共享一个虚拟的
VIP的实现。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供
相同功能的路由器组成一个路由器组,这个组里面有一个master和多个
backup,master上面有一个对外提供服务的vip(该路由器所在局域网内
其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp
包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个
backup当master。这样的话就可以保证路由器的高可用了。
Keepalived的功能体系结构,大致分两层:用户空间(user space)和内
核空间(kernel space)。
内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均
衡)和NETlink(提供高级路由及其他相关的网络功能)两个部份。
用户空间:

WatchDog:负则监控checkers和VRRP进程的状况
VRRP Stack:负载均衡器之间的失败切换FailOver,如果只用一个负载均衡器,则VRRP不是必须的。
Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有VRRP Stack,但健康检查
healthchecking是一定要有的。
IPVS wrapper:用户发送设定的规则到内核ipvs代码.
Netlink Reflector:用来设定vrrp的vip地址等。

keepalived主要使用三个模块,分别是core、check和vrrp。core模块为
keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和
解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现
VRRP协议的。

配置nginx的HA架构(双机热备)

1集群规划

集群安装

master端和slave端安装同版本的nginx和php(建议直接克隆)

master和slave端
安装keepalived

# yum -y install keepalived -

keepalivedd 配置文件:/etc/keepalived/keepalived.conf
日志文件:/var/log/messages

设置Keepalived配置文件

master和slave端

# vim /etc/keepalived/keepalived.conf
	vrrp_instance VI_1 {		#VI_1vrrp实例组组名(master和slave保持一致)
    state BACKUP	#角色名称(MASTER/BACKUP)
    interface ens33	#网卡名称
    virtual_router_id 51	#51:vrrp组的编号(master和slave保持一致)
    priority 100	#100:权重(选举时,权重高当选vip的几率大)
    advert_int 1
    authentication {
        auth_type PASS		#授权类型(pass
        密码)
        auth_pass 1111		#组密码(组件集群时,密码必须一致)
    }
    virtual_ipaddress {
        192.168.156.200		#VIP,虚拟的IP地址,需要与集群中的网段保持一致
    }
}

启动keepalived
master和slave端

systemctl start keepalived
systemctl status keepalived

查看是否挂载VIP
让VIP可以ping通
master和slave端
systemctl restart keepalived

1.3以后版本要注释vrrp_strict,否则虚拟IP无法ping通。可以通过vip访问nginx服务
重启keepaliver: systemctl restart keepalived

模拟故障,测试

master端: systemctl stop network
在slave端查看VIP是否漂移
此时通过访问vip,Nginx还是可以正常提供服务

让keepalived可以监控Nginx服务

当手工停止Nginx时,vip并不会发送漂移。因为keepalived服务主要检查keepalived服务状态和网络情况。

编写nginx.sh脚本,自动监控Nginx的运行状态
master和slave端

# mkdir /scripts
# vim /scripts/nginx.sh

#!/bin/bash
nginx_status=`ps -C nginx --no-header |wc -l`
if [ $nginx_status -eq 0 ]; then
systemctl stop keepalived
fi

给nginx.sh添加执行权限

# chmod +x /scripts/nginx.sh

设置keepalived配置nginx.sh脚本
重启keepalived

systemctl restart keepalived
Keepalived配置补充

什么是“抢占模式”
当master发送故障时。vip会自动从master漂移到slave,但是master修复完后,会从新抢占vip

怎么配置"抢占模式"

  • 在 /etc/keepalived/keepalived.conf配置MASTER/SLAVE的权重,权重越高,vip选择漂移到哪
  • 如果权重一样,则ip地址越大的,VIP选择漂移到哪

什么是“非抢占模式”
当master发送故障时。vip会自动从master漂移到slave,但是master修复完后,vip并不会漂移

怎么配置"非抢占模式"
master和slave端

# vim /etc/keepalived/keepalived.conf

重启keepalived服务:systemctl restart keepalived

VIP脑裂

脑裂:指在一个高可用系统中,当联系着的两个节
点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个
节点开始争抢共享资源,结果会导致系统混乱,数据损坏。(简言之:MASTER-SLAVE,两台机器上同时拥有VIP)

MASTER服务器 => 224.0.0.18(组播地址)发送数据包 <= BACKUP服务器(防火墙)

当有一天,BACKUP接受不到组播地址传输过来的数据包了,系统就会认

为MASTER已经宕机。开始选举生成新的MASTER。VIP脑裂最大的产生原因:就是防火墙未关闭或没有把vrrp协议添加到防火墙中。

安装tcpdump抓包服务

# yum install tcpdump -y

查看数据包是怎么发送的

tcpdump -i ens33 vrrp -n

模拟脑裂
slave端

# systemctl start firewalld

查看VIP与抓取vrrp协议的数据包

# ip a
# tcpdump -i ens33 vrrp -n

除MASTER机器以外,关闭所有的slave中的keepalived服务

systemctl stop keepalived

检查所有slave服务器端,防火墙是否未关闭或者没有把vrrp协议添加到防火墙规则中

# systemctl stop firewalld

或者添加到防火墙规则

# firewall-cmd --direct --permanent --add-rule ipv4 filter
INPUT 0 --in-interface ens33 --destination 224.0.0.18 --
protocol vrrp -j ACCEPT
# firewall-cmd --reload

这个时候集群就出现了两个vip,即脑裂。可以使用:tcpdump -i ens33 vrrp -n 查看数据包的来源

重新启动BACKUP机器上的keepalived

# systemctl start keepalived
单播模式

keepalived在组播模式下所有的信息都会向224.0.0.18的组播地
址发送,产生众多的无用信息,并且会产生干扰和冲突。另一方面,在某些特定环境(云服务器)禁止了组播方式,造成没办法获取到MASTER的数据包信息。

所以需要将其组播的模式改为单播。这是一种安全的方法,避免局域网内有大量的keepalived造成虚拟路由id的冲突(VIP脑裂)。 单播模式需要关闭vrrp_strict这个选项。单播需要在VIP实例配置段加入单播的源地址和目标地址

组播 : MASTER => 224.0.0.18 <= SLAVE
单播 : MASTER => SLAVE1,SLAVE2,SLAVE3

组播改单播
master端
slave端
重启keepalived服务

# systemctl restart keepalived

查看是否改为单播

# tcpdump -i ens33 vrrp -n

已经从组播变为单播

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/599786.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号