keepalived高可用
keepalived高可用:
架构图:
上图画的不对称好难看,将就下吧
根据上边一路走来,已经是搭好了从nginx主到服务器的这条线的,那么同理,使用nginx备机192.168.50.135上再搭建nginx,也是代理192.168.137和139两台服务器。搞了一次之后也就简单了
在192.168.50.135上安装nginx,配置nginx配置即可,不再赘述,nginx备机配置如下:
配置和上边的是一样的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
........upstream
blank {
#ip_hash;
server 192.168 . 50.137 : 8080 ;
server 192.168 . 50.139 : 8080 ;
}
server
{
listen 80 ;
server_name
localhost;
#charset
koi8-r;
#access_log
logs/host.access.log main;
location
/ {
proxy_pass
http: //blank;
root
html;
index
index.html index.htm;
}........
|
那么现在就是相当于有两套nginx了,代理的服务器是一样的,为什么要搞两套?
假设只有一台nginx的话,这个nginx服务器挂了。那怎么办?
所以需要一台备份nginx。
正常情况下,主nginx作为反向代理服务器即可,假设nginx服务器挂了的话,能够立即切换到备份机上,保证用户可以访问,然后运维人员把主nginx服务器故障修好之后,又能够自动切换到主nginx提供服务。通过keepalived来监测两台服务器,正常情况时,将nginx主服务器ip(192.168.50.133)绑定到keepalived定义的一个虚拟ip(我设置为192.168.50.88)上,通过这个虚拟IP可以访问nginx,然后备机(192.168.50.135)啥事不干,就是每隔一小段时间(设置为1秒)keepalived会告诉备机,你不用管,我还活着呢,如果突然主机死了,那么就会超过一秒备机没有收到主机或者的消息,那么备机马上接管主机,keeplived将虚拟ip绑定到备机身上,网站继续提供服务。
突然主机又复活了(运维人员排除故障了),那么备机又将收到主机的活着的消息,于是将管理权交回给主机,虚拟ip又绑到主机上,大概就是这么个过程,个人理解。
先在两台nginx服务器(主备)上都装上keepalived:
下载:这里使用rpm安装,是区分32,64位的,不要搞错了哦
keepalived-1.2.7-3.el6.x86_64.rpm
openssl-1.0.1e-30.el6_6.4.x86_64.rpm
要求必须是openssl-1.0.1e或以上才行、如果版本已经符合(因为安装nginx时已经安装openssl,使用yum安装应该是符合的)、不用再安装openssl,使用 rpm -q openssl 查看当前openssl版本,我这已经是1.0.1e 48的,所以就不安装了
将两个rpm安装包上传到两台nginx服务器,进入上传到的目录,运行以下命令安装:--nodeps是忽略依赖包,当然最好是把依赖包装上,去掉--nodeps可以看到错误,需要哪些依赖包
如果需要安装openssl
1
|
rpm
–Uvh --nodeps ./openssl- 1.0 .1e- 30 .el6_6. 4 .x86_64.rpm
|
安装keepalived:
1
|
rpm
-Uvh --nodeps ./keepalived- 1.2 . 7 - 3 .el6.x86_64.rpm
|
安装完毕后再/etc/keepalived/目录下有个文件 keepalived.conf即是本台服务器keepalived的核心配置文件了:
重点:keepalived配置,配置文件上边部分按照下面的配置就行了,配置文件后面的内容可以不用管,还没有去研究其他部分
先配置主机192.168.50.133的keepalived,按下边进行配置
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
|
!
Configuration File for keepalived
#这是全局配置
global_defs
{
#指定keepalived在发生切换时需要发送email到的对象,一行一个
notification_email
{
acassen @firewall .loc
failover @firewall .loc
sysadmin @firewall .loc
}
#指定发件人
notification_email_from
Alexandre.Cassen @firewall .loc
#指定smtp服务器地址
#smtp_server 192.168 . 200.1
#指定smtp连接超时时间
#smtp_connect_timeout 30
#运行keepalived机器的一个标识
router_id
LVS_DEVEL
}
#主备配置
vrrp_instance
VI_1 {
#标示状态为MASTER
备份机为BACKUP
state
MASTER
#设置keepalived实例绑定的服务器网卡,一般为eth0,linux使用ifconfig命令可查看当前服务器网卡标识名
interface eth0
#同一实例下(即同一组主备机下)virtual_router_id必须相同
virtual_router_id 51
#MASTER权重要高于BACKUP,MASTER为 100 则BACKUP最大为 99
priority 100
#MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒,设置为 1 秒
advert_int 1
#设置认证
authentication
{
#主从服务器验证方式,PASS为明文密码验证
auth_type
PASS
#密码
auth_pass 1111
}
#设置虚拟IP,与我们的主备机在同一网段下,最后一位随便给就是拉,可以设置多个,换行即可
virtual_ipaddress
{
192.168 . 50.88
}
}
|
备机192.168.50.135的keepalived配置:
备机配置注意的地方:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致
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
|
!
Configuration File for keepalived
#这是全局配置
global_defs
{
#指定keepalived在发生切换时需要发送email到的对象,一行一个
notification_email
{
acassen @firewall .loc
failover @firewall .loc
sysadmin @firewall .loc
}
#指定发件人
notification_email_from
Alexandre.Cassen @firewall .loc
#指定smtp服务器地址
#smtp_server 192.168 . 200.1
#指定smtp连接超时时间
#smtp_connect_timeout 30
#运行keepalived机器的一个标识
router_id
LVS_DEVEL
}
#主备配置
vrrp_instance
VI_1 {
#备机为BACKUP
state
BACKUP
#备机网卡标识,一般都是eth0,先查询一下
interface eth0
#virtual_router_id必须与主机相同
virtual_router_id 51
#权重,备机必须比主机小
priority 99
#MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒,设置为 1 秒
advert_int 1
#认证,与主机一致
authentication
{
auth_type
PASS
auth_pass 1111
}
#虚拟IP,绑定的虚拟ip与主机一致
virtual_ipaddress
{
192.168 . 50.135
}
}
|
酱紫,keepalived就配置完成了。
keeplived启动关闭命令:
1
2
|
service
keepalived start
service
keepalived stop
|
启动两台nginx,启动主机keepalived,启动备机keepalived服务。
这时,nginx主机在提供服务,备机是闲着的,虚拟ip是192.168.50.88,在主机和备机上使用命令
1
|
ip
addr
|
可以发现:
主机:可以看到,192.168.50.133 带有虚拟ip192.168.50.88,在浏览器中输入192.168.50.88,即可访问到主nginx192.168.50.133.然后转发到tomcat服务器上
浏览器访问虚拟ip:192.168.50.88,效果如下
备机:ip addr命令执行:可以看到,备机nginx没有绑定虚拟ip
以上是初始状态下的情况,也是正常服务的情况。
现在测试高可用,假设主机nginx服务器挂了,模拟为关闭nginx主机或者将keepalived服务停止,那么主机上keepalived死了就没办法告诉备机自己活着,而备机超过1秒没有接收到主机给自己的消息,马上接管虚拟ip,同时在配置文件中配置切换主备机时发送邮件,此时开发团队收到邮件即知道主机挂了,马上去排除主机的故障。
将主机上的keepalived服务停止,service keepalived stop ,然后查看虚拟ip绑定情况,
主机挂了:可以看到虚拟ip就没有绑在主机上
备机情况:虚拟ip已经绑定到备机,此时主机虽然挂了,但是切换到备机上了(发现故障和切换的时间差最大也就是1秒),虚拟ip也绑到备机上了,访问虚拟ip,就会请求备机nginx然后转发到web服务器实现高可用。
运维人员收到邮件后就去排除主机故障了,搞定之后(模拟为keepalived服务启动),这时主机告诉备机,我又活了,于是备机将管理权又交给主机(切换为主机nginx提供服务):
主机keepalived服务启动后,即吧主机维护好之后:可以看到,虚拟ip又自动绑到了主机上
备机情况,主机活了之后,备机转交管理权,虚拟ip切换到主机上,备机不绑定虚拟ip,貌似启动keepalived服务之后并不能马上切回,应该是起服务需要点时间吧,但是不影响,这段时间还是备机绑定虚拟IP的
这就是keepalived高可用的模拟。
注意问题:
主机挂了之后,主机nginx恢复时,一定要将nginx也启动,否则即使虚拟ip切换到了主机上,但是主机nginx没起那也是没法转发的。所以要把nginx启动要加在开机启动中。