Linux系统高可用集群软件之Keepalived

     Keepalived 集群软件是一个基于VRRP协议来实现的LVS(四层协议)服务高可用方案,可以利用避免单节点故障.LVS服务需要有2台服务器运行Keepalived服务,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外只有一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,备份服务器认为主服务器宕机并会接管虚拟IP提供服务,从而保证了服务的高可用性.

 

1.环境说明

系统:Centos 6.5 64位

软件:Keepalived ipvsadm

服务:apache

网络:

node1:192.168.1.100 

node2:192.168.1.102  

vip:192.168.1.105

 

2.配置本地时间和网络

(1)两台服务器时间必须一至

[root@node2 ~]# date                       --节点2的时间
Thu Nov 13 15:11:09 CST 2014
[root@node2 ~]#

[root@node1 ~]# date                       --节点1的时间
Thu Nov 13 15:11:13 CST 2014
[root@node1 ~]#

 

(2)配置本地网络

node1节点:

[root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
HWADDR=08:00:27:EE:3D:F6
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

[root@node1 ~]# vim /etc/hosts                 --两台服务器相互解析

192.168.1.100 node1
192.168.1.102 node2

[root@node1 ~]#

 

node2节点:

[root@node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
HWADDR=08:00:27:A5:94:4C
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.102
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

[root@node2 ~]# vim /etc/hosts

192.168.1.100 node1
192.168.1.102 node2

[root@node2 ~]#

 

3.安装所需要的软件包,配置httpd服务

node1节点:

[root@node1 ~]# yum install httpd keepalived ipvsadm -y          --安装所需的软件

[root@node1 ~]# vim /etc/httpd/conf/httpd.conf

ServerName 127.0.0.1

[root@node1 ~]# echo "node1" > /var/www/html/index.html           --定义web首页

[root@node1 ~]# /etc/init.d/httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd:                                            [  OK  ]

[root@node1 ~]# chkconfig httpd on                    --重启web服务

[root@node1 ~]#

 

node2节点:

[root@node2 ~]# yum install httpd keepalived ipvsadm -y

[root@node2 ~]# vim /etc/httpd/conf/httpd.conf

ServerName 127.0.0.1

[root@node2 ~]# echo "node2" > /var/www/html/index.html

[root@node2 ~]# /etc/init.d/httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd:                                            [  OK  ]

[root@node2 ~]# chkconfig httpd on

 

4.配置keepalived集群服务

node1节点:

[root@node1 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node1 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node1 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node1 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@node1 ~]# ifconfig eth0:1 192.168.1.105 broadcast 192.168.1.105 netmask 255.255.255.255 up
[root@node1 ~]# route add -host 192.168.1.105 dev eth0:1

[root@node1 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:EE:3D:F6 
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:feee:3df6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1600615 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1574022 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:106099219 (101.1 MiB)  TX bytes:102403193 (97.6 MiB)

eth0:1    Link encap:Ethernet  HWaddr 08:00:27:EE:3D:F6 
          inet addr:192.168.1.105  Bcast:192.168.1.105  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:5087 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5087 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:403339 (393.8 KiB)  TX bytes:403339 (393.8 KiB)

[root@node1 ~]# route  -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.105   0.0.0.0         255.255.255.255 UH    0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

[root@node1 ~]# cd /etc/keepalived/
[root@node1 keepalived]# vim keepalived.conf          --配置keepalived文件


! Configuration File for keepalived

global_defs {
   notification_email {
    
[email protected]            --宕机后邮件报警
   }
   notification_email_from root       --从哪个用户发出
   smtp_server localhost                --邮件服务器
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER                   --主节点
    interface eth1                     --监听的网卡
    virtual_router_id 51            --虚拟路由ID号
    priority 100                         --配置优先级
    advert_int 1
    authentication {
        auth_type PASS         --认证类型
        auth_pass keep          --认证密码
    }
    virtual_ipaddress {

        192.168.1.105           --虚拟IP地址
    }
}

virtual_server 192.168.1.105 80 {        --虚拟IP和端口设置
    delay_loop 6
    lb_algo rr       
    lb_kind DR
    nat_mask 255.255.255.0
    protocol TCP

    real_server 192.168.1.100 80 {        --主服务器的IP和端口
        weight 1                   --权重
        HTTP_GET {           --启用HTTP服务
            url {
              path /
              status_code 200          --监控状态码为200,如果返回不是200表示宕机
            }
            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3
         }
    }
    real_server 192.168.1.102 80 {              --从服务器的IP和端口
         weight 1                        --权重
         HTTP_GET {
             url {
               path /
               status_code 200
             }
             connect_timeout 3
             nb_get_retry 3
             delay_before_retry 3
         }
     }

}
[root@node2 keepalived]#  

 

node2节点:

[root@node2 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node2 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@node2 ~]# ifconfig eth0:1 192.168.1.105 broadcast 192.168.1.105 netmask 255.255.255.255 up
[root@node2 ~]# route add -host 192.168.1.105 dev eth0:1

[root@node2 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:A5:94:4C 
          inet addr:192.168.1.102  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fea5:944c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1601817 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1574326 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:104324952 (99.4 MiB)  TX bytes:104338539 (99.5 MiB)

eth0:1    Link encap:Ethernet  HWaddr 08:00:27:A5:94:4C 
          inet addr:192.168.1.105  Bcast:192.168.1.105  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:6824 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6824 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2407997 (2.2 MiB)  TX bytes:2407997 (2.2 MiB)

[root@node2 ~]# cd /etc/keepalived/
[root@node2 keepalived]# vim keepalived.conf


! Configuration File for keepalived

global_defs {
   notification_email {
    
[email protected]
   }
   notification_email_from root
   smtp_server localhost
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP                --备用节点
    interface eth1
    virtual_router_id 51
    priority 101                  
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keep
    }
    virtual_ipaddress {

        192.168.1.105
    }
}

virtual_server 192.168.1.105 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    protocol TCP

    real_server 192.168.1.100 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3
         }
    }
   real_server 192.168.1.102 80 {
         weight 1
         HTTP_GET {
             url {
               path /
               status_code 200
             }
             connect_timeout 3
             nb_get_retry 3
             delay_before_retry 3
         }
     }

}
[root@node2 keepalived]#  

 

5.启动keepalived服务和ipvsadm的状态

node1和node2启动服务:

[root@node1 keepalived]# /etc/init.d/keepalived restart
Stopping keepalived:                                       [  OK  ]
Starting keepalived:                                       [  OK  ]
[root@node1 keepalived]#

[root@node2 ~]# /etc/init.d/keepalived restart
Stopping keepalived:                                       [  OK  ]
Starting keepalived:                                       [  OK  ]
[root@node2 ~]#

[root@node1 keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.105:80 rr
  -> 192.168.1.100:80             Local   1      0          0        
  -> 192.168.1.102:80             Route   1      0          0        
[root@node1 keepalived]#


6.测试是否正常

                    

 

 

 

本文出自 “一起走过的日子” 博客,请务必保留此出处http://tongcheng.blog.51cto.com/6214144/1576111

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。