记录一下使用haproxy负载mycat集群的步骤
前面的文章已经介绍勒mycat的安装和配置,这里就不介绍了。
本人采用的是2台ECS做的测试
一,环境介绍:
下面都是ubuntu1604的机器
59.111.153.92 :haproxy,mycat,mysql
47.120.21.31 : mycat,mysql
为节省机器,所以haproxy在mycat一台机器,少一层网络层。
mysql之间可以做主从或者互为主从配置。
1、安装haproxy
useradd -r haproxy
wget https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-1.8.12.tar.gz/sha512/2b782a54988cc88d1af0e5f011af062910e8fac28eab13db7e05a58d0d23961f827da47e3871e8d081f5a2d222588480d81dec2e9f14ec9f54a1c3cb5bf3d56a/haproxy-1.8.12.tar.gz
tar -zxvf haproxy-1.8.12.tar.gz
cd haproxy-1.8.12
make TARGET=linux2628 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
cd /usr/local/haproxy
chown -R haproxy.haproxy *
2、配置haproxy
vim /usr/local/haproxy/haproxy.cfg
写入内容:
# Global settings
global
log 127.0.0.1 local0 ##记日志的功能
maxconn 4096 ##最大连接数,默认4000
#chroot /usr/local/haproxy
user root #所属用户
group root #所属组
daemon ###创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon"
defaults
log global ###采用全局定义的日志
option dontlognull ###不记录健康检查的日志信息
retries 3 ###3次连接失败就认为服务不可用,也可以通过后面设置
option redispatch ###serverId对应的服务器挂掉后,强制定向到其他健康的服务器
maxconn 2000 ###最大连接数
timeout connect 5000ms ##contimeout 5000 连接超时
timeout client 50000ms ##clitimeout 50000 客户端连接超时
timeout server 50000ms ##srvtimeout 50000 服务器连接超时
##listen admin_status 59.111.153.92:8067:48800 ##VIP
##stats uri/admin-status #统计页面
##stats auth admin:admin
mode http ###默认的模式,tcp是4层,http是7层,health只会返回OK 若是混合模式则 mode 不需要设置
option httplog ###日志类别http日志格式 混合模式 此处还需要加上 tcplog
## HAProxy的状态信息统计页面
listen admin_status
bind :48800 ## 绑定端口
stats uri /admin-status ##统计页面
stats auth admin:admin ## 设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可
mode http
option httplog ## 启用日志记录HTTP请求
listen mycat_service ## 59.111.153.92:8067 ##转发到mycat的8066端口,即mycat的服务端口
bind :8067
mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
balance roundrobin
server mycat_111 59.111.153.92:8066 check port 48700 inter 5s rise 2 fall 3
server mycat_122 47.120.21.31: 8066 check port 48700 inter 5s rise 2 fall 3
#srvtimeout 20000
timeout server 20000
listen allmycat_admin ##59.111.153.92:9067 ##转发到mycat的9066端口,及mycat的管理控制台端口
bind :9067
mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
balance roundrobin
server mycat_111 59.111.153.92:8066 check port 48700 inter 5s rise 2 fall 3
server mycat_122 47.120.21.31: 8066 check port 48700 inter 5s rise 2 fall 3
#srvtimeout 20000
timeout server 20000
sudo /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -c #检查配置文件是否正常
sudo /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg #启动
sudo killall haproxy #停止
3、配置haproxy记录日志功能
默认haproxy是不记录日志的,为了记录日志还需要配置syslog模块,在linux下是rsyslogd服务,需要先安装rsyslog
sudo apt-get install rsyslog
sudo mkdir /etc/rsyslog.d
cd /etc/rsyslog.d/
sudo touch haproxy.conf
vim haproxy.conf
写入内容
$ModLoad imudp
$UDPServerRun 514
local0.* /var/log/haproxy.log
vim /etc/rsyslog.conf
修改:1在底部加入以下内容
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
重启rsyslog服务
systemctl restart rsyslog.service
将rsyslog加入自动启动服务
systemctl enable rsyslog.service
二、配置监听mycat是否存活
俩台mycat上都需要配置
需要111,122机器开放8066,9066端口,48700端口
haproxy所在机器额外开放48800,8067,9067端口,查看haproxy管理mycat的界面和访问haproxy代理的mycat。
mycat上都需要添加检测端口 48700 的脚本,为此需要用到 xinetd,xinetd 为
linux 系统的基础服务。
首先在 xinetd 目录下面增加脚本与端口的映射配置文件
1.先查看电脑是否已经安装xinetd
sudo /etc/init.d/xinetd status
执行如上命令如果没有提示未知服务的话,说明已经安装。
2.更新apt-get 资源列表
sudo apt-get update
3.安装xinetd
sudo apt-get install xinetd
4.安装完成后重启电脑
5.现次查看xinetd状态
sudo /etc/init.d/xinetd status
如果运行正常则会显示:xinetd start/running
6.xinetd其它操作
xinetd还有其它命令,启动,停止,重启等。如下所示:
Usage: /etc/init.d/xinetd {start|stop|reload|force-reload|restart|status}
cd /etc/xinetd.d
sudo touch mycat_status
sudo vim /etc/xinetd.d/mycat_status
写入以下内容
service mycat_status
{
flags = REUSE
socket_type = stream
port = 48700
wait = no
user = nobody
server =/usr/local/bin/mycat_status
log_on_failure += USERID
disable = no
}
创建xinetd启动服务脚本
vim /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=`/home/emeet/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 777 /usr/local/bin/mycat_status
chmod 777 /etc/xinetd.d/mycat_status
这里需要测试一下服务是否正常:
sudo /usr/local/bin/mycat_status
如果输出:HTTP/1.1 200 OK,(200需要mycat开启)则表示正确。如果有其它提示则一定要解决,否则影响后面的正常访问。
将启动脚本加入服务
vim /etc/services
在末尾加入
mycat_status 48700/tcp # mycat_status
重启xinetd服务
sudo systemctl restart xinetd.service
验证mycat_status服务是否启动成功
sudo netstat -antup|grep 48700
注意:/etc/xinetd.d/mycat_status里的service mycat_status(服务名)和port = 48700(端口)要与 /etc/services里的一致,一定要细致,错误了就多检查检查。
启动俩台机器的mycat
sudo ./mycat start
启动haproxy
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -c 检查配置文件是否正确
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg 启动配置文件
打开浏览器,输入http://59.111.153.92:48800/admin-status
看到下面的页面说明启动,配置成功:
绿色俩条记录说明mycta都运行正常,如果是红色就有问题,可以去检查配置。
停掉一台机器的mycat,其中的记录刷新后会变为红色。
通过 mysql -utest -p123456 -h59.111.153.92 -P8067 访问mycat也可以测试。