• 大数据——StarRocks 实现高可用连接以及负载均衡(Keepalived+Haproxy服务高可用,outlook邮箱使用mailx报警)


    一、前言

    关于StarRocks的负载均衡以及高可用,官方给了2种方法:
    1、通过 JDBC Connector 均衡负载
    2、通过 ProxySQL 均衡负载
    参考官方文档:StarRocks负载均衡配置
    当前文档选择常用架构 Keepalived+Haproxy服务
    架构方案:

    机器节点服务
    192.168.1.101masterStarRocks Keepalived Haproxy
    192.168.1.102followStarRocks Keepalived Haproxy
    192.168.1.103followStarRocks

    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
    
    • 1
    • 2
    • 3

    3、编译

    yum install gcc gcc-c++ -y
    
    make TARGET=linux-glibc PREFIX=/usr/local/haproxy 
    
    make install PREFIX=/usr/local/haproxy 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、配置文件

    vim /etc/rsyslog.d/haproxy.conf 
    
    • 1
    $ModLoad imudp 
    $UDPServerRun 514 
    local0.* /usr/local/haproxy/logs/haproxy.log 
    &~
    
    • 1
    • 2
    • 3
    • 4

    5、 开启远程日志

    vim /etc/sysconfig/rsyslog
    
    • 1
    SYSLOGD_OPTIONS="-c 2 -r -m 0" 
    
    • 1

    参数解析:
    -c 2 使用兼容模式,默认是 -c 5。 -r 开启远程日志。
    -m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能。

    6、使修改生效

    systemctl restart rsyslog
    
    • 1

    7、编辑负载均衡文件

    vim /usr/local/haproxy/haproxy.cfg
    
    • 1
    #
    # 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
    
    • 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
    • 46
    • 47
    • 48
    • 49

    8、启动服务

     /opt/haproxy/haproxy -f /usr/local/haproxy/haproxy.cfg
    
    • 1

    9、查看服务状态

    netstat -lnatp | grep -i haproxy
    
    • 1

    在这里插入图片描述
    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
    
    • 1

    三、安装 mailx

    1、安装

    yum -y install mailx
    
    • 1

    2、配置

    vim /etc/mail.rc
    
    • 1

    需要将邮箱的相关参数配置进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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、测试

    echo hello | mailx -v -s "test" xxx@x.com
    
    • 1

    四、安装 Keepalived

    192.168.1.101、192.168.1.102
    以上2台机器分别进行以下操作
    1、安装

    yum -y install keepalived
    
    • 1

    2、自定义检查脚本

    vim /etc/keepalived/check_server.sh
    
    • 1

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3、配置文件修改
    修改 Keepalived 配置文件,将原本的 keepalived.conf 文件备份,新建 keepalived.conf 文件加入如下内容

    mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
    
    vim /etc/keepalived/keepalived.conf
    
    • 1
    • 2
    • 3

    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"
    }
    
    • 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

    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"
    }
    
    • 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

    4、启动

    systemctl start keepalived.service
    
    systemctl enable keepalived
    
    • 1
    • 2
    • 3

    5、查看服务

    systemctl status keepalived.service
    
    • 1

    五、测试

    1、测试端口是否转换成功

    mysql -u root -p -P3307 -h 192.168.1.100
    
    • 1

    连接StarRocks 成功后

    192.168.1.101 机器:

    ps -ef|grep haproxy
    
    kill -9  haproxy服务
    
    • 1
    • 2
    • 3

    查看邮箱邮件:
    在这里插入图片描述

    2、连接StarRocks 成功后
    vip漂移后,查看StarRocks 连接

    mysql -u root -p -P3307 -h 192.168.1.100
    
    • 1
  • 相关阅读:
    什么是PolarDB
    络达开发---自定义Timer的实现
    taobao.trade.get( 获取单笔交易的部分信息),淘宝店铺订单接口,淘宝oAuth2.0接口,淘宝R2接口代码对接分享
    Python21天学习挑战赛Day(8)·pdfplumber读取PDF写入Excel(应用)
    linux centos7 docker 安装xxl-job-admin
    【笔记1-2】Qt系列:QkeyEvent 键盘事件 设定快捷键
    37岁更要坚定,竞争从阿里的Java高并发操作手册开始
    Python3-pdf文件的相关操作,分割和合并page,PyPDF2的使用
    java计算机毕业设计奢品网站系统源码+系统+数据库+lw文档+mybatis+运行部署
    【图论算法】最小生成树 (Prim 算法、Kruskal 算法)
  • 原文地址:https://blog.csdn.net/qq_42502354/article/details/127684411