12
博客【dba 进阶教程共建投稿】负载均衡终极c7电子娱乐的解决方案

【dba 进阶教程共建投稿】负载均衡终极c7电子娱乐的解决方案-c7电子娱乐

一、背景介绍

   在之前的公司算是第一批使用oceanbase的互联网公司了, 由于之前做过linux运维, 深入思考过企业入口的负载均衡问题, 通过nginx、keepalived、域名实现双活、多活,能彻底解决单点故障负载不均衡扩展性差等问题。之前疫情原因,当时业务有10倍增长,对大并发、横向扩展会比较关注。通过使用现有开源组件组合,来媲美商业负载均衡,最终可以免维护、甚至遗忘负载均衡和高可用的存在。

   开源组件:

      • obproxy(tcp、udp、http负载均衡换成nginx、haproxy)
      • keepalived
      • dns域名解析
      • 三个vip地址

二、拓扑介绍

1736230356

三、配置详情

  1. oceanbase、obproxy、安装省略
  2. 安装keepalived
    yum install keepalived   # centos
    apt install keepalived   # ubuntu

3. 主机10.1.1.1配置文件

  • /etc/keepalived/checkobproxy.sh
#!/bin/bash
if [ `ps -c obproxy --no-header |wc -l` -eq 0 ]; then
   sleep 1
   if [ $(ps -c obproxy --no-header | wc -l) -eq 0 ]; then
       exit 1
   fi
fi
  • /etc/keepalived/keepalived.conf
# configuration file for keepalived
global_defs {
   notification_email {
     willian@xx.com
   }
   router_id lvs_devel
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   script_user root
   enable_script_security
}
vrrp_script check_obproxy {
    script "/etc/keepalived/checkobproxy.sh"
    interval 2
    weight -50
}
vrrp_instance vi_1 {
    # nopreempt
    state backup
    interface bond1
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type pass
        auth_pass wukong
    }
    unicast_src_ip 10.1.1.1
    unicast_peer {
        10.1.1.2
        10.1.1.3
    }
    virtual_ipaddress {
        10.1.1.241/24
    }
    track_script {
        check_obproxy
    }
}
vrrp_instance vi_2 {
    state backup
    interface bond1
    virtual_router_id 2
    priority 60
    advert_int 1
    authentication {
        auth_type pass
        auth_pass wukong
    }
    unicast_src_ip 10.1.1.1
    unicast_peer {
        10.1.1.2
        10.1.1.3
    }
    virtual_ipaddress {
        10.1.1.242/24
    }
    track_script {
        check_obproxy
    }
}
vrrp_instance vi_3 {
    state backup
    interface bond1
    virtual_router_id 3
    priority 80
    advert_int 1
    authentication {
        auth_type pass
        auth_pass wukong
    }
    unicast_src_ip 10.1.1.1
    unicast_peer {
        10.1.1.2
        10.1.1.3
    }
    virtual_ipaddress {
        10.1.1.243/24
    }
    track_script {
        check_obproxy
    }
}

4. 主机10.1.1.2配置文件

  • /etc/keepalived/checkobproxy.sh
#!/bin/bash
if [ `ps -c obproxy --no-header |wc -l` -eq 0 ]; then
   sleep 1
   if [ $(ps -c obproxy --no-header | wc -l) -eq 0 ]; then
       exit 1
   fi
fi
  • /etc/keepalived/keepalived.conf
# configuration file for keepalived
global_defs {
   notification_email {
     willian@xx.com
   }
   router_id lvs_devel
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   script_user root
   enable_script_security
}
vrrp_script check_obproxy {
    script "/etc/keepalived/checkobproxy.sh"
    interval 2
    weight -50
}
vrrp_instance vi_1 {
    state backup
    interface bond1
    virtual_router_id 1
    priority 80
    advert_int 1
    authentication {
        auth_type pass
        auth_pass wukong
    }
    unicast_src_ip 10.1.1.2
    unicast_peer {
        10.1.1.1
        10.1.1.3
    }
    virtual_ipaddress {
        10.1.1.241/24
    }
    track_script {
        check_obproxy
    }
}
vrrp_instance vi_2 {
    # nopreempt
    state backup
    interface bond1
    virtual_router_id 2
    priority 100
    advert_int 1
    authentication {
        auth_type pass
        auth_pass wukong
    }
    unicast_src_ip 10.1.1.2
    unicast_peer {
        10.1.1.1
        10.1.1.3
    }
    virtual_ipaddress {
        10.1.1.242/24
    }
    track_script {
        check_obproxy
    }
}
vrrp_instance vi_3 {
    state backup
    interface bond1
    virtual_router_id 3
    priority 60
    advert_int 1
    authentication {
        auth_type pass
        auth_pass wukong
    }
    unicast_src_ip 10.1.1.2
    unicast_peer {
        10.1.1.1
        10.1.1.3
    }
    virtual_ipaddress {
        10.1.1.243/24
    }
    track_script {
        check_obproxy
    }
}

5. 主机10.1.1.3配置文件

  • /etc/keepalived/checkobproxy.sh
#!/bin/bash
if [ `ps -c obproxy --no-header |wc -l` -eq 0 ]; then
   sleep 1
   if [ $(ps -c obproxy --no-header | wc -l) -eq 0 ]; then
       exit 1
   fi
fi
  • /etc/keepalived/keepalived.conf
# configuration file for keepalived
global_defs {
   notification_email {
     willian@xx.com
   }
   router_id lvs_devel
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   script_user root
   enable_script_security
}
vrrp_script check_obproxy {
    script "/etc/keepalived/checkobproxy.sh"
    interval 2
    weight -50
}
vrrp_instance vi_1 {
    state backup
    interface bond1
    virtual_router_id 1
    priority 60
    advert_int 1
    authentication {
        auth_type pass
        auth_pass wukong
    }
    unicast_src_ip 10.1.1.3
    unicast_peer {
        10.1.1.1
        10.1.1.2
    }
    virtual_ipaddress {
        10.1.1.241/24
    }
    track_script {
        check_obproxy
    }
}
vrrp_instance vi_2 {
    state backup
    interface bond1
    virtual_router_id 2
    priority 80
    advert_int 1
    authentication {
        auth_type pass
        auth_pass wukong
    }
    unicast_src_ip 10.1.1.3
    unicast_peer {
        10.1.1.1
        10.1.1.2
    }
    virtual_ipaddress {
        10.1.1.242/24
    }
    track_script {
        check_obproxy
    }
}
vrrp_instance vi_3 {
    # nopreempt
    state backup
    interface bond1
    virtual_router_id 3
    priority 100
    advert_int 1
    authentication {
        auth_type pass
        auth_pass wukong
    }
    unicast_src_ip 10.1.1.3
    unicast_peer {
        10.1.1.1
        10.1.1.2
    }
    virtual_ipaddress {
        10.1.1.243/24
    }
    track_script {
        check_obproxy
    }
}

四、总结

  1. 域名解析三个vip a记录,利用dns rr轮询功能。
  2. 通过vip地址跳转,规避某个obproxy服务不可用。
  3. 三活节点,足够健壮。
  4. 横向扩容不受限。
  5. obproxy恢复后vip抢占回来,人工无需干预。
  6. 使用keepalived新增单播功能,来保活通信。
  7. 免运维。
  8. 开源免费。
  9. 不使用haproxy,减少反向代理层级。


点赞12
收藏

声明

本网站下的“博客”等板块为技术爱好者提供分享、交流的平台。发布者发布的任何内容、信息等,并不反映或代表本网站的观点、立场或政策。本网站不对其任何内容和信息的错误以及由此产生的损失或损坏承担任何责任。

尊重知识产权是本网站的基本原则之一,如您在使用本网站过程中发现本网站中存在侵犯您或其他第三人合法知识产权的情况,请您即可将侵权材料及初步证据提交至下述邮箱:obcompliance@oceanbase.com 。本网站将在收到材料后尽快进行审核及处理。

凡有所相,皆是虚妄。

已发布 1 篇博文

网站地图