两个 haproxy 不抢占

  • 环境
    • haproxy 服务器
      • haproxy101: 10.1.1.101
      • haproxy102: 10.1.1.102
    • 虚拟地址
      • ip: 10.1.1.100
  • 在全部 haproxy 服务器上安装 keepalived

    1
    
    yum install keepalived
  • 在全部 haproxy 服务器上配置 haproxy 和 keepalived 自启动

    1
    2
    
    systemctl enable haproxy
    systemctl enable keepalived
  • MASTER/BACKUP 完整配置

     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
    
    global_defs {
        router_id haproxy101 #BACKUP 这里是 haproxy102
        script_user root
        enable_script_security
    }
    vrrp_script chk_haproxy {
        script "/usr/bin/systemctl status haproxy"
        interval 2
        weight 0
        fall 2
        rise 2
    }
    vrrp_instance VI_1 {
        state BACKUP #MASTER 和 BACKUP 这里都是 BACKUP
        virtual_router_id 1
        priority 150 #BACKUP 这里是 100
        advert_int 2
        nopreempt #BACKUP 优先级低,需注释此行
        interface eth0
        track_script {
            chk_haproxy
        }
        authentication {
            auth_type PASS
            auth_pass 1011100
        }
        virtual_ipaddress {
            10.1.1.100/24 dev eth0
        }
    }

两个 LVS-DR 调度器不抢占均衡后端 MySQL 和 Ceph 负载

  • 环境
    • keepalived 服务器
      • ka101: 10.1.1.101
      • ka102: 10.1.1.102
    • 虚拟地址
      • ip: 10.1.1.100
    • mysqld 服务器
      • mysql103: 10.1.1.103
      • mysql104: 10.1.1.104
      • mysql105: 10.1.1.105
    • ceph-radosgw 服务器
      • ceph106: 10.1.1.106
      • ceph107: 10.1.1.107
      • ceph108: 10.1.1.108
  • 在全部 keepalived 服务器上安装 keepalived

    1
    
    yum install keepalived
  • 在全部 keepalived 服务器上配置 keepalived 自启动

    1
    
    systemctl enable keepalived
  • MASTER/BACKUP 完整配置

    • 全局和实例配置

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      
      global_defs {
          router_id keepalive101 #BACKUP 配置 keepalive102
      }
      vrrp_instance V1_1 {
          state BACKUP #BACKUP 也配置 BACKUP
          interface eth0
          virtual_router_id 1
          priority 150 #BACKUP 配置 100
          advert_int 1
          nopreempt #BACKUP 优先级低,需注释此行
          authentication {
              auth_type PASS
              auth_pass 1011100
          }
          virtual_ipaddress {
              10.1.1.100/24 dev eth0
          }
      }
    • LVS 均衡 mysql galera cluser 负载

       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
      
      virtual_server 10.1.1.100 3306 {
          delay_loop 16
          lb_algo sh
          lb_kind DR
          protocol TCP
          real_server 10.1.1.103 3306 {
              weight 1
              TCP_CHECK {
                  connect_timeout 4
                  delay_before_retry 2
                  connect_port 3306
              }
          }
          real_server 10.1.1.104 3306 {
              weight 1
              TCP_CHECK {
                  connect_timeout 4
                  delay_before_retry 2
                  connect_port 3306
              }
          }
          real_server 10.1.1.105 3306 {
              weight 1
              TCP_CHECK {
                  connect_timeout 4
                  delay_before_retry 2
                  connect_port 3306
              }
          }
      }
    • LVS 均衡 ceph radosgw 负载

       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
      45
      
      virtual_server 10.1.1.100 7480 {
          delay_loop 16
          lb_algo sh
          lb_kind DR
          protocol TCP
          real_server 10.1.1.106 7480 {
              weight 1
              HTTP_GET {
                  url {
                      path /
                      status_code 200
                  }
                  connect_timeout 8
                  nb_get_retry 2
                  delay_before_retry 2
                  connect_port 7480
              }
          }
          real_server 10.1.1.107 7480 {
              weight 1
              HTTP_GET {
                  url {
                      path /
                      status_code 200
                  }
                  connect_timeout 8
                  nb_get_retry 2
                  delay_before_retry 2
                  connect_port 7480
              }
          }
          real_server 10.1.1.108 7480 {
              weight 1
              HTTP_GET {
                  url {
                      path /
                      status_code 200
                  }
                  connect_timeout 8
                  nb_get_retry 2
                  delay_before_retry 2
                  connect_port 7480
              }
          }
      }
  • 在全部 mysql 和 ceph-radosgw 服务器上配置虚拟 ip

    1
    2
    3
    4
    5
    6
    
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    ip addr add 10.1.1.100/32 brd 10.1.1.100 dev lo
    ip route add 10.1.1.100 dev lo

不抢占自动切换两台 Redis 主从状态

  • 环境
    • Redis 服务器
      • redis101: 10.1.1.101
      • redis102: 10.1.1.102
    • 虚拟地址
      • ip: 10.1.1.100
  • 在全部 redis 服务器上安装 keepalived

    1
    
    yum install keepalived
  • 在全部 redis 服务器上配置 redis 和 keepalived 自启动

    1
    2
    
    systemctl enable redis
    systemctl enable keepalived
  • MASTER/BACKUP 完整配置

     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
    
    global_defs {
        router_id redis101 #BACKUP 这里是 redis102
        script_user root
        enable_script_security
    }
    vrrp_script chk_redis {
        script "/usr/bin/systemctl status redis"
        interval 2
        weight 0
        fall 2
        rise 2
    }
    vrrp_instance VI_1 {
        state BACKUP #MASTER 和 BACKUP 这里都是 BACKUP
        virtual_router_id 51
        priority 150 #BACKUP 这里是 100
        advert_int 1
        nopreempt #BACKUP 优先级低,需注释此行
        interface eth0
        notify_master /etc/keepalived/scripts/master.sh
        notify_backup /etc/keepalived/scripts/backup.sh
        track_script {
            chk_redis
        }
        authentication {
            auth_type PASS
            auth_pass 123456
        }
        virtual_ipaddress {
            10.1.1.100/24 dev eth0
        }
    }
  • 在全部 redis 服务器上创建 /etc/keepalived/scripts/master.sh 脚本,内容如下

    1
    2
    3
    4
    
    #!/bin/bash
    #
    /usr/bin/sed -i '/^slaveof/d' /etc/redis.conf
    /usr/bin/systemctl restart redis
  • 在 redis101 上创建 /etc/keepalived/scripts/backup.sh 脚本,内容如下

    1
    2
    3
    4
    5
    
    #!/bin/bash
    #
    /usr/bin/sed -i '/^slaveof/d' /etc/redis.conf
    echo 'slaveof 10.1.1.102 6379' >> /etc/redis.conf
    /usr/bin/systemctl restart redis
  • 在 redis102 上创建 /etc/keepalived/scripts/backup.sh 脚本,内容如下

    1
    2
    3
    4
    5
    
    #!/bin/bash
    #
    /usr/bin/sed -i '/^slaveof/d' /etc/redis.conf
    echo 'slaveof 10.1.1.101 6379' >> /etc/redis.conf
    /usr/bin/systemctl restart redis
  • 在全部 redis 服务器上赋予脚本可执行权限

    1
    
    chmod 0755 /etc/keepalived/scripts/*.sh
  • 修改 redis 配置

    1
    2
    3
    4
    
    requirepass redis_password
    maxclients 1000
    maxmemory 4294967296
    maxmemory-policy volatile-lru
  • 在全部 redis 服务器上启动 redis 和 keepalived 服务

    1
    2
    
    systemctl start redis
    systemctl start keepalived