在安装keepalived之前,我们先做好相应的准备,条件如下:

准备两台服务器,并安装nginx和tomcat:

(lb01)10.0.0.5/172.16.1.5

(lb02)10.0.0.6/172.16.1.6

 

  • 配置并启动nginx和tomcat 
    nginx配置如下(lb01与lb02配置相同)
    [root@lb01 application]# vim /application/nginx/conf/nginx.conf
    http{
         .
         .
         .
         upstream default{
            server  172.16.1.5:8080;
            server  172.16.1.6:8080;
         }     
         
         server {
            listen      80;
            server_name localhost;
            location / {
              proxy_pass http://default;
            }  
        }
    }
    


    启动nginx和tomcat
    [root@lb01 /]# /application/nginx/sbin/nginx 
    [root@lb01 /]# /application/tomcat/bin/startup.sh
    [root@lb02 /]# /application/nginx/sbin/nginx 
    [root@lb02 /]# /application/tomcat/bin/startup.sh

     

  • 访问测试(或者在浏览器访问)

    [root@lb01 /]# curl 10.0.0.5
    [root@lb02 /]# curl 10.0.0.6


     

  • 安装keepalived服务(两个服务器都需要安装)

    [root@lb01 tools]# yum install keepalived -y
    [root@lb02 tools]# yum install keepalived -y

     

  • 编写配置文件 (/etc/keepalived/keepalived.conf)

    man keepalived.conf      ---查看配置文件说明信息
    配置文件结构:
           GLOBAL CONFIGURATION  --- 全局配置(*)
           VRRPD CONFIGURATION   --- vrrp配置(*)
           LVS CONFIGURATION     --- LVS服务相关配置

    配置文件说明:

    global_defs           # Block id
    {
       notification_email    # 邮件服务(这里我们删掉不用)
       {
           admin@example1.com
             ...
       }
       # From: from address that will be in header
       notification_email_from admin@example.com
       smtp_server 127.0.0.1        # IP
       smtp_connect_timeout 30      # integer, seconds
       vrrp_mcast_group4 224.0.0.18 # 可选配置, vrrp组(基于ipv4), default 224.0.0.18(不写也是默认)
       vrrp_mcast_group6 ff02::12   # 可选配置, vrrp组(基于ipv6), default ff02::12
       enable_traps                 # enable SNMP traps
    
       router_id my_hostname        # 自定义router_id,属于高可用集群中的唯一识别ID
    }
    
    vrrp_instance group01 {         #group1实例,主备名称保持一致
        state BACKUP                #定义实例中的状态描述(MASTER,BACKUP),仅仅是描述信息,并不具有实际效果
        interface eth0              #设置主备服务器虚拟ip地址放置网卡位置
        virtual_router_id 51        #group1实例ID标识,不同实例不同Id,主备相同
        priority 100                #优先级,值越大就是越优先 MASTER最大
        advert_int 1                #主备通讯时间间隔
    
        authentication {            #主备通过认证建立连接
            auth_type PASS
            auth_pass 1111
        }
    
        virtual_ipaddress {         #定义主备服务器之间使用的虚IP地址信息
            10.0.0.3/24 dev eth0 label eth0:1     #配置访问的虚拟IP,dev (设备),eth0(网卡),label eth0:1 (标签)
        }
    }
    


    lb01配置:

    global_defs {
       router_id lb01_lvs            ###不同之处
    }
    
    vrrp_instance group01 {
        state BACKUP                 ###不同之处
        interface eth0
        virtual_router_id 51
        priority 100                 ###不同之处
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.3/24 dev eth0 label eth0:1     ########填写的IP不可被其他设备占用,与Nginx监听地址相同
        }
    }
    


    lb02配置:

    global_defs {
       router_id lb01_lvs            ###不同之处
    }
    
    vrrp_instance group01 {
        state MASTER                 ###不同之处
        interface eth0
        virtual_router_id 51
        priority 150                 ###不同之处
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
         10.0.0.3/24 dev eth0 label eth0:1    ########填写的IP不可被其他设备占用,与Nginx监听地址相同
        }
    }

     

  • 重启Keepalived服务,并查看虚拟ip

    [root@lb01 /]# /etc/init.d/keepalived start
    Starting keepalived:                                       [  OK  ]
    [root@lb01 /]# /etc/init.d/keepalived status
    keepalived (pid  3166) is running...
    [root@lb01 /]# 
    [root@lb02 /]# /etc/init.d/keepalived start
    Starting keepalived:                                       [  OK  ]
    [root@lb02 /]# /etc/init.d/keepalived status
    keepalived (pid  3166) is running...
    [root@lb02 /]# 

    #/etc/init.d/keepalived reload                  ---平滑重启

    #查看虚拟IP生成情况
    lb01:只有主服务上才有虚拟ip

    [root@lb01 application]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:0C:29:93:A7:84  
              inet addr:10.0.0.5  Bcast:10.0.0.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe93:a784/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:15168 errors:0 dropped:0 overruns:0 frame:0
              TX packets:7530 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:15786408 (15.0 MiB)  TX bytes:812517 (793.4 KiB)
    
    eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:93:A7:84                 ####虚拟Ip
              inet addr:10.0.0.3  Bcast:0.0.0.0  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    
    eth1      Link encap:Ethernet  HWaddr 00:0C:29:93:A7:8E  
              inet addr:172.16.1.5  Bcast:172.16.1.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe93:a78e/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:149257 errors:0 dropped:0 overruns:0 frame:0
              TX packets:12240 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:214956814 (204.9 MiB)  TX bytes:1040177 (1015.7 KiB)
    
    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:65536  Metric:1
              RX packets:77 errors:0 dropped:0 overruns:0 frame:0
              TX packets:77 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:84530 (82.5 KiB)  TX bytes:84530 (82.5 KiB)


    lb02:

    [root@lb02 tools]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:0C:29:0D:3A:D6  
              inet addr:10.0.0.6  Bcast:10.0.0.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe0d:3ad6/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:15018 errors:0 dropped:0 overruns:0 frame:0
              TX packets:7232 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:15788051 (15.0 MiB)  TX bytes:733236 (716.0 KiB)
    
    eth1      Link encap:Ethernet  HWaddr 00:0C:29:0D:3A:E0  
              inet addr:172.16.1.6  Bcast:172.16.1.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe0d:3ae0/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:149316 errors:0 dropped:0 overruns:0 frame:0
              TX packets:13040 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:214999388 (205.0 MiB)  TX bytes:1097047 (1.0 MiB)
    
    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:65536  Metric:1
              RX packets:40 errors:0 dropped:0 overruns:0 frame:0
              TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:16504 (16.1 KiB)  TX bytes:16504 (16.1 KiB)

     

  • 测试高可用(直接访问虚拟IP)
    正常情况下:


    1.如果10.0.0.5宕机(关闭Keepalived或Nginx服务或直接关闭服务器):

    [root@lb01 application]# /etc/init.d/keepalived stop
    Stopping keepalived:                                       [  OK  ]
    [root@lb01 application]# 

    2.查看lb01的虚拟ip:(lb01中已经没有虚拟Ip:10.0.0.3)

    [root@lb01 application]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:0C:29:93:A7:84  
              inet addr:10.0.0.5  Bcast:10.0.0.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe93:a784/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:15896 errors:0 dropped:0 overruns:0 frame:0
              TX packets:9320 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:15852411 (15.1 MiB)  TX bytes:1029902 (1005.7 KiB)
    
    eth1      Link encap:Ethernet  HWaddr 00:0C:29:93:A7:8E  
              inet addr:172.16.1.5  Bcast:172.16.1.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe93:a78e/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:149324 errors:0 dropped:0 overruns:0 frame:0
              TX packets:12282 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:215028145 (205.0 MiB)  TX bytes:1044932 (1020.4 KiB)
    
    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:65536  Metric:1
              RX packets:117 errors:0 dropped:0 overruns:0 frame:0
              TX packets:117 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:101034 (98.6 KiB)  TX bytes:101034 (98.6 KiB)

    3.查看lb02的虚拟ip:(出现虚拟IP:10.0.0.3)

    [root@lb02 tools]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:0C:29:0D:3A:D6  
              inet addr:10.0.0.6  Bcast:10.0.0.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe0d:3ad6/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:16453 errors:0 dropped:0 overruns:0 frame:0
              TX packets:7697 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:15881978 (15.1 MiB)  TX bytes:901447 (880.3 KiB)
    
    eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:0D:3A:D6  
              inet addr:10.0.0.3  Bcast:0.0.0.0  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    
    eth1      Link encap:Ethernet  HWaddr 00:0C:29:0D:3A:E0  
              inet addr:172.16.1.6  Bcast:172.16.1.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe0d:3ae0/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:149436 errors:0 dropped:0 overruns:0 frame:0
              TX packets:13145 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:215096735 (205.1 MiB)  TX bytes:1172566 (1.1 MiB)
    
    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:65536  Metric:1
              RX packets:88 errors:0 dropped:0 overruns:0 frame:0
              TX packets:88 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:66156 (64.6 KiB)  TX bytes:66156 (64.6 KiB)


    访问10.0.0.3:同样可以正常访问

     

这里keepalived的特点一下子就体现出来了,在高可用集群中或在高并发、高性能集群中,我们必须保证服务的灵活性,业务的可用性,因此很多服务需要替补,以防万一。当然,在本章博客中虚拟Ip:10.0.0.3需要注意一下,不要与其他已占用的ip冲突。 

最后修改于 2020-01-06 11:24:40
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇