环境: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服务可以看到VIP已经绑定到从节点上

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

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

Nginx+keepalived 高可用双机热备(主从模式)的更多相关文章

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

    基础介绍负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行. 关于负载均衡介绍,可以参考:li ...

  2. Nginx+Keeplived双机热备(主从模式)

    Nginx+Keeplived双机热备(主从模式) 参考资料: http://www.cnblogs.com/kevingrace/p/6138185.html 双机高可用一般是通过虚拟IP(漂移IP ...

  3. heartbeat+DRBD 高可用 双机热备

    heartbeat+DRBD 高可用 双机热备 原创博文http://www.cnblogs.com/elvi/p/7658109.html ## heartbeat+DRBD 高可用 双机热备 # ...

  4. haproxy/nginx+keepalived负载均衡 双机热备 邮件报警 实战及常见问题

    Haproxy 做http和tcp反向代理和负载均衡keepalived 为两台 Haproxy 服务器做高可用/主备切换.nginx   为内网服务器做正向代理,如果业务需求有变化,也可以部分替代 ...

  5. 使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】

    一般拿Timer和Quartz相比较的,简直就是对Quartz的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的序列化机制,可以序列到 sqlserver,mysql,当然还可以在 ...

  6. Nginx+keepalived双机热备(主从模式)

    简单介绍: Keepalived是Linux下面实现VRRP备份路由的高可靠性运行软件,能够真正做到 主服务器和备份服务器故障时IP瞬间无缝交接; Keepalived的目的是模拟路由器的高可用; H ...

  7. nginx+keepalived 高可用方案

    nginx+keepalived 高可用方案 准备工作 192.168.157.11 192.168.157.12 安装nginx 跟新yum源文件 rpm -ivh http://nginx.org ...

  8. Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  9. Nginx+keepalived(高可用主备模式)

    Nginx+keepalived(高可用主备模式) 环境:centos6.7 准备:两台服务器(虚拟机).两台应用(Tomcat).Nginx.keepalived server1:192.168.2 ...

随机推荐

  1. SPI ServiceLoader源码分析

    public class ddd { public static void main(String[] args) { ServiceLoader1<Hello> sl = Service ...

  2. json对象转js对象

    json数据: { "YD1": 0, "YD2": 0, "YD3": 0, "YD4": 0, "YD5& ...

  3. Codeforces Round #603 (Div. 2) (题解)

    A. Sweet Problem (找规律) 题目链接 大致思路: 有一点瞎猜的,首先排一个序, \(a_1>a_2>a_3\) ,发现如果 \(a_1>=a_2+a_3\) ,那么 ...

  4. C_局部变量&全局变量

    2018-5-9   Writen By Stephen.Yu  一.定义 1. 局部变量:在函数中定义的变量 2. 全局变量:在所有函数体之外定义 定义(Definition):声明并分配内存;未分 ...

  5. Tcl语言学习--基础知识

    一.脚本.命令和单词符号 一个TCL脚本可以包含一个或多个命令.命令之间必须用换行符或分号隔开. 1.关键字/变量 变量是程序的基础变量组成:变量名.变量值变量名要求:任何字符串都可以作为变量名,区分 ...

  6. vue动态加载不同的组件(分内部和外部组件)

    <!DOCTYPE html> <html> <head> <title> hello world vue </title> <met ...

  7. workermanPHP聊天框架项目windows环境部署实践

    一.官方下载地址: https://www.workerman.net/workerman-chat 二.下载后解压至任意目录,如下图: 三.windows需配置PHP环境变量,如下图: 四.双击st ...

  8. honeyd使用

    honeyd可以同时模仿上千个不同的计算机 官网 honeyd-1.5c.tar.gz:http://www.honeyd.org 依赖包 libevent-1.3a.tar.gz:http://li ...

  9. 关于服务器程序运行中收到SIGPIPE(转)

    (此文为原文删减版,原文地址:http://blog.sina.com.cn/s/blog_502d765f0100kopn.html) 我写了一个服务器程序,在Linux下测试,然后用C++写了客户 ...

  10. synchronized底层实现原理

          基于进入和退出管程(Monitor)对象实现,无论显式(Monitorenter Monitorexit)还是隐式都是如此.同步方法并不是由monitorenter和monitorexit ...