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

Stella981
• 阅读 685

环境: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源

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

 yum方式安装nginx

yum install nginx

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

安装环境依赖

yum -y install libnl libnl-devel

 下载keepalived包,并解压

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

 编译安装

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

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

cd /tmp/keepalived-2.0.19
cp keepalived/etc/init.d/keepalived /etc/init.d/

cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp etc/keepalived/keepalived.conf /etc/keepalived/

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

cd /etc/keepalived/
cp -r keepalived.conf keepalived.conf_bak
vi keepalived.conf

 主节点keepalived.conf配置如下:

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

 从节点keepalived.conf配置如下:

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

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

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

 添加脚本执行权限

chmod +x /etc/keepalived/nginx_check.sh

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

systemctl start nginx
systemctl enable nginx
systemctl start keepalived
systemctl enable keepalived

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

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

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

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

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

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

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

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这