centos7安装keepalived和双活主机配置

  1. yum安装

    yum install -y keepalived
    

    配置文件位置 /etc/keepalived/keepalived.conf
    这总方式安装的keepalived版本比较旧,centos7里面默认是1.3.5,是2017年的版本。

    需要新的版本可以考虑编译安装
    查看yum安装默认的版本

    [root@vm200 ~]# yum info keepalived
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.jlu.edu.cn
     * extras: mirrors.jlu.edu.cn
     * updates: mirrors.jlu.edu.cn
    Available Packages
    Name        : keepalived
    Arch        : x86_64
    Version     : 1.3.5
    Release     : 19.el7
    Size        : 332 k
    Repo        : base/7/x86_64
    Summary     : Load balancer and high availability service
    URL         : http://www.keepalived.org/
    License     : GPLv2+
    Description : Keepalived provides simple and robust facilities for load balancing
                : and high availability.  The load balancing framework relies on the
                : well-known and widely used Linux Virtual Server (IPVS) kernel module
                : providing layer-4 (transport layer) load balancing.  Keepalived
                : implements a set of checkers to dynamically and adaptively maintain
                : and manage a load balanced server pool according their health.
                : Keepalived also implements the Virtual Router Redundancy Protocol
                : (VRRPv2) to achieve high availability with director failover.
    
  2. 编译安装

    • 安装依赖

      yum -y install make gcc openssl-devel libnfnetlink-devel libnl3-devel net-snmp-devel
      
    • 下载离线包
      https://www.keepalived.org/software/keepalived-2.2.8.tar.gz

    • 解压
      tar -zxvf keepalived-2.2.8.tar.gz

    • 配置

      #打开keepalived目录
      cd  keepalived-2.2.8
      
      #配置,使用默认安装路径,如果要制定安装路径 ./configure --prefix=/usr/local/keepalived
      #默认安装是安装在当前目录下面的 keepalived目录下面的
      ./configure
      
      
    • 编译安装

      make && make install
      
    • 复制文件

      #复制可执行文件
      cp keepalived/etc/init.d/keepalived /etc/init.d
      
      #复制配置,里面指定启动的配置文件
      # KEEPALIVED_OPTIONS="-D"  -f指定配置文件,默认是 /etc/keepalived/keepalived
      #KEEPALIVED_OPTIONS="-f /etc/keepalived/keepalived.conf.sample -D -d -S 0"
      cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
      
    • 日志文件位置 /var/log/messages

    • 配置文件位置 /etc/keepalived/keepalived

      ! Configuration File for keepalived
      
      global_defs {
         notification_email {
           acassen@firewall.loc
           failover@firewall.loc
           sysadmin@firewall.loc
         }
         notification_email_from Alexandre.Cassen@firewall.loc
         smtp_server 192.168.200.1
         smtp_connect_timeout 30
         router_id vm200            #一般写主机名
      }
      
      vrrp_instance VI_101.250 {
          state MASTER               #备机写BACKIP
          interface ens33            #网卡名字
          virtual_router_id 166      #备机和主机的虚拟路由ID要一样
          priority 100               #优先级备机应该比主低
          advert_int 1			   #发送arp包间隔
          authentication {
              auth_type PASS        #授权账号密码主备相同
              auth_pass 123456
          }
          virtual_ipaddress {
              192.168.101.250       #指定VIP,可以指定多个,一个一行,可以指定当前能访问的通的任意子网IP
          }
      }
      
    • 启动服务

      systemctl start keepalived
      
    • 实测 通过 VIP(192.168.101.250)可以访问到 vm200,如果vm200的keepalived停了以后,VIP会飘向vm202。
      用ifconfig查不到虚拟IP
      需要使用 ip addr 才行

      [root@vm200 ~]# ip addr
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host
             valid_lft forever preferred_lft forever
      2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
          link/ether 00:0c:29:c0:31:ff brd ff:ff:ff:ff:ff:ff
          inet 192.168.100.200/16 brd 192.168.255.255 scope global noprefixroute ens33
             valid_lft forever preferred_lft forever
          inet 192.168.101.250/32 scope global ens33
             valid_lft forever preferred_lft forever
          inet6 fe80::f33f:4ccc:7ab4:1a9c/64 scope link noprefixroute
             valid_lft forever preferred_lft forever
          inet6 fe80::a1cd:819c:9969:7130/64 scope link tentative noprefixroute dadfailed
             valid_lft forever preferred_lft forever
      
  3. VIP 虚拟IP

  4. VRRP 虚拟路由冗余协议

  5. kill -9 VIP 可能不回收问题

    keepalived的 被kill -9 的时候可能会VIP没有回收,据说pkill keepalived 可以避免

  6. 抢占式和非抢占式

    keepalived默认的工作模式是抢占式的,主节点上线以后优先级比较高,会强制抢占主,可以设置为非抢占模式。

    使用非抢占式配置

    • 所有节点指定nopreempt(最低优先级的可以不指定)
    • 所有节点都state都要写成BACKUP
    vrrp_instance VI_1 {
        state MASTER               #备机写BACKIP
        interface ens33            #网卡名字
        virtual_router_id 166      #备机和主机的虚拟路由ID要一样
        priority 100               #优先级备机应该比主低
        advert_int 1			   #发送arp包间隔
    	nopreempt                  #非抢占模式
    	#preempt_delay 300          #抢占间隔
        authentication {
            auth_type PASS        #授权账号密码主备相同
            auth_pass 123456
        }
        virtual_ipaddress {
            192.168.100.250       #指定VIP,可以指定多个,一个一行
        }
    }
    
  7. keepalived双活主机

    双主单活的情况下两台服务器只有一个VIP,同时只有一台对外可见。
    我们可以通2个VIP互为主备,来实现双主双活。

    DNS上把两个VIP都配置上。
    双活必须要是抢占式,如果不是抢占式,那么第一台起来的服务器会获取所有VIP。

    VIP1:192.168.101.250
    VIP2:192.168.101.251

    主机配置

    vrrp_instance VI_101.250 {
        state MASTER               #非抢占模式都是BACKUP
        interface ens33            #网卡名字
        virtual_router_id 166      #备机和主机的虚拟路由ID要一样
        priority 100               #优先级备机应该比主低
        advert_int 1			   #发送arp包间隔
        authentication {
            auth_type PASS        #授权账号密码主备相同
            auth_pass 123456
        }
        virtual_ipaddress {
            192.168.101.250       #指定VIP,可以指定多个,一个一行,可以指定当前能访问的通的任意子网IP
        }
    }
    
    
    vrrp_instance VI_101.251 {
        state BACKUP               #非抢占模式都是BACKUP
        interface ens33            #网卡名字
        virtual_router_id 167      #备机和主机的虚拟路由ID要一样
        priority 80               #优先级备机应该比主低
        advert_int 1			   #发送arp包间隔
        authentication {
            auth_type PASS        #授权账号密码主备相同
            auth_pass 123456
        }
        virtual_ipaddress {
            192.168.101.251       #指定VIP,可以指定多个,一个一行,可以指定当前能访问的通的任意子网IP
        }
    }
    	
    

    主机B配置

    vrrp_instance VI_101.250 {
        state BACKUP               #非抢占模式都是BACKUP
        interface ens33            #网卡名字
        virtual_router_id 166      #备机和主机的虚拟路由ID要一样
        priority 80               #优先级备机应该比主低
        advert_int 1			   #发送arp包间隔
        authentication {
            auth_type PASS        #授权账号密码主备相同
            auth_pass 123456
        }
        virtual_ipaddress {
            192.168.101.250       #指定VIP,可以指定多个,一个一行,可以指定当前能访问的通的任意子网IP
        }
    }
    
    
    vrrp_instance VI_101.251 {
        state MASTER               #非抢占模式都是BACKUP
        interface ens33            #网卡名字
        virtual_router_id 167      #备机和主机的虚拟路由ID要一样
        priority 100               #优先级备机应该比主低
        advert_int 1			   #发送arp包间隔
        authentication {
            auth_type PASS        #授权账号密码主备相同
            auth_pass 123456
        }
        virtual_ipaddress {
            192.168.101.251       #指定VIP,可以指定多个,一个一行,可以指定当前能访问的通的任意子网IP
        }
    }
    	
    
  8. LVS 也可以解决类似nginx这种不支持高可用的软件的单点故障问题

  9. 默认配置文件里面 virtual_server 部分是设置 虚拟主机和 真实主机映射的,效果类似LVS(一个IP对应多台真实服务器器)。如果是为了用keepalived给别的程序保活,那么可以把virtual_server相关的都删掉。

  10. keepalived用在哪些场景

    • keepalived可以给任意软件做保活处理。通过检查脚本查查程序是否活着,如果死了可以直接在脚本中启动指定程序。
    • keepalive+VIP 可以解决那些原生不支持高可用,但是又需要高可用的情况,比如nginx

posted on 2024-02-04 20:52  zhangyukun  阅读(289)  评论(0编辑  收藏  举报

导航