🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[toc] ## 集群架构图 ![](https://img.kancloud.cn/ce/31/ce314467a39b76e988d9e99b9434317c_781x871.png) 参考: [MySQL高可用读写分离集群 ](https://www.roncoo.com/view/4) HAProxy负责将请求分发到MyCat上,起到负载均衡的作用,同时HAProxy也能检测到MyCat是否存活,HAProxy只会将请求转发到存活的MyCat上。如果一台MyCat服务器宕机,HAPorxy转发请求时不会转发到宕机的MyCat上,所以MyCat依然可用。 ## 安装HAProxy HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 ~~~ wget https://github.com/haproxy/haproxy/archive/v2.0.0.tar.gz tar -zxvf v2.0.0.tar.gz cd haproxy-2.0.0/ # 安装编译所需的依赖包 yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel make TARGET=linux-glibc ARCH=x86_64 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy mkdir /usr/local/haproxy make install PREFIX=/usr/local/haproxy # 创建配置文件目录 mkdir -p /usr/local/haproxy/conf mkdir -p /etc/haproxy/ cp /usr/local/src/haproxy-2.0.0/examples/option-http_proxy.cfg /usr/local/haproxy/conf/http_proxy.cfg ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg # 错误页面配置 cp -r /usr/local/src/haproxy-2.0.0/examples/errorfiles /usr/local/haproxy/ ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles # 启动文件,设置开机启动 cp /usr/local/src/haproxy-2.0.0/examples/haproxy.init /etc/rc.d/init.d/haproxy chmod +x /etc/rc.d/init.d/haproxy ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin chkconfig --add haproxy chkconfig haproxy on ~~~ **docker容器化** # 挂载主要是看原镜像的dockerfile docker run --name haproxy -e LANG=en_US.UTF-8 -v /showcase/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg --restart=always --net host -d haproxy:latest 如果你挂载haproxy配置并且修改了你的haproxy.cfg文件,可以使用如下命令优雅的重载配置: docker kill -s HUP my-running-haproxy ## 安装xinetd配置MyCat状态检查服务 MyCat服务主机(mycat-01、mycat-02)上需要增加mycat服务的状态检测脚本,并开放相应的检测端口,以提供给HAProxy对MyCat的服务状态进行检测判断。可以使用xinetd来实现,通过xinetd,HAProxy可以用httpchk来检测MyCat的存活状态。(xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。xinetd提供类似于inetd+tcp\_wrapper的功能,但是更加强大和安全。xinetd为linux系统的基础服务) ~~~ yum -y install xinetd # 检查/etc/xinetd.conf的末尾是否有 includedir /etc/xinetd.d ,没有就加上 vim /etc/xinetd.conf ~~~ ![](https://img.kancloud.cn/7a/5c/7a5ce2626491341ccedd9a9d255b6e56_837x510.png) ~~~ # 检查 /etc/xinetd.d 目录是否存在,不存在刚创建 ll /etc/xinetd.d/ mkdir /etc/xinetd.d/ # 增加MyCat存活状态检测服务配置 touch /etc/xinetd.d/mycat_status vi /etc/xinetd.d/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 } ~~~ ~~~ # 添加 /usr/local/bin/mycat_status 服务脚本 touch /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 # 给新增脚本赋予可执行权限 chmod a+x /usr/local/bin/mycat_status ~~~ ~~~ # 在 /etc/services 中加入 mycat_status 服务 vi /etc/services # 在末尾加入: mycat_status 48700/tcp # mycat_status # 保存后,重启 xinetd 服务 service xinetd restart # 验证是否成功 netstat -antup|grep 48700 ~~~ ## HAProxy配置MyCat负载均衡集群 HAProxy支持TCP(第四层)和HTTP(第七层)应用的代理,本节课程我们使用HAProxy来做MyCat的负载均衡代理使用的是TCP模式。在4层模式下HAProxy仅在客户端和服务器之间转发双向流量。HAProxy配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障,HAProxy会自动将该服务器摘除,故障恢复后会自动将该服务器加入进来。 具体参数说明可参考官方配置文档: http://cbonte.github.io/haproxy-dconv/2.0/configuration.html # todo 1. 理解haproxy的配置项和使用原理 2. 制作xinetd版的mycat镜像 主要参考:https://www.cnblogs.com/happy1983/p/9265358.html https://www.cnblogs.com/Richardzhu/p/3344676.html