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的功能,但是更加的强大和安全。
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.检查是否有includedir /etc/xinetd.d,如果没有该配置需要加上检查 /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.
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
2.配置
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
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
默认情况下 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
修改配置:
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
配置生效:
sysctl -p
systemctl start haproxy.service
动力节点在线课程涵盖零基础入门,高级进阶,在职提升三大主力内容,覆盖Java从入门到就业提升的全体系学习内容。全部Java视频教程免费观看,相关学习资料免费下载!对于火爆技术,每周一定时更新!如果想了解更多相关技术,可以到动力节点在线免费观看Mycat读写分离视频教程学习哦!
代码小兵57603-29 17:54
代码小兵69606-07 17:03
代码小兵22104-13 18:12
代码小兵22104-20 20:22