博客【dba 进阶教程共建投稿】负载均衡终极c7电子娱乐的解决方案
【dba 进阶教程共建投稿】负载均衡终极c7电子娱乐的解决方案-c7电子娱乐
一、背景介绍
在之前的公司算是第一批使用oceanbase的互联网公司了, 由于之前做过linux运维, 深入思考过企业入口的负载均衡问题, 通过nginx、keepalived、域名实现双活、多活,能彻底解决单点故障、负载不均衡、扩展性差等问题。之前疫情原因,当时业务有10倍增长,对大并发、横向扩展会比较关注。通过使用现有开源组件组合,来媲美商业负载均衡,最终可以免维护、甚至遗忘负载均衡和高可用的存在。
开源组件:
- obproxy(tcp、udp、http负载均衡换成nginx、haproxy)
- keepalived
- dns域名解析
- 三个vip地址
二、拓扑介绍
三、配置详情
- oceanbase、obproxy、安装省略
- 安装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
}
}
四、总结
- 域名解析三个vip a记录,利用dns rr轮询功能。
- 通过vip地址跳转,规避某个obproxy服务不可用。
- 三活节点,足够健壮。
- 横向扩容不受限。
- obproxy恢复后vip抢占回来,人工无需干预。
- 使用keepalived新增单播功能,来保活通信。
- 免运维。
- 开源免费。
- 不使用haproxy,减少反向代理层级。
点赞12
收藏