一、前言
关于StarRocks的负载均衡以及高可用,官方给了2种方法:
1、通过 JDBC Connector 均衡负载
2、通过 ProxySQL 均衡负载
参考官方文档:StarRocks负载均衡配置
当前文档选择常用架构 Keepalived+Haproxy服务
架构方案:
机器 | 节点 | 服务 |
---|---|---|
192.168.1.101 | master | StarRocks Keepalived Haproxy |
192.168.1.102 | follow | StarRocks Keepalived Haproxy |
192.168.1.103 | follow | StarRocks |
Keepalived 虚拟ip : 192.168.1.100
二、安装 Haproxy
192.168.1.101、192.168.1.102
以上2台机器分别进行以下操作
1. 下载 HAProxy
下载地址:https://src.fedoraproject.org/repo/pkgs/haproxy/
2、解压
tar -zxvf haproxy-2.6.6.tar.gz -C /opt/
mv haproxy-2.6.6 haproxy
3、编译
yum install gcc gcc-c++ -y
make TARGET=linux-glibc PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
4、配置文件
vim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
local0.* /usr/local/haproxy/logs/haproxy.log
&~
5、 开启远程日志
vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-c 2 -r -m 0"
参数解析:
-c 2 使用兼容模式,默认是 -c 5。 -r 开启远程日志。
-m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能。
6、使修改生效
systemctl restart rsyslog
7、编辑负载均衡文件
vim /usr/local/haproxy/haproxy.cfg
#
# demo config for Proxy mode
#
global
maxconn 2000
ulimit-n 40075
log 127.0.0.1 local0 info
uid 200
gid 200
chroot /var/empty
daemon
group haproxy
user haproxy
defaults
# 应用全局的日志配置
log global
mode http
retries 3 #健康检查。3次连接失败就认为服务器不可用,主要通过后面的check检查
option redispatch #服务不可用后重定向到其他健康服务器
# 超时配置
timeout connect 5000
timeout client 5000
timeout server 5000
timeout check 2000
frontend mysql-front
bind *:3307 # 这里绑定的端口就是后面使用 VIP 访问 mysql 时使用的端口
mode tcp
default_backend mysql-backup
backend mysql-backup
mode tcp
balance roundrobin
server db1 192.168.1.101:9030 weight 1 check inter 3000 rise 2 fall 3
server db2 192.168.1.102:9030 weight 1 check inter 3000 rise 2 fall 3
server db3 192.168.1.103:9030 weight 1 check inter 3000 rise 2 fall 3
listen http_front # haproxy的客户页面
bind *:8888 # HAProxy自己的IP地址
mode http
log 127.0.0.1 local0 err
option httplog
stats uri /haproxy # 自定义页面的 url(即访问时地址为:192.168.1.101:8888/haproxy)
stats auth admin:admin # 控制面板账号密码 账号:admin
stats refresh 10s
stats enable
8、启动服务
/opt/haproxy/haproxy -f /usr/local/haproxy/haproxy.cfg
9、查看服务状态
netstat -lnatp | grep -i haproxy
10、web访问
192.168.1.101:8888/haproxy
192.168.1.102:8888/haproxy
登陆密码:admin : admin
11、测试端口是否转换成功
mysql -u root -p -P3307 -h 192.168.1.101
三、安装 mailx
1、安装
yum -y install mailx
2、配置
vim /etc/mail.rc
需要将邮箱的相关参数配置进mailx的配置文件/etc/mail.rc,在最后添加自己邮箱的相关参数,以下是关于outlook的使用参数
set from=xxx@xxx.com
set smtp=outlook.office365.com:587
set smtp-use-starttls=yes #如果用25端口不需要此条,但是很多云服务器ban25端口
set ssl-verify=ignore #ssl验证:忽略
set nss-config-dir=/etc/pki/nssdb # 不需要配置,指向目录即可
set smtp-auth-user=xxx@xxx.com
set smtp-auth-password=xxxxxxxxx
set smtp-auth=login
3、测试
echo hello | mailx -v -s "test" xxx@x.com
四、安装 Keepalived
192.168.1.101、192.168.1.102
以上2台机器分别进行以下操作
1、安装
yum -y install keepalived
2、自定义检查脚本
vim /etc/keepalived/check_server.sh
StarRocksFE 和 Haproxy 发生错误都停止 Keepalived ,实现vip漂移
#!/bin/bash
StarRocksNUM=`ps -ef | grep -i StarRocksFE | grep -vc grep`
if [ $StarRocksNUM -eq 0 ]; then
systemctl stop keepalived.service
fi
HAPROXYNUM=`ps -ef | grep -i haproxy | grep -vc grep`
if [ $HAPROXYNUM -eq 0 ]; then
systemctl stop keepalived.service
fi
3、配置文件修改
修改 Keepalived 配置文件,将原本的 keepalived.conf 文件备份,新建 keepalived.conf 文件加入如下内容
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
master节点:
! Configuration File for keepalived # 这一行为注释
global_defs {
router_id hadoop101 # 机器标识,通常使用 hostname,相对具有唯一性,和备机区分开,不能使用同一个标识
notification_email {
x@x.com
}
notification_email_from xxx@x.com
smtp_server outlook.office365.com
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_server { # 定义一个检测脚本,在global_defs之外配置
script "/etc/keepalived/check_server.sh" # 自己写的监测脚本
interval 2 # 每2s监测一次
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_instance VI_1 {
state MASTER # 标示状态为MASTER
interface em1 # 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同
virtual_router_id 220 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
priority 150 # 节点优先级,值范围 0-254,MASTER 要比 BACKUP 高
advert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒
nopreempt # 主设备(priority 值大的)配置一定要加上 nopreempt,否则非抢占也不起作用
mcast_src_ip 192.168.1.101 # Master服务器IP
authentication {
auth_type PASS # 主从服务器验证方式 , 主要有 PASS 和 AH 两种
auth_pass 20221103
}
virtual_ipaddress {
192.168.1.100 # 虚拟 IP 池, 两个节点设置必须一样
}
track_script { # 调用自定义的脚本
chk_server
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
backup节点:
! Configuration File for keepalived # 这一行为注释
global_defs {
router_id hadoop102 # 机器标识,通常使用 hostname,相对具有唯一性,和备机区分开,不能使用同一个标识
notification_email {
x@x.com
}
notification_email_from xxx@x.com
smtp_server outlook.office365.com
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_server { # 定义一个检测脚本,在global_defs之外配置
script "/etc/keepalived/check_server.sh" # 自己写的监测脚本
interval 2 # 每2s监测一次
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_instance VI_1 {
state BECKUP # 标示状态为BECKUP
interface em1 # 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同
virtual_router_id 220 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
priority 100 # 节点优先级,值范围 0-254,MASTER 要比 BACKUP 高
advert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒
mcast_src_ip 192.168.1.102 # BECKUP服务器IP
authentication {
auth_type PASS # 主从服务器验证方式 , 主要有 PASS 和 AH 两种
auth_pass 20221103
}
virtual_ipaddress {
192.168.1.100 # 虚拟 IP 池, 两个节点设置必须一样
}
track_script { # 调用自定义的脚本
chk_server
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
4、启动
systemctl start keepalived.service
systemctl enable keepalived
5、查看服务
systemctl status keepalived.service
五、测试
1、测试端口是否转换成功
mysql -u root -p -P3307 -h 192.168.1.100
连接StarRocks 成功后
192.168.1.101 机器:
ps -ef|grep haproxy
kill -9 haproxy服务
查看邮箱邮件:
2、连接StarRocks 成功后
vip漂移后,查看StarRocks 连接
mysql -u root -p -P3307 -h 192.168.1.100