暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ShardingSphere-Proxy 负载均衡故障转移

817

单机状态下,要是 ShardingSphere-proxy 服务出现故障不可用,整个服务读写均会出现故障,导致整体服务不可以,微服务状态下更会导致整个集群故障,引发更严重的后果,本次生产环境需要实现如下需求:

  1. 负载均衡

  2. 故障转移

  3. 不停机维护

架构图如下

组件
主机备注
Haproxy 192.168.32.200下载地址见文末原文链接 
ShardingSphere-proxy 192.168.1.166:3307
ShardingSphere-proxy 192.168.1.166:3308
ShardingSphere 所在宿主机192.168.1.166 


跟着我一起实现 Haproxy 对 ShardingSphere-proxy 进行集群部署。


01

添加用户


    #添加haproxy组
    groupadd -r haproxy
    #创建nginx运行账户haproxy并加入到haproxy组,不允许haproxy用户直接登录系统
    useradd -r -g haproxy -M -s sbin/nologin haproxy


    02

    下载安装


      mkdir -p home/haproxy
      cd home/haproxy
      tar -zxvf haproxy-2.3.5.tar.gz
      make TARGET=linux-glibc PREFIX=/usr/local/haproxy
      make install TARGET=linux-glibc PREFIX=/usr/local/haproxy
      mkdir -p usr/local/haproxy/{conf,log,errorfiles}


      03

      配置代理 ShardingSphere-proxy


        touch usr/local/haproxy/conf/haproxy.cfg
        vim usr/local/haproxy/conf/haproxy.cfg

        配置文件

          global
            daemon   # 后台方式运行
            nbproc 1
            chroot usr/local/haproxy
            pidfile haproxy.pid
            user haproxy
            group haproxy
          defaults
            mode tcp               #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
            retries 2               #两次连接失败就认为是服务器不可用,也可以通过后面设置
            option redispatch       #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
            option abortonclose     #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
            maxconn 65530            #默认的最大连接数
            timeout connect 5000ms  #连接超时
            timeout client 30000ms  #客户端超时
            timeout server 30000ms  #服务器超时
            #timeout check 2000      #=心跳检测超时
            log 127.0.0.1 local3 info #[err warning info debug],日志文件的输出定向。产生的日志级别为local3. 系统中local1-7,用户自己定义
            balance roundrobin      # 采用轮询算法

          当出现此类分片键处于运算表达式或函数中的 SQL 时,ShardingSphere 将采用全路由的形式获取结果。


          • 配置

            listen delegate                         #这里是配置负载均衡,test1是名字,可以任意
              bind 0.0.0.0:3307            #这里是监听的IP地址和端口,端口号可以在0-65535之间,要避免端口冲突
              mode tcp                     #连接的协议,这里是tcp协议
              #maxconn 4086
              #log 127.0.0.1 local0 debug
              #option httplog                ###日志类别,记载http日志
              #option dontlognull            ###不记录空连接产生的日志信息
              option httpclose              ###每次请求完毕后主动关闭http通道,haproxy不支持keep-alive
              retries 3      ###3次连接失败就认为服务器不可用,主要通过后面的check检查
              server s1 192.168.1.166:3307 check #负载的MySQL实例1
              server s2 192.168.1.166:3308 check #负载的MySQL实例2 可以有多个,往下排列即
            • 系统状态配置

              listen haproxy_stats
                stats   enable
                bind    *:8082
                mode    http
                option  httplog
                log     global
                maxconn 10
                stats   refresh 30s
                stats   uri admin
                stats   realm haproxy
                stats   auth admin:admin
                stats   hide-version
                stats   admin if TRUE


              04

              修改启动脚本,配置开机启动


                # 将源码目录下的examples/haproxy.init复制到/etc/init.d/下
                cp home/haproxy/haproxy-2.3.5/examples/haproxy.init etc/init.d/haproxy
                # 添加执行权限
                chmod +x /etc/init.d/haproxy
                修改启动脚本,加入如下配置


                vim /etc/init.d/haproxy
                # 修改调整Begin
                BASENAME=`haproxy`
                BIN=/usr/local/haproxy/sbin/haproxy
                CFG=/usr/local/haproxy/conf/haproxy.cfg
                [ -f $CFG ] || exit 1


                PIDFILE=/var/run/haproxy.pid
                LOCKFILE=/var/lock/subsys/$BASENAME
                # 修改调整END


                # 添加service服务
                chkconfig -–add /etc/init.d/haproxy


                05

                启动


                systemctl start haproxy


                06

                管理界面信息查看


                http://192.168.32.200:8082/admin_stats

                用户名密码:admin/admin


                S1 S2两服务启动,可以通过界面进行管理,包括服务下线,保护模式设置,维护可以通过界面设置单独处理,保证有当前有一个可用服务 更多内容可查看原文(https://blog.nxhz1688.com/2021/03/22/sharding-proxy-load/),包含具体配置。

                本文由郑思扬授权转载

                关于 Apache ShardingSphere


                Apache ShardingSphere 是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。

                文章转载自ShardingSphere官微,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论