Nginx+keepalived 高可用双机热备(主从模式)

环境:centos7.6 最小化安装

主:10.11.1.32

从:10.11.1.33

VIP:10.11.1.130

修改主节点主机名:

hostnamectl set-hostname web_balance_01

修改从节点主机名:

hostnamectl set-hostname web_balance_02

一、安装nginx(两个节点都需要安装)

配置官方nginx源

1cat /etc/yum.repos.d/nginx.repo 2[nginx] 3name=nginx repo 4baseurl=http://nginx.org/packages/centos/7/$basearch/ 5gpgcheck=0 6enabled=1

 yum方式安装nginx

yum install nginx

 二、安装keepalived(两个节点都需要安装)

安装环境依赖

yum -y install libnl libnl-devel

 下载keepalived包,并解压

1cd /tmp 2wget https://www.keepalived.org/software/keepalived-2.0.19.tar.gz 3tar -xf keepalived-2.0.19.tar.gz

 编译安装

1./configure --prefix=/usr/local/keepalived 2make -j2 3make install

 拷贝启动脚本至/etc/init.d/目录下

1cd /tmp/keepalived-2.0.19 2cp keepalived/etc/init.d/keepalived /etc/init.d/ 3 4cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 5mkdir /etc/keepalived 6cp etc/keepalived/keepalived.conf /etc/keepalived/

四、修改主节点keepalived.conf配置文件

1cd /etc/keepalived/ 2cp -r keepalived.conf keepalived.conf_bak 3vi keepalived.conf

 主节点keepalived.conf配置如下:

1! Configuration File for keepalived 2 3global_defs { 4 router_id web_balance_01 #标识本节点的名称,通常为hostname 5} 6 7## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。 8##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0, 9##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。 10 11vrrp_script chk_nginx { 12 script "/etc/keepalived/nginx_check.sh" 13 interval 2 #每2秒检测一次nginx的运行状态 14 weight -20 #失败一次,将自己的优先级-20 15} 16 17vrrp_instance VI_1 { 18 state MASTER # 状态,主节点为MASTER,备份节点为BACKUP 19 interface enp175s0f0 # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口 20 virtual_router_id 51 #虚拟路由的ID,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址 21 mcast_src_ip 10.11.1.32 # 本机IP地址 22 priority 100 # 节点优先级,值范围0254MASTER要比BACKUP23 advert_int 1 # 组播信息发送时间间隔,两个节点必须设置一样,默认为124 nopreempt #非抢占模式使用 25 26 # 设置验证信息,两个节点必须一致 27 authentication { 28 auth_type PASS 29 auth_pass 1111 30 } 31 32 # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个 33 virtual_ipaddress { 34 10.11.1.130 35 } 36 37 track_script { 38 chk_nginx # nginx存活状态检测脚本 39 } 40}

 从节点keepalived.conf配置如下:

1! Configuration File for keepalived 2 3global_defs { 4 router_id web_balance_02 #标识本节点的名称,通常为hostname 5} 6 7## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。 8##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0, 9##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。 10 11vrrp_script chk_nginx { 12 script "/etc/keepalived/nginx_check.sh" 13 interval 2 #每2秒检测一次nginx的运行状态 14 weight -20 #失败一次,将自己的优先级-20 15} 16 17vrrp_instance VI_1 { 18 state BACKUP # 状态,主节点为MASTER,备份节点为BACKUP 19 interface enp175s0f0 # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口 20 virtual_router_id 51 #虚拟路由的ID,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址 21 mcast_src_ip 10.11.1.33 # 本机IP地址 22 priority 90 # 节点优先级,值范围0254MASTER要比BACKUP23 advert_int 1 # 组播信息发送时间间隔,两个节点必须设置一样,默认为124 nopreempt #非抢占模式使用 25 26 # 设置验证信息,两个节点必须一致 27 authentication { 28 auth_type PASS 29 auth_pass 1111 30 } 31 32 # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个 33 virtual_ipaddress { 34 10.11.1.130 35 } 36 37 track_script { 38 chk_nginx # nginx存活状态检测脚本 39 } 40}

 五、创建nginx存在状态检测脚本(两个节点都需要创建)

1cd /etc/keepalived 2more nginx_check.sh 3#!/bin/bash 4A=`ps -C nginx --no-header | wc -l` 5if [ $A -eq 0 ];then 6 systemctl restart nginx #尝试重新启动nginx 7 sleep 2 #睡眠28 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then 9 killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点 10 fi 11fi

 添加脚本执行权限

chmod +x /etc/keepalived/nginx_check.sh

 六、依次启动主节点和从节点上的nginx和keepalived服务

1systemctl start nginx 2systemctl enable nginx 3systemctl start keepalived 4systemctl enable keepalived

 七、在主节点上查询VIP绑定状态

 八、停止任意节点的nginx服务,检查keepalived 是否会通过脚本自动启动nginx服务

 九、停止主节点的keepalived服务可以看到VIP已经绑定到从节点上

 参考:https://www.cnblogs.com/ZHUJIBlogs/p/10396328.html

https://blog.csdn.net/u012599988/article/details/82152224

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Nginx+keepalived 高可用双机热备(主从模式) - HelloWorld