17. Nginx + keepalived 高可用

17. Nginx 高可用

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

在这里插入图片描述

试验场景说明:
	1)在两台服务器上分别安装 nginx 和 keepalived 
	2)本次主要配置 nginx 高可用(主从模式),只考虑 nginx 存活及访问问题
	3)实际访问时使用 keepalived 虚拟 IP进行访问
17.1.1 准备测试机器
主机ip环境
Nginx01 (maste)192.168.169.151CentOS Linux release 7.9.2009 (Core)
keepalived-1.3.5
nginx/1.8.1
Nginx02 (back)192.168.169.152CentOS Linux release 7.9.2009 (Core)
keepalived-1.3.5
nginx/1.8.1
web192.168.169.150tomcat
17.1.2 安装 keepalived
# 分别在两台 nginx 服务器上安装 keepalived
yum -y install keepalived

17.1.3 修改主机(master)配置文件
  • 主机配置文件
# 修改 Keepalived 配置文件,将原本的 keepalived.conf 文件备份,新建 keepalived.conf 文件加入如下内容
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
# 注意:这个是 master(主机) 的配置文件
! Configuration File for keepalived		# 这一行为注释
global_defs { 
	router_id nginx01	# router_id 机器标识,通常使用 hostname,相对具有唯一性,和备机区分开,不能使用同一个标识
}


vrrp_script chk_nginx {		# 定义一个检测脚本,在global_defs之外配置
  script "/etc/keepalived/check_nginx.sh"	# 自己写的监测脚本
  interval 2	# 每2s监测一次
  weight 10		# 该参数用于指定当监测失效时,该设备的优先级会减少的值,该值为负表示减少
  fall 2        # 尝试两次都成功才成功
  rise 2        # 尝试两次都失败才失败
}


vrrp_instance VI_1 {		# 定义一个vrrp_install实例,名称为VI_1
	state MASTER			# 表示该实例的角色状态,有MASTER和BACKUP两种主备状态
	interface ens33			# 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1
	virtual_router_id 51	# 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
	priority 150			# priority表示实例优先级,数字越大,优先级越高。master 的优先级必须大于 backup
	advert_int 1			# 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒
	
	authentication {		# 权限认证配置
		auth_type PASS		# 主要有 PASS 和 AH 两种
		auth_pass 1111		# 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
	}
	
	virtual_ipaddress {
		192.168.169.200		# 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
	}
	
	
	track_script {		# 调用自定义的脚本
        chk_nginx
    }
	
	notify_master /etc/keepalived/to_master.sh		# 指定当切换到 master 时,执行的脚本,即切换到 master 时要将 backup 的 server 关掉
	
	
}
  • 主机切换脚本
# 指定当切换到 master 时,执行的脚本,即切换到 master 时要将 backup 的 server 关掉
#!/bin/bash

sshpass -p 0 ssh -o StrictHostKeyChecking=no root@192.168.169.152 "nginx -s stop"

nginx
  • Nginx 服务检查脚本
#! /bin/bash
# 当 nginx 服务 down 掉之后,通过 keepalived 检查,确认没有服务重新启动 nginx
nginx_server=`ps -C nginx --no-header | wc -l`

if [ $nginx_server -gt 0 ];then
    exit 1
else
	nginx
fi
17.1.4 修改备机(backup)配置文件
  • 备机配置文件
# 注意:这个是 master(备机) 的配置文件
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived		# 这一行为注释
global_defs { 
	router_id nginx02	# router_id 机器标识,通常使用 hostname,相对具有唯一性,和主机区分开,不能使用同一个标识
}

vrrp_script chk_nginx {		# 定义一个检测脚本,在global_defs之外配置
  script "/etc/keepalived/check_nginx.sh"	# 自己写的监测脚本
  interval 2	# 每2s监测一次
  weight 10		# 该参数用于指定当监测失效时,该设备的优先级会减少的值,该值为负表示减少
  fall 2        # 尝试两次都成功才成功
  rise 2        # 尝试两次都失败才失败
}

vrrp_instance VI_1 {		# 定义一个vrrp_install实例,名称为VI_1
	state BACKUP			# 表示该实例的角色状态,有MASTER和BACKUP两种主备状态
	interface ens33			# 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1
	virtual_router_id 51	# 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
	priority 149			# priority表示实例优先级,数字越大,优先级越高。master 的优先级必须大于 backup
	advert_int 1			# 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒
	
	authentication {		# 权限认证配置
		auth_type PASS		# 主要有 PASS 和 AH 两种
		auth_pass 1111		# 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
	}
	
	virtual_ipaddress {
		192.168.169.200		# 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
	}
	
	track_script {		# 调用自定义的脚本
        chk_nginx
    }
	
	notify_master /etc/keepalived/to_backup.sh		# 指定当切换到 backup 时,执行的脚本,切换到 backup 时将 master 的 server 关掉
}
  • 备机切换脚本
# 指定当切换到 backup 时,执行的脚本,切换到 backup 时将 master 的 server 关掉
#!/bin/bash

sshpass -p 0 ssh -o StrictHostKeyChecking=no root@192.168.169.151 "nginx -s stop"

nginx
  • Nginx 服务检查脚本
#! /bin/bash
# 当 zabbix server 服务 down 掉之后,通过 keepalived 检查,确认没有服务重新启动 zabbix server
nginx_server=`ps -C nginx --no-header | wc -l`

if [ $nginx_server -gt 0 ];then
    exit 1
else
    nginx
fi
17.1.5 启动 keepalived
# 启动 keepalived
systemctl start keepalived.service
systemctl enable keepalived.service

# master 查看虚拟 IP 地址
ip a

在这里插入图片描述

# backup 查看虚拟 IP 地址,此时 nginx01 是 master 所以 VIP 在 nginx01上
ip a

在这里插入图片描述

17.1.6 修改 nginx 配置文件
  • 主备机器都添加如下配置
server {
	listen       80;
	server_name  192.168.169.200;	# 这里是使用虚拟 IP 访问

	location / {
		proxy_pass  http://192.168.169.150:8080;
	}
	
}
17.1.7 测试

浏览器访问:192.168.169.200

此时虚拟 IP 是在 master 192.168.169.151 上

在这里插入图片描述

将 192.168.169.151 关机测试虚拟 IP 跳转到 192.168.169.152 继续提供服务

在这里插入图片描述

浏览器访问:192.168.169.200

此时虚拟 IP 是在 backup192.168.169.152 上

在这里插入图片描述

17.2 Keeplived+Nginx 高可用集群(双主模式)

 
 
 
 
 

  • 11
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值