https://blog.csdn.net/u012410733/article/details/57078407

在网络中机器不可避免的出现单点故障,当我们使用nginx进行反向代理的时候如果出现了nginx机器宕机,那么整个服务就会出现不可用的状态。那么我们针对这种情况我们该如何解决它呢?使用keepalive可以解决这个问题。那么什么是keepalived呢?

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

下面我们就来配置基于keepalived的nginx的高可用方案:

准备条件:
1.启动两台虚拟机.e.g.:

192.168.64.128
192.168.64.129
1
2
2.两台虚拟机上分别安装nginx,可参考 – Linux Nginx安装
3.修改nginx的html文件,(NGINX_HOME/html/index.html),来标识它属于哪台虚拟机。如下所示:

1) 192.168.64.128

2) 192.168.64.129

1、下载keepalive
去keepalived官网下载你所需要的版本,我所下载的为:keepalived-1.3.4.zip

2、上传到Linux
使用Linux中的rz/sz命令把zip包上传到

/carl/data/program
1
并创建keepalive,把源文件和安装文件区分开来。

/carl/data/program/keepalive
1
3、解压keepalived
unzip keepalived-1.3.4.zip
1
然后

cd keepalived-1.3.4
1
4、安装keepalived
4.1.配置keepalived安装目录
./configure --prefix=/carl/data/program/keepalived --sysconf=/etc
1
注意:

1:keepalive启动时候会默认读取/etc/keepalived/keepalived.conf
2:可能出现缺少依赖opensssl 。

yum install openssl-devel
1
4.2)编译keepalived
make && make install
1
4.3) keepalived创建快捷方式
ln -s /carl/data/program/keepalived/sbin/keepalived /sbin/ --建立软链接
cp //data/program/keepalived-1.3.4/keepalived/etc/init.d/keepalived /etc/init.d
1
2
4.4) 添加keepalived到系统服务
chkconfig –add keepalived -- 添加到系统服务
chkconfig keepalived on -- 检测是否添加成功
1
2
4.5) 启动keepalived
service keepalvied start|stop|restart
1
可能出现会出现提示权限不足:

chmod +x /etc/init.d/keepalived
1
4.6) 修改keepalive配置文件
以上步骤对于两台虚拟机都是一样的。这里修改配置文件就涉及到主从问题,在这里我们把192.168.64.128配置为主服务器,把192.168.64.129配置为从服务器。下面我们就先来配置192.168.64.128:

vi /etc/keepalived/keepalived.conf
1
以下是修改后的配置文件:

global_defs {
## 设置lvs的id,在一个网络内唯一
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
## 主机配置,从机为BACKUP
state MASTER
## 网卡名称
interface eno16777736
virtual_router_id 51
## 权重值,值越大,优先级越高,backup设置比master小,这样就能在master宕机后讲backup变为master,而master回复后就可以恢复.
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
## 同一网段虚拟IP
192.168.64.100
}
}

virtual_server 192.168.64.100 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP

real_server 192.168.64.128 80 {
weight 1
TCP_CHECK{
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
下面我们来看一下从机192.168.64.129的配置:

global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.64.100
}
}

virtual_server 192.168.64.100 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP

real_server 192.168.64.129 80 {
weight 1
TCP_CHECK{
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
4.7) 重启keepalived
分别重启两台虚拟机的keepalived,当我们访问上面配置同一网段的虚拟IP地址:
192.168.64.100访问的就是主服务器:192.168.64.128

并且当我们关闭掉主机也就是192.168.64.128的keepalived时,就会访问从机的nginx服务:

5、配置keepalived的日志
5.1、修改/etc/sysconfig/keepalived
vi /etc/sysconfig/keepalived
1
修改为:

KEEPALIVED_OPTIONS="-D -d -S 0"
1
“-D” 就是输出日志的选项
这里的“-S 0”表示local0.* 具体的还需要看一下/etc/syslog.conf文件

5.2、修改/etc/rsyslog.conf
在/etc/rsyslog.conf中添加以下代码:

local0.* /var/log/keepalived.log
1
5.3、重新启动keepalived和rsyslog服务
service rsyslog restart
service keepalived restart
1
2
然后就可以查看keepalived的日志了:

tail -f /var/log/keepalived.log
1

再修改keepalived配置文件如果没有生效可以配置keepalived的日志来帮助你修改配置文件。

6、检测Nginx心跳
当我们配置了keepalived,当主keepalived的宕机了。会自动更改路由到backup的keepalived,但是如果nginx挂掉的话,keepalived就会找不到nginx服务这样还是会造成nginx服务不可用。那么我们就可以在keepalived中添加心跳script,用来检测nginx心跳,如果检测不到nginx服务,就关闭掉keepalived的进程。这样从机的keepalive服务就可以被调用。

下面就是检测nginx的心跳脚本:

/carl/data/program/nginx/sbin/check_nginx_alive.sh

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

A=`ps -C nginx --no-header |wc -l`

if [ $A -eq 0 ]
then
echo 'nginx server is died'
killall keepalived
fi
1
2
3
4
5
6
7
8
9
10
11
然后再在修改/etc/keepalived/keepalived.conf文件:

## 1.new add start
vrrp_script check_nginx_alive {
script "/carl/data/program/nginx/sbin/check_nginx_alive.sh"
interval 3
weight -10
}
## 1.new add end

global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.64.100
}
## 2.new add start
track_script {
check_nginx_alive
}
## 2.new add end
}

virtual_server 192.168.64.100 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP

real_server 192.168.64.128 80 {
weight 1
TCP_CHECK{
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
上面是主机192.168.64.128的配置,可以看到一共新添加了两个地方,主要是添加了一个shell脚本用于检测nginx是否存活,然后再在keepalived的配置文件中,添加这个这个检测心跳的文件。这个是主机的配置,那么从机也需要做相应的修改。那么不管是keepalived宕机还是nginx宕机都会切换到可以热备的机器中去,这样就达到了nginx的可高用。
---------------------
作者:carl-zhao
来源:CSDN
原文:https://blog.csdn.net/u012410733/article/details/57078407
版权声明:本文为博主原创文章,转载请附上博文链接!

nginx keepalive 高可用的更多相关文章

  1. 【Nginx】使用keepalive和nginx搭载高可用

    首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现web服务端的高可用. Keepa ...

  2. [原创]lvs+ospf+nginx实现高可用大流量web架构

    lvs+ospf+nginx实现高可用大流量web架构配置总概述 架构图: 配置如下: .quagga之zebra配置: # cat /etc/quagga/zebra.conf ! ! Zebra ...

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

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

  4. nginx+keepalived 高可用方案

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

  5. 分布式架构高可用架构篇_04_Keepalived+Nginx实现高可用Web负载均衡

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  6. 基于keepalived 实现VIP转移,lvs,nginx的高可用

    转自:http://www.tuicool.com/articles/eu26Vz 一.Keepalived 高可用集群的解决方案 二.VRRP的有限状态机 三.利用keepalived 实现主从VI ...

  7. Keepalived+Nginx实现高可用Web负载均衡

    1.安装编译 Nginx 所需的依赖包# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zli ...

  8. nginx+keepalived高可用web负载均衡

    一:安装环境 准备2台虚拟机,都安装好环境 centos 7keepalived:vip: 192.168.1.112192.168.1.110 nginxip 192.168.1.109 maste ...

  9. [转]搭建Keepalived+Nginx+Tomcat高可用负载均衡架构

    [原文]https://www.toutiao.com/i6591714650205716996/ 一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最 ...

随机推荐

  1. CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL)的方法

    CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL)的方法 准备篇: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A I ...

  2. MVC扩展Url.Action方法解决复杂对象参数问题

    1:问题描述 @Url.Action("Index", "Home", new { Key = "Key", Val = new { Nam ...

  3. Codeforces 861D - Polycarp's phone book

    861D - Polycarp's phone book 思路:用map做的话,只能出现一次循环,否则会超时. 代码: #include<bits/stdc++.h> using name ...

  4. Java中泛型使用

    Java中泛型使用 泛型作用: 泛型:集合类添加对象不用强转 反射机制:将泛型固定的类的所有方法和成员全部显示出来 核心代码: ArrayList<Ls> ff=new ArrayList ...

  5. 发票查验---异步处理多条记录---demo代码

    /// 窗体加载事件        /// </summary>        /// <param name="obj"></param>   ...

  6. sgu 126 Boxes

    题意:较大的容量减较小的容量,较小的容量翻倍.问操作几回其中一个空. 开始用set判重,重复就不可行.不过状态最多有2e18种.不仅爆内存,还超时.然后找规律.发现只有比例为1:1,1:3,1:7,3 ...

  7. Confluence 6 管理多目录概述

    这里是有关目录顺序如何影响处理流程: 目录中的顺序是被用来如何查找用户和组的顺序. 修改用户和用户组将会仅仅应用到应用程序具有修改权限的第一个目录中. 配置目录载入顺序 你可以修改在 Confluen ...

  8. Ultimate Weirdness of an Array CodeForces - 671C (gcd,线段树)

    大意: 定义一个数列的特征值为两个数gcd的最大值, $f(l,r)$表示数列删除区间$[l,r]$的元素后剩余元素的特征值, 求$\sum_{i=1}^n\sum_{j=i}^n{f(i,j)}$ ...

  9. 新学dfs(看懂了)

    在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走.从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走 ...

  10. Socket编程基础篇

    Socket又称"套接字",应用程序通常通过“套接字”向网络发生请求或者应答网络请求. Socket和ServerSocket类库位于java.net包中,ServerSocket ...