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. cygwin install git

    Installation with Cygwin If you're comfortable with Cygwin, then use it to install git, ssh, wget an ...

  2. Unity如何判断一个对象是不是一件衣服

    判断该对象及其子对象上是否有SkinnedMeshRenderer组价即可 public static bool IsCloth(Transform obj) { bool isCloth = fal ...

  3. Unity 代码优化

    1.不用的代码删除掉,因为即使不用的代码也会 IL2Cpp. 2.MonoBehaviour 的方法是空方法,特别是Update方法,删除掉,会有性能消耗. 3.Unity 中 override 的方 ...

  4. Java 集合-Arrays工具类的介绍

    2017-10-31 18:39:46 Arrrays工具类:此类包含用来操作数组(比如排序和搜索)的各种方法. 常用方法: 主要是数组的一些常用方法如: asList:将数组转成集合 binaryS ...

  5. 『Numpy学习指南』排序&索引&抽取函数介绍

    排序: numpy.lexsort(): numpy.lexsort()是个排字典序函数,因为很有意思,感觉也蛮有用的,所以单独列出来讲一下: 强调一点,本函数只接受一个参数! import nump ...

  6. TCP/IP四层与OSI七层模型

      OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行实 ...

  7. hdu1180 优先队列bfs+判断方向

    诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Subm ...

  8. iOS UI-微博案例(通过代码自定义Cell)

    一.Model BWWeiBo数据模型 #import <Foundation/Foundation.h> @interface BWWeiBo : NSObject @property ...

  9. 【转】asp.net 下的中文分词检索工具 - jieba.net

    jieba是python下的一个检索库, 有人将这个库移植到了asp.net 平台下, 完全可以替代lucene.net以及盘古分词的搭配 之所以写这个, 其实是因为昨天面试时, 被问到网站的关键字检 ...

  10. linux tcpdump 抓包

    tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04. tcpdump的命令格式 tcpdump的参数众多,通过man tcpdump ...