Keepalived+nginx高可用-双机热备

前言

keepalived+nginx组合是当下很火的一种高可用处理方案。

keepalived是什么

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

keepalived原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和VRRP。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是来实现VRRP协议的。

原理图解

Keepalived+nginx高可用-双机热备_第1张图片
01.png
Keepalived+nginx高可用-双机热备_第2张图片
02.png
Keepalived+nginx高可用-双机热备_第3张图片
03.png

双机热备是指两台机器都在运行,但并非两台机器同时在提供服务。
当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,且切换的时间非常短。

keepalived的工作原理是VRRP——虚拟路由冗余协议。

Keepalived+nginx高可用-双机热备_第4张图片
408927-20151018113921538-1419258980.png

案例说明

使用两天虚拟机hadoop2004、hadoop2005分别装一台nginx、tomcat、keepalived完成上级热备测试

    机器                    软件
hadoop2004        tomcat、nginx、keepalived
hadoop2005        tomcat、nginx、keepalived

tomcat模拟真实服务
nginx做反向代理、负载均衡(一主一备)
keepalived做虚拟ip保证ip飘逸(即04挂了05顶上虚拟ip,防止虚拟ip找不到)

环境准备

jdk1.7
tomcat7
nginx

nginx安装略

1、启动hadoop2004和hadoop2005的tomcat

http://hadoop2004:8080/

Keepalived+nginx高可用-双机热备_第5张图片
2018-01-25_180019.png

http://hadoop2005:8080/

Keepalived+nginx高可用-双机热备_第6张图片
2018-01-25_180048.png

2、nginx配置反向代理(两台相同配置)
 upstream tomcat_server{
        server 192.168.90.224:8080 weight=10;
        server 192.168.90.225:8080 weight=20;
    }
    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://tomcat_server;
            root   html;
            index  index.html index.htm;
        }
}
Keepalived+nginx高可用-双机热备_第7张图片
2018-01-25_180447.png

启动nginx进行测试
分别访问并刷新我们发现nginx测试成功
http://hadoop2004/
http://hadoop2005/

Keepalived+nginx高可用-双机热备_第8张图片
2018-01-25_180722.png

Keepalived+nginx高可用-双机热备_第9张图片
2018-01-25_180739.png

这时候我们只需要做到nginx主备即可,即两台nginx都开着,一台down机另一台立刻替换。
但是我们知道,请求是只会访问一台机器(一个ip)的,如下图


Keepalived+nginx高可用-双机热备_第10张图片
145632498.gif

两台nginx主机上也装有keepalived,keepalived有一个作用就是虚拟ip,他可以将两台主机都虚拟出一个ip,当一台服务器down机,另一台机器同样可以接受请求(因为他们的ip一样),所以我们接下来的工作就是分别给两台机器上安装keepalived并共同虚拟一个192.168.90.250的虚拟ip,最终所有的请求均请求192.168.90.250这个ip即可。

keepalived安装

1、软件下载

http://rpmfind.net/linux/rpm2html/search.php?query=keepalived(x86-64)

2、rpm安装

查看openssl安装
rpm -qa | grep openssl

[root@hadoop2004 Desktop]# rpm -qa | grep openssl
openssl-1.0.1e-15.el6.x86_64
[root@hadoop2004 Desktop]#

安装keepalived
rpm -ivh keepalived-1.2.13-5.el6_6.x86_64.rpm

[root@hadoop2005 Desktop]# rpm -ivh keepalived-1.2.13-5.el6_6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:keepalived             ########################################### [100%]
[root@hadoop2005 Desktop]#

查看安装目录
rpm -ql keepalived


Keepalived+nginx高可用-双机热备_第11张图片
2018-01-24_164228.png

我们可以发现,keepalived直接被安装在etc下,其配置文件在etc/keepalived下。
同样的方式给另一台机器也安装上keepalived。

开关命令

service keepalived start
service keepalived stop
service keepalived restart

配置主机配置
! Configuration File for keepalived

#全局配置
global_defs {
   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
     [email protected]
   }
   notification_email_from [email protected]  #指定发件人
   #smtp_server XXX.smtp.com                             #指定smtp服务器地址
   #smtp_connect_timeout 30                               #指定smtp连接超时时间
   router_id LVS_DEVEL                                    #运行keepalived机器的一个标识
}

vrrp_instance VI_1 {
    state MASTER           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.90.250       #可以多个虚拟IP,换行即可
    }
}

配置备机配置
! Configuration File for keepalived

#全局配置
global_defs {
   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
     [email protected]
   }
   notification_email_from [email protected]  #指定发件人
   #smtp_server XXX.smtp.com                             #指定smtp服务器地址
   #smtp_connect_timeou![2018-01-25_183713.png](http://upload-images.jianshu.io/upload_images/2608446-7bcf7cfd8cf32278.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
t 30                               #指定smtp连接超时时间
   router_id LVS_DEVEL                                    #运行keepalived机器的一个标识
}

vrrp_instance VI_1 {
    state BACKUP           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 90           #MASTER权重要高于BACKUP 比如BACKUP为99
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.90.250       #可以多个虚拟IP,换行即可
    }
}

以上配置要注意的地方:
1、注意网卡绑定要与虚拟机一致,一般都是eth0,可以通过ifconfig查看
2、state 属性主机为MASTER、备机位BACKUP
3、priority 权重属性主机要高于备机
以上配置完成就可以分别启动keepalived。分别在hadoop2004和hadoop2005机器上执行命令:service keepalived start

ip add show eth0查询虚拟ip有没有成功
2004


Keepalived+nginx高可用-双机热备_第12张图片
2018-01-25_183713.png

2005


Keepalived+nginx高可用-双机热备_第13张图片
2018-01-25_184113.png

我们可以看到,这时候ip250是在hadoop2004主机上,我们访问192.168.90.250测试

2018-01-25_184259.png
Keepalived+nginx高可用-双机热备_第14张图片
2018-01-25_184313.png

这时候,假如我们的hadoop2004down机,看250ip会不会飘到hadoop2005主机上


Keepalived+nginx高可用-双机热备_第15张图片
2018-01-25_184620.png
Keepalived+nginx高可用-双机热备_第16张图片
2018-01-25_184610.png

我们发现虚拟ip250又跑的hadoop2005主机上了,此时我们再次访问192.168.90.250看看服务能否正常访问


Keepalived+nginx高可用-双机热备_第17张图片
2018-01-25_184812.png
Keepalived+nginx高可用-双机热备_第18张图片
2018-01-25_184822.png

你可能感兴趣的:(Keepalived+nginx高可用-双机热备)