Keepalived+Nginx 高可用集群 (主从模式)

单台的nginx如果宕机,会导致整个系统瘫痪,如果使用nginx集群,当一台nginx宕机,备nginx依然可以提供服务。

nginx如何用两台 两个nginx搭建集群_nginx

环境准备

配置高可用准备工作:

  1. 需要2台服务器 192.169.72.129 ,192.168.72.130
  2. 在2台服务器安装nginx
  3. 在2台服务器安装keepalived

nginx安装请参考nginx安装 安装keepalived:

1.使用yum 命令进行安装:
yum install keepalived -y (本人在/usr 目录下执行)
2. 查看是否安装成功: rpm -q -a keepalived

nginx如何用两台 两个nginx搭建集群_IP_02

高可用配置

使用yum命令安装keepalived成功后,在/etc/keepalived目录下有keepalived.conf配置文件,高可用配置就是主要配置该文件。

把该配置文件的所有内容替换如下内容:(详细注释如下)

主机配置:

global_defs {
	notification_email {
	acassen@firewall.loc
	failover@firewall.loc
	sysadmin@firewall.loc
	}
	router_id 192.168.72.129 ## 标识本节点的字符串,通常为 hostname,也可以是本机ip
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance 的优先级
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh" ## 检测 nginx 状态的脚本路径
	interval 2 # (检测脚本执行的间隔)
	weight -20 ## 如果条件成立,权重-20
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
	state MASTER # 主节点为 MASTER, 对应的备份节点为 BACKUP
	interface eth0// # 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth0
	virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
	mcast_src_ip 192.168.72.129 ## 本机 IP 地址
	priority 100 #节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
	advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
	authentication { ## 设置验证信息,两个节点必须一致
		auth_type PASS
		auth_pass 1111  ## 真实生产,按需求对应该过来
	}
	virtual _ipaddress {
	 192.168.17.50 ## 虚拟 ip,可以定义多个
	}
}

从机配置:

global_defs {
	notification_email {
	acassen@firewall.loc
	failover@firewall.loc
	sysadmin@firewall.loc
	}
	router_id 192.168.72.130 ## 标识本节点的字符串,通常为 hostname
}

vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh" ## 检测 nginx 状态的脚本路径
	interval 2 # (检测脚本执行的间隔)
	weight -20 ## 如果条件成立,权重-20
}
vrrp_instance VI_1 {
	state BACKUP # 主节点为 MASTER, 对应的备份节点为 BACKUP
	interface eth0// # 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth0
	virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
	mcast_src_ip 192.168.72.130 ## 本机 IP 地址
	priority 80 #节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
	advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
	authentication { ## 设置验证信息,两个节点必须一致
		auth_type PASS
		auth_pass 1111  ## 真实生产,按需求对应该过来
	}
	virtual _ipaddress {
	 192.168.17.50 ## 虚拟 ip,可以定义多个
	}
}

检测脚本:nginx_check.sh (放在keepalived.conf配置的指定位置,本机位置:/usr/local/src/nginx_check.sh)

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

启动2台服务器上的 nginx 和 keepalived

启动 ngxin : ./nginx
启动keepalived: service keepalived start

也可以切换到 /usr/sbin/目录下执行 :./keepalived
查看启动进程:

nginx如何用两台 两个nginx搭建集群_IP_03