Mysql数据库集群高可靠,高并发解决方案--HaProxy实现MyCat集群(一)

 我的笔记   2018-03-05 16:43   1282 人阅读  0 条评论

1. haproxy实现mycat集群

1.1. 为什么使用haproxy

我在上一篇文章《mysql用mycat搞定mysql读写分离》中讲过mycat的安装配置,如下图:

Mysql之使用Haproxy实现mycat集群

有经验的开发人员可以发现mycat存在单点故障的风险,所以本次给大家介绍Haproxy避免mycat的单点。

首先我们来规划一下网络配置。如下图

Mysql之使用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配置中的参数为进程级别的参数,通常与其运行的操作系统有关

Mysql之使用Haproxy实现mycat集群

2) ## defaults:用于为所有其他配置段提供默认参数,这默认配置参数可由下一个"defaults"所重新设定

Mysql之使用Haproxy实现mycat集群

3) ## HAProxy的状态信息统计页面

Mysql之使用Haproxy实现mycat集群

4) ## listen: 用于定义通过关联"前端"和"后端"一个完整的代理,通常只对TCP流量有用

Mysql之使用Haproxy实现mycat集群

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

Mysql之使用Haproxy实现mycat集群

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

Mysql之使用Haproxy实现mycat集群

可以正常读写数据。

7:测试集群可用性

down掉任意一台mycat机器,使用上面的Navicat for MySQL  客户端通过 HAProxy 连接MyCat,读写一切正常。

Mysql之使用Haproxy实现mycat集群

8、登录 HAProxy 的状态信息统计页面

http://192.168.153.162:48800/admin-status

用户名和密码都是 admin,对应的 haproxy.cfg 配置片段

down掉其中一台mycat,下面页面的节点颜色会变成红色,状态会显示down

Mysql之使用Haproxy实现mycat集群

版权付亚东笔记博客所有,禁止转载!!付亚东Java笔记博客

我的笔记博客版权我的笔记博客版权
本文地址:https://wdnote.com/post/16.html
版权声明:本文为原创文章,版权归 我的笔记 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?