keepalived双机热备nginx的配置方法

nginx目前是我最常用的反向代理服务,线上环境为了能更好的应对突发情况,一般会使用keepalived双机热备nginx或者使用docker跑nginx集群,keepalived是比较传统的方式,虽然用docker跑nginx集群更方便,但传统的方式总是有他的可取之处,并且多学一些东西也很好。以后也会写如何使用docker跑nginx集群。

  环境准备:

  2台centos: 192.168.0.105 和192.168.0.118,虚拟IP(VIP)为192.168.0.119

配置keepavlived

  分别在105和118上安装keepalived

yum install keepalived

  准备心跳角本

  keepalived的配置相当灵活,可以定时执行角本命令,用于心跳检查,比如,我们访问nginx发现nginx不可访问时,就关闭keepalived,从而切换到从nginx来实现不间断的服务支持。

vi /etc/keepalived/keepalived.conf

#!/bin/bash

count=0
for (( k=0; k<2; k++ ))
do
 check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost:81 -o /dev/null )
 if [ "$check_code" != "200" ]; then
  count=count +1
  continue
 else
  count = 0
  break
 fi
done
if [ "$count" != "0" ]; then
 killall keepalived
 exit 1
else
 exit 0
fi

  这段角本的意思就是说每次的心跳检查会执行一个for循环,访问http://localhost:81,在for的2次循环中如果返回的状态都不是200就会关闭keepalived。这个角本在105和118两台机器上都要准备好。

  设置118机器上的keepalived为主节点,105机器上的keepalived为从节点,它们两个的配置文件差不太多

vi /etc/keepalived/keepalived.conf

  118机器keepalived的配置文件

! Configuration File for keepalived
vrrp_script chk_nginx {
 script "/etc/keepalived/check_nginx.sh" # 心跳检测角本
 interval 2 #脚本执行间隔,每2s检测一次
 weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
 fall 3 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
 rise 2 #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
 state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
 interface eth0 #指定监测网络的接口。实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
 mcast_src_ip 192.168.0.118 ## 发送多播数据包时的源IP地址
 virtual_router_id 51 #虚拟路由标识,MASTER和BACKUP必须是一致的
 priority 100 #定义优先级,数字越大,优先级越高
 advert_int 2 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
 authentication { #设置验证类型和密码。主从必须一样
  auth_type PASS #设置vrrp验证类型,主要有PASS和AH两种
  auth_pass 1111 #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
 }
 virtual_ipaddress {
  192.168.0.119 #VRRP 虚拟地址 如果有多个VIP,换行填写
 }
 track_script {
  chk_nginx # 心跳脚本,即在 vrrp_script 部分指定的名字
 }
}

115机器上的角本对上面的角本稍做变动即可

改变 state MASTER -> state BACKUP,priority 100 -> priority 90,mcast_src_ip 192.168.0.118 -> mcast_src_ip 192.168.0.105。其他的地方保持不变,是不是很简单。

! Configuration File for keepalived
vrrp_script chk_nginx {
 script "/etc/keepalived/check_nginx.sh"
 interval 2
 weight -5
}
vrrp_instance VI_1 {
 state BACKUP # 修改
 interface eth0
 mcast_src_ip 192.168.0.105 # 修改 为本机IP
 virtual_router_id 51
 priority 90 #数字变小
 advert_int 2
 authentication {
  auth_type PASS
  auth_pass 1111
 }
 virtual_ipaddress {
  192.168.0.119
 }
 track_script {
  chk_nginx
 }
}

到这里keepalived的简单配置就完成了下面就启动keepalived

service keepalived start

安装Nginx

查看nginx的依赖库是否完整 

rpm -qa zlib
rpm -qa zlib-devel
rpm -qa openssl
rpm -qa openssl-devel
rpm -qa pcre
rpm -qa pcre-devel
rpm -qa gcc

如果没有就安装 

yum -y install gcc zlib zlib-devel openssl openssl-devel pcre-devel

下载并解压nginx

mkdir nginxsrc
cd nginxsrc/

wget http://nginx.org/download/nginx-1.13.9.tar.gz
tar zxvf nginx-1.13.9.tar.gz
cd nginx-1.13.9/

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module

安装在/usr/local/nginx/sbin/nginx 目录下 

make&&make install 

执行成功后会显示leaving directory  

启动

/usr/local/nginx/sbin/nginx 

检查

ps aux|grep nginx 

开机启动

vi /etc/rc.local

添加一行

/usr/local/nginx/sbin/nginx 

因为我的机器上80端口被别的应用占用了,所以就修改105和118的 nginx.conf 把端口80 修改为81

vi /usr/local/nginx/conf/nginx.conf

 

分别个性105 和119上的index.html 加上一个ip以便们们识别打开的是哪个ip上的index.html

vi /usr/local/nginx/html/index.html

nginx重新加载配置

/usr/local/nginx/sbin/nginx -s reload

好了,我们访问一下

curl 192.168.0.119:81

返回的html是 118机器上的index.html

 现在我们把118的nginx停止

 /usr/local/nginx/sbin/nginx -s stop

这时118上的keepalived的心跳检查角本发现nginx无法访问会把keepalived关闭,然后转向从节点

我们再访问一下119

 curl 192.168.0.119:81

在118上重新启动nginx和keepalived

再访问119 返回的网址是118上的index.html

总结

以上所述是小编给大家介绍的keepalived双机热备nginx的配置方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

您可能感兴趣的文章:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340