1. haproxy实现mycat集群
1.1. 为什么使用haproxy
我在上一篇文章《mysql用mycat搞定mysql读写分离》中讲过mycat的安装配置,如下图:
有经验的开发人员可以发现mycat存在单点故障的风险,所以本次给大家介绍Haproxy避免mycat的单点。
首先我们来规划一下网络配置。如下图
1.2. 安装haproxy前的环境准备
1安装配置xinetd
MyCat 服务主机(server005、server006)上需要增加 mycat 服务的状态检测脚本,并开放相应的检测端口,以提供给HAProxy对MyCat的服务状态进行检测判断。所以要server005、server006在安装xinetd。
# yum install xinetd -y
2、增加 MyCat 存活状态检测服务配置
# touch /etc/xinetd.d/mycat_status
注意:拷贝的时候去掉注释
# vi /etc/xinetd.d/mycat_status
service mycat_status { flags = REUSE socket_type = stream port = 48700 wait = no user = root server =/usr/local/bin/mycat_status log_on_failure += USERID disable = no }
3、添加 /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/mycatstatus | 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 775 /usr/local/bin/mycat_status
4、在 /etc/services 中加入 mycat_status 服务
# vi /etc/services
在末尾加入:
mycat_status 48700/tcp # mycat_status
保存后,重启 xinetd 服务
# service xinetd restart
5、验证 mycat_status 服务是否成功启动
# netstat -antup|grep 48700
1.3. HAProxy安装
HAProxy 是一款提供高可用性、负载均衡以及基于 TCP(第四层)和 HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 MyCat 官方推荐使用 HAProxy 做 MyCat 的高可用负载均衡代理。
1、上传haproxy-1.5.16.tar.gz 到 /home/fuyadong/,解压安装
2、安装编译所需的依赖包
yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
3、创建安装目录 /usr/local/haproxy
# mkdir /usr/local/haproxy
4、编译
cd /home/fuyadong/ haproxy-1.5.16
# make TARGET=linux2628 ARCH=x86_64 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy
## TARGET 是指定内核版本,高于2.6.28的建议设置为 linux2628,Linux操作系统内核版本查看命令# uname -r, ARCH 指定
系统架构,openssl pcre zlib 这三个包需要安装不然不支持
5、执行安装
# make install PREFIX=/usr/local/haproxy
6、创建配置文件目录
# mkdir -p /usr/local/haproxy/conf
# mkdir -p /etc/haproxy/
7、从配置文件模版复制配置文件,并添加配置文件软连接
# cp /home/chenjian/haproxy-1.5.16/examples/haproxy.cfg /usr/local/haproxy/conf/
# ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg
8、拷贝错误页面,并添加目录软连接(HTTP 模式选配)
# cp -r /home/chenjian/haproxy-1.5.16/examples/errorfiles /usr/local/haproxy/
# ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles
9、拷贝开机启动文件,并赋予可执行权限
# cp /home/chenjian/haproxy-1.5.16/examples/haproxy.init /etc/rc.d/init.d/haproxy
# chmod +x /etc/rc.d/init.d/haproxy
10、添加haproxy 命令脚本软连接
# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin
11、设置HAProxy 开机启动
# chkconfig --add haproxy
# chkconfig haproxy on
1.4. HAProxy 配置 MyCat 负载均衡集群
HAProxy 支持 TCP(第四层)和 HTTP(第七层)应用的代理,本次我们使用 HAProxy 来做 MyCat的负载均衡代理使用的是TCP模式。 在4层模式下HAProxy仅在客户端和服务器之间转发双向流量。 HAProxy配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障,HAProxy 会自动将该服务器摘除,故障恢复后会自动将该服务器加入进来。
1修改 haproxy.cfg 配置文件
vi /usr/local/haproxy/conf/haproxy.cfg
1) ## global配置中的参数为进程级别的参数,通常与其运行的操作系统有关
2) ## defaults:用于为所有其他配置段提供默认参数,这默认配置参数可由下一个"defaults"所重新设定
3) ## HAProxy的状态信息统计页面
4) ## listen: 用于定义通过关联"前端"和"后端"一个完整的代理,通常只对TCP流量有用
2、根据以上 HAProxy 配置文件要求做以下配置
(1)添加 haproxy 用户组和用户
# groupadd haproxy
# useradd -g haproxy haproxy
(2)创建 chroot 运行的路径
# mkdir /usr/share/haproxy
3开启 rsyslog的 haproxy 日志记录功能
# yum install rsyslog
## 没安装的情况下执行安装
# vi /etc/rsyslog.conf
把 $ModLoad imudp 和 $UDPServerRun 514 前面的 # 去掉
$ModLoad imudp ## 是模块名,支持 UDP 协议
$UDPServerRun 514
##允许514 端口接收使用UDP 和 TCP 协议转发过来的日志,
##而rsyslog 在默认情况下,正是在 514 端口监听UDP
确认 #### GLOBAL DIRECTIVES #### 段中是否有 $IncludeConfig /etc/rsyslog.d/*.conf 没有则增加上此配置,增加后的效果:
# cd /etc/rsyslog.d/
## rsyslog 服务会来此目录加载配置
# touch haproxy.conf
## 创建 haproxy 的日志配置文件
# vi /etc/rsyslog.d/haproxy.conf
增加以下内容:
local0.* /var/log/haproxy.log &~
##如果不加上面的的"&~"配置则除了在/var/log/haproxy.log 中写入日志外,也会写入/var/log/message
文件中
配置保存后重启 rsyslog 服务
# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
配置保存后重启 rsyslog 服务
# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
(等到 HAProxy 服务启动后,就能在/var/log/haproxy.log 中看到日志了)
4、配置系统内核的 IP 包转发功能
# vi /etc/sysctl.conf
修改
net.ipv4.ip_forward = 1
使配置生效
# sysctl -p
5、启动 HAProxy
# service haproxy start
# ps -ef | grep haproxy
haproxy 23921 1 0 23:27 ? 00:00:00 /us
/var/run/haproxy.pid
root 23924 23179 0 23:27 pts/1 00:0
6、使用 Navicat for MySQL 客户端通过 HAProxy 连接MyCat
可以正常读写数据。
7:测试集群可用性
down掉任意一台mycat机器,使用上面的Navicat for MySQL 客户端通过 HAProxy 连接MyCat,读写一切正常。
8、登录 HAProxy 的状态信息统计页面
http://192.168.153.162:48800/admin-status
用户名和密码都是 admin,对应的 haproxy.cfg 配置片段
down掉其中一台mycat,下面页面的节点颜色会变成红色,状态会显示down
版权付亚东笔记博客所有,禁止转载!!付亚东Java笔记博客
我的笔记博客版权我的笔记博客版权