Mycat集群部署(高可用)

2020-08-14  本文已影响0人  sknfie

概述

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

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
上一篇 下一篇

猜你喜欢

热点阅读