前言
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协议的。
原理图解
01.png 02.png 03.png双机热备是指两台机器都在运行,但并非两台机器同时在提供服务。
当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,且切换的时间非常短。
keepalived的工作原理是VRRP——虚拟路由冗余协议。
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
2018-01-25_180019.png 2018-01-25_180048.png2、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;
}
}
2018-01-25_180447.png
启动nginx进行测试
分别访问并刷新我们发现nginx测试成功
http://hadoop2004/
http://hadoop2005/
这时候我们只需要做到nginx主备即可,即两台nginx都开着,一台down机另一台立刻替换。
但是我们知道,请求是只会访问一台机器(一个ip)的,如下图
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
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到的对象,一行一个
XXX@XXX.com
}
notification_email_from XXX@XXX.com #指定发件人
#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到的对象,一行一个
XXX@XXX.com
}
notification_email_from XXX@XXX.com #指定发件人
#smtp_server XXX.smtp.com #指定smtp服务器地址
#smtp_connect_timeou![2018-01-25_183713.png](https://img.haomeiwen.com/i2608446/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
2018-01-25_183713.png
2005
2018-01-25_184113.png
我们可以看到,这时候ip250是在hadoop2004主机上,我们访问192.168.90.250测试
2018-01-25_184259.png 2018-01-25_184313.png这时候,假如我们的hadoop2004down机,看250ip会不会飘到hadoop2005主机上
2018-01-25_184620.png 2018-01-25_184610.png
我们发现虚拟ip250又跑的hadoop2005主机上了,此时我们再次访问192.168.90.250看看服务能否正常访问
2018-01-25_184812.png 2018-01-25_184822.png
网友评论