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. MAC OS 英语朗读功能

    哈哈哈,太神奇了 在命令行中敲say + word ,系统能够自己讲word读出来. 如果是敲的是 say +中文, 就不知道再读什么啦 哈哈哈哈---- 此外,在对应网站选中内容后还可以右击,用sp ...

  2. Java内存管理知识你需要吗?

    0.Java 对内存的划分: Java虚拟机规范将物理内存(主内存和CPU中的缓存.寄存器)划分为程序计数器.Java 虚拟机栈.本地方法栈.Java 堆.方法区五个区域,但并没有规定这些区域的具体实 ...

  3. jq 插件写法

    1.一次声明一个函数 $.fn.函数名 = function([options]){} $.fn.red=function(options){ var defaults = { 'color': 'r ...

  4. charles的破解方法

    http://blog.csdn.net/tech4j/article/details/53509329 mac下的charles遇到的问题. http://blog.csdn.net/songzhu ...

  5. NeteaseCloudWebApp模仿网易云音乐的vue自己从开源代码中学习到的

    github地址: https://github.com/javaSwing/NeteaseCloudWebApp 1.Vue.prototype.$http = Axios // 类似于vue-re ...

  6. Spring源码的编译、下载和阅读

    原文出处: 分享牛 想对spring框架进行深入的学习一下,看看源代码,提升和沉淀下自己,工欲善其事必先利其器,还是先搭建环境吧. 环境搭建 sping源码之前是svn管理,现在已经迁移到了githu ...

  7. 2017-03-03 Oracle在.Net中出现未在本地计算机上注册“OraOLEDB.Oracle”提供程序的错误

    在前面的Oracle配置完成后,打开项目运行出错,出现未在本地计算机上注册“OraOLEDB.Oracle”提供程序的错误,看到“注册”两个字,首先想到,难道还要用命令行注册一下?果不其然,需要手动注 ...

  8. js获取表格视图所选行号的ids

    实例化数组 遍历所选行push到数组中 将数组join转换为以,分割的字符串 /*获取指定id的datagrid的表格视图的选择的ids*/ function getDataGridSelectRow ...

  9. Java基础-IO流(13)

    IO流用来处理设备之间的数据传输.可以实现文件复制,上传文件和下载文件. Jdk提供的流继承了四大类:InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输 ...

  10. Connecting Vertices CodeForces - 888F (图论,计数)

    链接 大意: 给定邻接表表示两点是否可以连接, 要求将图连成树, 且边不相交的方案数 n范围比较小, 可以直接区间dp $f[l][r]$表示答案, $g[l][r]$表示区间[l,r]全部连通且l, ...