keepalived高可用

来源:互联网 发布:淘宝网小众女鞋店 编辑:程序博客网 时间:2024/06/04 18:14

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启动要加在开机启动中。

原创粉丝点击