Haproxy+PXC实现负载均衡

软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第 三方应用的软负载实现。
LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。
HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、
内部协议通信服务器等),和7层(HTTP)。在4层模式下,HAproxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,
并且能通过允许、拒绝、交换、增加、修改或者删除请求(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于
那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的
运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

环境情况:
OS:centos release 6.6
pxc三个节点:192.168.79.3:3306、192.168.79.4:3306、192.168.79.5:3306
HAPproxy节点:192.168.79.128 (已搭建完成)
HAproxy版本:1.5.2
PXC集群安装完成后,需要一个负载均衡器来分发连接,我们这里采用haproxy,这也是percona推荐的方式
一、安装haproxy(仅安装在haproxy的节点上,如果安装在pxcmysql节点注意端口号)
wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.2.tar.gz
#tar -zxvf haproxy-1.5.2.tar.gz
#cd haproxy-1.5.2
#make TARGET=linux2628
#make install
ps:默认安装到/usr/local/sbin/下面,可以用PREFIX指定软件安装路径

也可以直接使用yum安装:yum install –y haproxy

二、在haproxy服务器上安装配置HAproxy
配置文件存/etc/haproxy/haproxy.cfg 内容如下:
#mkdir /etc/haproxy
# cp examples/haproxy.cfg /etc/haproxy/
# cat /etc/haproxy/haproxy.cfg
global #全局参数
log 127.0.0.1 local0 #定义日志输出到哪里,以及日志级别,格式log <address> <facility> [max level [min level]] ,
#使用ip地址,默认使用udp 514端口,可以配置两种日志,一种进程启动和退出,一种代理日志
log 127.0.0.1 local1 notice
maxconn 4096 #每个进程的最大并发连接数
#ulimit-n 10240 #每个进程的文件描述符,默认根据maxconn值自动计算
#chroot /usr/share/haproxy #安全目录,需要root权限启动haproxy
uid 99 #进程的用户ID,必须使用root用户运行,交换到指定的用户,也可以使用user
gid 99 #进程的组ID,也可以使用group指定组名
daemon #后台运行,等同于命令行参数-D
#nbproc 2 多进程模式,默认只开启一个进程
pidfile /var/run/haproxy/haproxy.pid
#stats socket /var/run/haproxy/haproxy.sock level operator #能接收各种状态输出,以及能接收命令输入
#debug
#quiet
defaults
log global #使用global段的日志定义
mode http #设置实例运行模式或协议,支持http、tcp和health,frontend和backend要一致
option tcplog #启用记录tcp连接的日志,包含会话状态和时间,连接数,frontend、backend和server name,源地址和端口,当使用tcp模式时能找出客户端、服务器断开连接或超时。
option dontlognull #不记录来自监控状态检查的空连接
retries 3 #连接错误后,重传次数
option redispatch #连接错误,启用会话重新分配
maxconn 2000
timeout connect 5000 #单位为毫秒,等待成功连接到服务器的最大时间值
timeout client 50000 #设置在客户端侧的最大不活跃时间值,在TCP模式,最好跟服务器侧一致
timeout server 50000 #设置在服务端侧的最大不活跃时间值,
frontend pxc-front #描述允许客户端连接的监听套接字
bind *:3306
mode tcp
default_backend pxc-back #当没有匹配use_backend时,默认的backend
frontend stats-front
bind *:8088
mode http
default_backend stats-back
backend pxc-back #描述进来的连接将转发到哪些后端服务器
mode tcp
balance leastconn #负载均衡算法,使用最少连接算法,适合长连接应用
option httpchk #启用HTTP协议检查服务器监控状态,通过调用脚本检查节点的状态
server node1 10.0.60.3:3306 check port 9200 inter 12000 rise 3 fall 3
server node2 10.0.60.4:3306 check port 9200 inter 12000 rise 3 fall 3
server node3 10.0.60.5:3306 check port 9200 inter 12000 rise 3 fall 3
#ps:#fall连续3次检查错误后,将表明服务器死亡,默认为3;inter连续两次检查的间隔时间值,单位为毫秒,默认为2s;rise连续3次检查成功,表明服务可用
#option mysql-check user haproxy_check #使用Mysql健康检查,不检查数据库和数据一致性,需要在mysql上创建相应的检查帐户
#server node1 10.0.60.3:3306 check
#server node2 10.0.60.4:3306 check
#server node3 10.0.60.5:3306 check
backend stats-back #开启haproxy的状态页面
mode http
balance roundrobin
stats uri /haproxy/stats #定义访问统计信息的URI
stats auth admin:admin #设置查看haproxy状态统计信息的用户名和密码

配置haproxy的日志:
安装完HAProxy后,默认情况下,HAProxy为了节省读写IO所消耗的性能,默认情况下没有日志输出,一下是开启日志的过程
# rpm -qa |grep rsyslog
rsyslog-5.8.10-8.el6.x86_64
# rpm -ql rsyslog |grep conf$
# vim /etc/rsyslog.conf
...........
$ModLoad imudp
$UDPServerRun 514 //rsyslog 默认情况下,需要在514端口监听UDP,所以可以把这两行注释掉
.........
local0.* /var/log/haproxy.log //和haproxy的配置文件中定义的log level一致

# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
# service rsyslog status
rsyslogd (pid 11437) is running...

三、在每个PXC 每个mysql节点安装mysql健康状态检查脚本:
1)脚本拷贝
# cp /usr/local/mysql/bin/clustercheck /usr/bin/
# cp /usr/local/mysql/xinetd.d/mysqlchk /etc/xinetd.d/

2)创建mysql用户,用于mysql健康检查(在任一节点即可):
> grant process on *.* to ‘clustercheckuser‘@‘localhost‘ identified by ‘clustercheckpassword!‘;
> flush privileges;
ps:如不使用clustercheck中默认用户名和密码,将需要修改clustercheck脚本,MYSQL_USERNAME和MYSQL_PASSWORD值

3)更改/etc/services添加mysqlchk的服务端口号:
# echo ‘mysqlchk 9200/tcp # mysqlchk‘ >> /etc/services

4)安装xinetd服务
# yum -y install xinetd
# /etc/init.d/xinetd restart
Stopping xinetd: [FAILED]
Starting xinetd: [ OK ]
# chkconfig --level 2345 xinetd on
# chkconfig --list |grep xinetd
xinetd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

测试检测脚本:
# clustercheck
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40

Percona XtraDB Cluster Node is synced.

# curl -I 192.168.79.5:9200
HTTP/1.1 503 Service Unavailable
Content-Type: text/plain
Connection: close
Content-Length: 57
# cp /usr/local/mysql/bin/mysql /usr/bin/
# curl -I 192.168.79.5:9200
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40

ps:要保证状态为200,否则检测不通过,可能是mysql服务不正常,或者环境不对致使haproxy无法使用mysql

在mysql集群的其他节点执行上面操作,保证各个节点返回状态为200,如下:
# curl -I 192.168.79.4:9200
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40

# curl -I 192.168.79.5:9200
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40

四、HAproxy启动和关闭
在haproxy服务器上启动haproxy服务:
# /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg
关闭:
#pkill haproxy

# /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg
# ps -ef |grep haproxy
nobody 5751 1 0 21:18 ? 00:00:00 /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg
root 5754 2458 0 21:19 pts/0 00:00:00 grep haproxy
]# netstat -nlap |grep haproxy
tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN 5751/haproxy
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 5751/haproxy
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 5751/haproxy
udp 0 0 0.0.0.0:45891 0.0.0.0:* 5751/haproxy

五、haproxy测试
在mysql pxc创建测试账号:
#grant all privileges on *.* to ‘taotao‘@’%’ identified by ‘taotao’;

#for i in `seq 1 1000`; do mysql -h 192.168.79.128 -P3307 -utaotao -ptaotao -e "select @@hostname;"; done
#for i in `seq 1 1000`; do mysql -h 192.168.79.128 -P3308 -utaotao -ptaotao -e "select @@hostname;"; done

注:其实可以只允许haproxy侧的IP访问即可,因用户通过vip访问mysql集群,haproxy根据调度策略使用自己的ip创建与后端mysql服务器的连接。

查看Haproxy状态:
http://192.168.199.75:8088/haproxy/stats
输入用户密码:stats auth admin admin

补充内容:
1、haproxy可以安装在mysql集群节点,但需要将mysql节点监听在非3306端口,以让haproxy监控在3306端口;
2、为了保证haproxy的高可用,可以结合keepalived;
3、可以使用haproxy做mysql只读库的负载均衡;

时间: 2024-10-10 10:49:07

Haproxy+PXC实现负载均衡的相关文章

lvs、haproxy、nginx 负载均衡的比较分析

lvs.haproxy.nginx 负载均衡的比较分析 对软件实现负载均衡的几个软件,小D详细看了一下,从性能和稳定上还是LVS最牛,基本达到了F5硬件设备的60%性能,其他几个10%都有点困难. 不过就因为LVS忒牛了,配置也最麻烦了,而且健康检测需要另外配置Ldirector,其他HAPROXY和NGINX自己就用,而且配置超级简单. 所以小D建议,如果网站访问量不是门户级别的用HAPROXY或者NGINX就OK了,到了门户级别在用LVS+Idirector吧 哈哈 lvs和nginx都可以

RedHat 7配置HAProxy实现Web负载均衡

本文将简单介绍使用HAProxy实现web负载均衡,主要内容包括基于权重的轮询.为HAProxy配置https.配置http重定向为https.配置HAProxy使用独立日志. 一.测试环境 HAProxy: 主机名:RH7-HAProxy IP地址:192.168.10.20 操作系统:Red Hat Enterprise Linux Server release 7.2 (Maipo)最小化安装 防火墙与SELinux:关闭 安装的服务:HAProxy-1.5.14 WEB01: 主机名:R

HAProxy高可用负载均衡集群部署

HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3.10.0-327.el7.x86_64 集群架构: 前端:HAProxy 1.虚拟FQDN:www.simpletime.net 2.VIP:192.168.39.1:DIP:172.16.39.50 3.调度服务器:Varnish1.Varnish2 4.调度算法:URL_Hash_Consist

Haproxy做LB负载均衡集群的搭建和配置,可以通过web页面监控web服务器的运行状态

HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理. 实验(一) 实验目的:使用Haproxy做负载均衡集群(七层) 实验环境准备: 客户端  IP地址:1.1.1.1 主机名waiwang web1   IP地址:1.1.1.10 主机名:localhost web2   IP地址:1.1.1.20 主机名:localhost 配置HA

haproxy高可用负载均衡

常见的做负载均衡的机制:nginx,lvs,haproxy 适合做网站调度:nginx,haproxy 适合做应用层,如mysql数据库:lvs haproxy特点:吞吐量很高 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合

HAProxy实现RabbitMQ负载均衡

最近看了一下RabbitMQ的负载均衡策略,对于RabbitMQ集群来说,主要有两类负载均衡,客户端内部的和服务端的,客户端内部主要是采用负载均衡算法,服务端主要是采用代理服务器,这里记录一下,采用尝试HAProxy实现RabbitMQ负载均衡的操作. 安装HAProxy 下载HAProxy相关版本,这里下载haproxy-1.8.12.tar.gz,之后准备安装 安装之前查看内核版本 uname -r 根据内核版本选择编译参数: 解压HAProxy,并安装 tar xf haproxy-1.8

mysql复制+keepalived+haproxy配置(负载均衡)

双主+keepalived+haproxy配置(负载均衡) 实验系统:CentOS 6.5_x86_64实验前提:防火墙和selinux都关闭实验软件:keepalived-1.2.13 haproxy-1.8.13 mysql—5.7.21主1 ip:192.168.226.134主2 ip:192.168.226.135vip 192.168.226.150 一.安装mysql 获取mysql安装包:wget https://dev.mysql.com/get/Downloads/MySQL

HAProxy实现高级负载均衡实战和ACL控制

 haproxy实现高级负载均衡实战 环境:随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务提供,不在和pc站点一起提供服务,此时需要做7层规则负载均衡,运维总监要求,能否用一种服务同既能实现七层负载均衡,又能实现四层负载均衡,并且性能高效,配置管理容易,而且还是开源. 实验前准备: ① 两台服务器都使用yum 方式安装haproxy yum -y install haproxy ② iptables -F &&

haproxy做简单负载均衡

介绍: HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上. 配置文件: haproxy 配置中分成五部分内容,分别如下: 1.global:参数是进程级的,通常是和操