美文网首页
Mycat集群部署(高可用)

Mycat集群部署(高可用)

作者: sknfie | 来源:发表于2020-08-14 09:01 被阅读0次

    概述

    MyCat 官方推荐使用 HAProxy 做 MyCat 的高可用负载均衡代理。
    HAProxy 是一款提供高可用性、负载均衡以及基于 TCP(第四层)和 HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
    MyCat 服务主机上需要开放检测端口用来检测 mycat 服务的状态,提供给 HAProxy 对 MyCat 的服务状态进行检测判断。
    检测 mycat 服务状态以通过xinetd 来实现, 使得HAProxy 可以用 httpchk 来检测 MyCat 的存活状态。

    • xinetd ( extended internet daemon) 是新一代的网络守护进程服务程序,经常用来管理多种轻量级Internet 服务。
    • xinetd 为 linux 系统的基础服务,提供类似于 inetd+tcp_wrapper 的功能,但是更加的强大和安全。

    xinetd安装步骤

    1、安装xinetd:

    yum list|grep xinetd 
    xinetd.x86_64                               2:2.3.15-14.el7            base
    
    yum install xinetd.x86_64
    

    2、修改配置
    检查是否有includedir /etc/xinetd.d,如果没有该配置需要加上:

    vi /etc/xinetd.conf 
    includedir /etc/xinetd.d //如果没有该配置需要加上
    

    3、检查 /etc/xinetd.d 目录
    检查是否有 /etc/xinetd.d 目录,如果没有该目录需要加上:

    ls /etc/xinetd.d
    mkdir /etc/xinetd.d/ //如果没有该目录需要加上
    

    4、配置存活状态检测
    增加 MyCat 存活状态检测服务配置:

    cd /etc/xinetd.d/
    vi mycat_status
    service mycat_status
    {
     flags = REUSE ## 使用该标记的 socket_type 为 stream,需要设置 wait 为 no
     socket_type = stream ## 封包处理方式, Stream 为 TCP 数据包
     port = 48700 ## 服务监听端口
     wait = no ## 表示不需等待,即服务将以多线程的方式运行
     user = root ## 执行此服务进程的用户
     server =/usr/local/bin/mycat_status ## 需要启动的服务脚本
     log_on_failure += USERID ## 登录失败记录的内容
     disable = no ## 要启动服务,将此参数设置为 no
    }
    

    5、配置服务脚本
    添加服务脚本/usr/local/bin/mycat_status:

    vi /usr/local/bin/mycat_status
    
    #!/bin/bash
    #/usr/local/bin/mycat_status.sh
    # This script checks if a mycat server is healthy running on localhost.
    # It will return:
    # "HTTP/1.x 200 OK\r" (if mycat is running smoothly)
    # "HTTP/1.x 503 Internal Server Error\r" (else)
    mycat=` /usr/local/mycat/bin/mycat status | grep 'not running' | wc -l`
    if [ "$mycat" = "0" ]; then
     /bin/echo -e "HTTP/1.1 200 OK\r\n"
    else
     /bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
    fi
    

    6、添加可执行权限

    chmod 777 /usr/local/bin/mycat_status
    

    7、配置启动服务
    在 /etc/services 中加入 mycat_status 服务:

    vi /etc/services
    
    mycat_status    48700/tcp               # mycat_status
    

    保存后重启:

    service xinetd restart
    Redirecting to /bin/systemctl restart xinetd.service
    
    /bin/systemctl restart xinetd.service
    

    发现第一个命令不可用,执行按照下面的命令去执行重启。
    8、确认启动
    验证 mycat_status 服务是否启动:

    netstat -antup|grep 48700 //发现没有
    
    ps aux | grep xinetd
    root     26013  0.0  0.0  25044   600 ?        Ss   16:02   0:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
    

    9、开放端口
    MyCat 服务主机的防火墙上打开 48700 端口:

    yum install -y iptables-services.x86_64
    
    vi /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 48700 -j ACCEPT
    
    service iptables restart
    Redirecting to /bin/systemctl restart iptables.service
    Failed to restart iptables.service: Unit not found.
    

    haproxy 安装步骤

    1. 安装haproxy
    yum list|grep haproxy
    haproxy.x86_64                              1.5.18-9.el7               base
    
    yum install -y haproxy.x86_64
    

    设置开机启动:

    systemctl enable haproxy.service
    
    1. 配置
      HAProxy配置比较简单,拥有服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy 会自动将该服务器摘除, 故障恢复后会自动将该服务器加入进来。
    vi /etc/haproxy/haproxy.cfg
    
    global ## global 配置中的参数为进程级别的参数,通常与其运行的操作系统有关
        log         127.0.0.1 local2 ## 定义全局的 syslog 服务器,最多可以定义 2 个,local0 是日志设备,对应于/etc/rsyslog.conf 中的配置,默认回收 info 的日志级别
        chroot      /var/lib/haproxy ## 修改 HAProxy 的工作目录至指定的目录并在放弃权限之前执行, chroot() 操作,可以提升 haproxy 的安全级别
        pidfile     /var/run/haproxy.pid ## 进程文件(默认路径 /var/run/haproxy.pid)
        maxconn     4000 ## 设定每个 haproxy 进程所接受的最大并发连接数
        user        haproxy ## 同 uid,但这里使用的为用户名
        group       haproxy ## 同 gid,不过这里为指定的用户组名
        daemon  ## 设置 haproxy 后台守护进程形式运行
        stats socket /var/lib/haproxy/stats 
    defaults ## defaults:用于为所有其他配置段提供默认参数,这默认配置参数可由下一个"defaults"所重新设定
        mode                    http ## mode: 所处理的模式 (tcp: 四层 , http: 七层 , health: 状态检查, 只会返回 OK)
        log                     global ## 继承 global 中 log 的定义
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch ## serverId 对应的服务器挂掉后, 强制定向到其他健康的服务器
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s ## 连接超时(默认是毫秒, 单位可以设置 us,ms,s,m,h,d)
        timeout client          1m ## 客户端超时
        timeout server          1m ## 服务器超时
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
    
        balance     roundrobin
        server node1 192.168.201.73:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10
        server node2 192.168.201.74:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10
    

    格式: server <name> <address>[:[port]] [param*]
    server 在后端声明一个 server,只能用于 listen 和 backend 区段:
    <name>为此服务器指定的内部名称,其将会出现在日志及警告信息中;
    <address>此服务器的 IPv4 地址,也支持使用可解析的主机名,但要在启动时需要解析主机名至响应的 IPV4 地址;

    [:[port]] 指定将客户端连接请求发往此服务器时的目标端口,此为可选项
    [param*] 为此 server 设定的一系列参数,均为可选项,参数比较多,下面仅说明几个常用的参数:
    weight: 权重,默认为 1,最大值为 256, 0 表示不参与负载均衡
    backup: 设定为备用服务器,仅在负载均衡场景中的其他 server 均不可以启用此 server;
    check: 启动对此 server 执行监控状态检查,其可以借助于额外的其他参数完成更精细的设定;
    inter: 设定监控状态检查的时间间隔,单位为毫秒,默认为 2000,
    也可以使用 fastinter 和 downinter 来根据服务器端专题优化此事件延迟
    rise: 设置 server 从离线状态转换至正常状态需要检查的次数(不设置的情况下,默认值为 2);
    fall: 设置 server 从正常状态转换至离线状态需要检查的次数(不设置的情况下,默认值为 3);
    cookie: 为指定 server 设定 cookie 值,此处指定的值将会在请求入站时被检查,第一次为此值挑选的 server 将会被后续的请求所选中,其目的在于实现持久连接的功能;
    maxconn: 指定此服务器接受的最大并发连接数,如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其他连接被释放。

    设置防火墙

    vi /etc/sysconfig/iptables
    
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 48800 -j ACCEPT
    
    service iptables restart
    

    开启 rsyslog 的 haproxy 日志记录功能

    默认情况下 haproxy 是没有日志的,如果有需要则配置系统的 syslog, 也就是 linux 系统中的 rsyslog 服务。

    yum list|grep rsyslog
    rsyslog.x86_64                              8.24.0-34.el7              @anaconda
    
    yum install -y rsyslog.x86_64
    

    修改配置

    vi /etc/rsyslog.conf
    
    $ModLoad imudp  ## 是模块名,支持 UDP 协议
    $UDPServerRun 514 ##允许 514 端口接收使用 UDP 和 TCP 协议转发过来的日志
    

    增加haproxy日志配置文件

    vi /etc/rsyslog.d/haproxy.conf
    
    local0.* /var/log/haproxy.log
    &~
    

    如果不加上面的的"&~"配置则除了在/var/log/haproxy.log 中写入日志外,也会写入/var/log/message文件中
    重启rsyslog:

    systemctl restart rsyslog.service
    

    配置系统内核的 IP 包转发功能

    修改配置:

    vi /etc/sysctl.conf
    
    net.ipv4.ip_forward = 1
    

    配置生效:

    sysctl -p
    

    启动haproxy

    systemctl start haproxy.service
    

    相关文章

      网友评论

          本文标题:Mycat集群部署(高可用)

          本文链接:https://www.haomeiwen.com/subject/edobdktx.html