• KeepAlived 搭建高可用的HAProxy集群


    KeepAlived 搭建高可用的HAProxy集群

    1. KeepAlived 简介

      Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx、Haproxy等反向代理的负载均衡服务器配合实现web服务端的高可用。Keepalived以VRRP协议为实现基础,用VRRP协议来实现高可用性(HA).VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。

    2. KeepAlived 的安装

      #安装所需软件包
      yum install -y openssl openssl-devel
      #下载安装包
      wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
      #解压、编译、安装
      tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
      cd /usr/local/keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
      make && make install
      # 将keepalived安装成Linux系统服务,因为没有使用keepalived的默认安装路径(默认路径:/usr/local),安装完成之后,需要做一些修改工作
      #首先创建文件夹,将keepalived配置文件进行复制:
      mkdir /etc/keepalived
      cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
      #然后复制keepalived脚本文件:
      cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
      cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
      # 设置的过程中如果出现已经存在则删除原有的文件,重新创建
      ln -s -f /usr/local/sbin/keepalived /usr/sbin/
      ln -s -f /usr/local/keepalived/sbin/keepalived /sbin/
      #可以设置开机启动:chkconfig keepalived on,到此我们安装完毕!
      chkconfig keepalived on
      
    3. KeepAlived 的配置

      [root@nacos keepalived]# cat keepalived.conf
      ! Configuration File for keepalived
      global_defs {
         router_id other  ##标识节点的字符串,通常为本机hostname
      }
      vrrp_script chk_haproxy {
          script "/etc/keepalived/haproxy_check.sh"  ##执行脚本位置
          interval 2  ##检测时间间隔
          weight -20  ##如果条件成立则权重减20
      }
      vrrp_instance VI_1 {
          state BACKUP  ## 主节点为MASTER,备份节点为BACKUP-该配置非常重要
          interface ens192 ## 绑定虚拟IP的网络接口(网卡可以使用ifconfig查看)
          virtual_router_id 110  ## 虚拟路由ID号(主备节点一定要相同)-该配置非常重要
          mcast_src_ip 192.168.1.118 ## 本机ip地址
          priority 150  ##优先级配置(0-254的值),一般主节点的权重大于备份节点
          nopreempt
          advert_int 1  ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
      authentication {  ## 认证匹配
              auth_type PASS
              auth_pass dalianpai
          }
          track_script {
              chk_haproxy
          }
          virtual_ipaddress {
              192.168.1.199  ## 虚拟ip,可以指定多个,以后连接mq就使用该虚拟ip进行连接
          }
      }
      [root@nacos keepalived]#
      
      

    4.编写执行脚本(一定要赋权否则不能执行)

    [root@nacos keepalived]# cat haproxy_check.sh
    #!/bin/bash
    COUNT=`ps -C haproxy --no-header |wc -l`
    if [ $COUNT -eq 0 ];then
        /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
        sleep 2
        if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
            killall keepalived
        fi
    fi
    [root@nacos keepalived]#
    
    1. 启动

      [root@other keepalived]# chmod +x /etc/keepalived/haproxy_check.sh
      [root@other keepalived]# service keepalived start
      Starting keepalived (via systemctl):                       [  OK  ]
      [root@other keepalived]# ps -ef | grep haproxy
      nobody    2143     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2144     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2145     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2146     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2147     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2148     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2149     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2150     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2151     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2152     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2153     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2154     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2155     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2156     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2157     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2158     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2159     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2160     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2161     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      nobody    2162     1  0 Jul08 ?        00:00:02 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      root      3713  1754  0 02:45 pts/0    00:00:00 grep --color=auto haproxy
      [root@other keepalived]# ps -ef | grep keepalived
      root      3669     1  0 02:44 ?        00:00:00 keepalived -D
      root      3670  3669  0 02:44 ?        00:00:00 keepalived -D
      root      3671  3669  0 02:44 ?        00:00:00 keepalived -D
      root      3718  1754  0 02:45 pts/0    00:00:00 grep --color=auto keepalived
      [root@other keepalived]# ip a
      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: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          link/ether 00:50:56:b4:2f:fe brd ff:ff:ff:ff:ff:ff
          inet 192.168.1.121/24 brd 192.168.1.255 scope global noprefixroute ens192
             valid_lft forever preferred_lft forever
          inet 192.168.1.199/32 scope global ens192
             valid_lft forever preferred_lft forever
          inet6 fe80::c1bd:70bd:56f9:d8f5/64 scope link tentative noprefixroute dadfailed
             valid_lft forever preferred_lft forever
          inet6 fe80::2e50:2dd3:3d4d:2c2e/64 scope link tentative noprefixroute dadfailed
             valid_lft forever preferred_lft forever
          inet6 fe80::68b:4e0e:e486:8dd8/64 scope link tentative noprefixroute dadfailed
             valid_lft forever preferred_lft forever
      3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
          link/ether 02:42:2a:41:5e:74 brd ff:ff:ff:ff:ff:ff
          inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
             valid_lft forever preferred_lft forever
      [root@other keepalived]# service keepalived stop
      Stopping keepalived (via systemctl):                       [  OK  ]
      [root@other keepalived]# systemctl start keepalived
      [root@other keepalived]# systemctl status keepalived
      ● keepalived.service - SYSV: Start and stop Keepalived
         Loaded: loaded (/etc/rc.d/init.d/keepalived; bad; vendor preset: disabled)
         Active: active (running) since Thu 2020-07-09 02:54:17 EDT; 6s ago
           Docs: man:systemd-sysv-generator(8)
        Process: 3869 ExecStop=/etc/rc.d/init.d/keepalived stop (code=exited, status=0/SUCCESS)
        Process: 3888 ExecStart=/etc/rc.d/init.d/keepalived start (code=exited, status=0/SUCCESS)
       Main PID: 3895 (keepalived)
          Tasks: 3
         Memory: 904.0K
         CGroup: /system.slice/keepalived.service
                 ├─3895 keepalived -D
                 ├─3896 keepalived -D
                 └─3897 keepalived -D
      
      Jul 09 02:54:17 other Keepalived_vrrp[3897]: Opening file '/etc/keepalived/keepalived.conf'.
      Jul 09 02:54:17 other Keepalived_vrrp[3897]: Truncating auth_pass to 8 characters
      Jul 09 02:54:17 other Keepalived_vrrp[3897]: Configuration is using : 67374 Bytes
      Jul 09 02:54:17 other Keepalived_vrrp[3897]: Using LinkWatch kernel netlink reflector...
      Jul 09 02:54:17 other Keepalived_vrrp[3897]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
      Jul 09 02:54:17 other Keepalived_healthcheckers[3896]: Using LinkWatch kernel netlink reflector...
      Jul 09 02:54:17 other Keepalived_vrrp[3897]: VRRP_Script(chk_haproxy) succeeded
      Jul 09 02:54:18 other Keepalived_vrrp[3897]: VRRP_Instance(VI_1) Transition to MASTER STATE
      Jul 09 02:54:18 other Keepalived_vrrp[3897]: VRRP_Instance(VI_1) Received higher prio advert
      Jul 09 02:54:18 other Keepalived_vrrp[3897]: VRRP_Instance(VI_1) Entering BACKUP STATE
      [root@other keepalived]#
      
      

      停止主节点的keepalived查看我们的虚拟ip是否漂移到了从节点

  • 相关阅读:
    phalcon——HTTP 请求
    phalcon——闪存消息
    phalcon——验证
    Java 字符串分隔 split
    Eclipse "R cannot be resolved"问题
    Android CountDownTimer 类实现倒计时
    Eclipse 打开时“发现了以元素'd:skin'”开头的无效内容。此处不应含有子元素
    Android Studio 设置/更改 SDK 路径
    Android 开发使用自定义字体
    Android Studio "ADB not responding"
  • 原文地址:https://www.cnblogs.com/dalianpai/p/13273708.html
Copyright © 2020-2023  润新知