HaProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。应用到Haproxy主要是因为他免费,并且基于TCP和HTTP的应用代理。

  先介绍一下Haproxy的应用场景,一个是TCP代理,这边也是我项目中应用的,另一个是HTTP代理,我就简单介绍一下。基于Tcp协议的Haproxy代理应用场景:在VPC网络环境下,虚机A的数据库不能被外界网络访问到,只能被在同一内网环境下的虚机B访问,这时候可以通过在虚机B上搭建Haproxy环境,通过Haproxy代理实现外部虚机C对虚机A数据库的访问;这里我项目中实际运用到的场景是这样的,在公有云上创建RDS实例,会有VPC网络和Classic网络,在选择VPC网络创建RDS后,在进行数据同步时,会对该RDS数据库进行数据同步,这时候由于RDS的数据库在VPC网络环境下,外网是不能直接访问这个RDS数据库。这时候我们采用的是用一个ECS云服务器上搭建一个Haproxy代理,公网通过haproxy代理访问这个RDS数据库,这样就解决了VPC网络的访问问题;

  基于HTTP协议的Haproxy代理应用场景:用户访问网站域名时,通过我们设置的Haproxy代理,HTTP请求到后端配置的web服务器上,获得后方服务器返回的内容后重新封装,响应给客户端;就不啰嗦了,直接来干货,应用haproxy代理访问后端mysql数据库(这里不一定是mysql数据库)。

(一)Haproxy下载、安装:网上的资源都要积分,所以直接在yum上找免费资源。

yum install -y haproxy
rpm -qi haproxy
rpm -ql haproxy

(二)配置haproxy.cfg文件(重点)

cd /etc/haproxy
vim haproxy.cfg
#配置的haproxy.cfg文件
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats #---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
log global
log 127.0.0.1 local3
mode http
option httplog
option dontlognull
retries
option redispatch
maxconn
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s #后端mysql配置,访问虚机地址+端口号可以访问后端的mysql,例如:192.168.108.133:7306可以访问140/133的mysql数据库
listen mysql
bind 0.0.0.0:
mode tcp
balance roundrobin
server mysql1 192.168.108.140:3306
     server mysql2 192.168.108.133:3306 #haproxy监听端口(可去掉),访问虚机地址+端口号+/stats可以看到,例如:192.168.108.133:/stats
listen stats
bind 0.0.0.0:
mode http
option httplog
maxconn
stats refresh 30s
stats uri /stats
stats realm XingCloud\ Haproxy
stats auth admin:admin #用这个账号登录,可以自己设置
stats auth Frank:Frank
stats hide-version
stats admin if TRUE

(三)创建日志文件/var/log/haproxy/haproxy.log

cd /var/log
mkdir haproxy
cd haproxy
touch haproxy.log
chmod a+w haproxy.log

(四)开启rsyslog的haproxy的日志记录功能

vim /etc/rsyslog.cnf --修改rsyslog.cfg文件
$ModLoad imudp
$UDPServerRun
将这两行前的#去掉。
在local7.* /var/log/boot.log之后添加如下内容
# Save haproxy log
local2.* /var/log/haproxy/haproxy.log
vim /etc/sysconfig/rsyslog --修改rsylog文件
SYSLOGD_OPTIONS="" 改为 SYSLOGD_OPTIONS="-r -m 2 -c 2"

(五)重启日志和haproxy服务

systemctl restart rsyslog
systemctl restart haproxy

(六)haproxy相关命令

killall haproxy --停止haproxy
ps -ef |grep haproxy |grep -v grep --查看haproxy的运行状态(这里直接可以通过配置的监听页面也可以看到192.168.108.:/stats)
netstat -plantu | grep --查看端口7306

(七)测试

1.输入网址http://192.168.108.133:1080/stats可以查看Haproxy的监考页面,出现这个页面也说明你haproxy配置成功了。

2.haproxy代理访问后端的mysql数据库,这里我用的工具是Navicat。这里7306连接的就是192.168.108.140/133:3306数据库,这里用的用户名和密码是140/133数据库的用户名和密码,这里140和133的用户名和密码需保持一致。有疑问的同学可以在140上新建个数据库,通过7306这个端口访问数据库也可以看见刚新建的数据库。关闭之后重新打开192.168.108.133:7306时,就会访问到192.168.108.133:3306数据库,实现mysql的均衡负载。

  结束语:Haproxy功能还是挺强大的,基于Haproxy代理的web应用,还有web/mysql的均衡负载,。这里一直遇到一个很棘手的问题,就是测试连接后端mysql数据库的时候,一直报Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts',最后解决的是查看140服务器上的3306端口一直有个连接占用着,并且没有连接成功,最后只能重启140的mysql数据库就好使了。这个问题现在没有办法复现,所以这里就不分析具体的错误原因了。这里主要就是Haproxy简单的应用,如果有不对或者疑问大家都可以积极指出。

  

Mysql的Haproxy反向代理和负载均衡的更多相关文章

  1. nginx详解反向代理、负载均衡、LNMP架构上线动态网站(week4_day1_part1)-技术流ken

    nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理 ...

  2. Linux实战教学笔记30:Nginx反向代理与负载均衡应用实践

    1.1 集群简介 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可 ...

  3. nginx 反向代理与负载均衡应用实践

    集群介绍 集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可以彼此通信,协同向 ...

  4. [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件

    nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...

  5. Nginx的反向代理和负载均衡服务

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行. ...

  6. nginx 反向代理实现负载均衡*理论

    Nginx负载均衡集群介绍 负载均衡集群提供了一种廉价,有效,透明的方法,来扩展网络设备和服务器的负载,带宽和吞吐量,同时加强了网络数据处理能力,提高了网络的灵活性和可用性. 搭建负载均衡服务的需求: ...

  7. Nginx反向代理与负载均衡应用实践(一)

    Nginx反向代理与负载均衡应用实践(一) 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App ...

  8. Nginx(三):反向代理,负载均衡

    环境准备   配置反向代理,负载均衡,动静分离需要的必备环境,JDK,2个tomcat开启8080和8081端口. 安装jdk [root@localhost ~]# rpm -qa|grep jav ...

  9. nginx反向代理、负载均衡以及分布式下的session保持

    [前言]部署服务器用到了nginx,相比较于apache并发能力更强,优点也比其多得多.虽然我的项目可能用不到这么多性能,还是部署一个流行的服务器吧! 此篇博文主要学习nginx(ingine x)的 ...

随机推荐

  1. ASP.NET MVC 视图(一)

    ASP.NET MVC 视图(一) 前言 从本篇开始就进入到了MVC中的视图部分,在前面的一些篇幅中或多或少的对视图和视图中的一些对象的运用进行了描述,不过毕竟不是视图篇幅说的不全面,本篇首先为大家讲 ...

  2. JavaScript语法

    通用变量var 强制整数parseint(): 强制小数parsefloat(): 是不是一个合法的数字isNaN(): if(判断条件) { 满足条件要执行的语句 } else{ 不满足条件要执行的 ...

  3. lr文件下载脚本(文件参数化重命名)

    http://wenku.baidu.com/link?url=6oiIadyF9eFS4VshKbfJDnxrBh2IX919ndi0JO8yoqTRNRNIpavFrZJ9LPVb-FBSfbRY ...

  4. Oracle_数据处理

    数据操纵语言 DML(Data Manipulation Language – 数据操纵语言) 可以在下列条件下执行: - 向表中插入数据 - 修改现存数据 - 删除现存数据* 事务是由完成若干项工作 ...

  5. 设计模式(五): 简单而又不失其重要性的单例模式(Singleton Pattern)

    上篇博客我们系统的介绍了三种工厂模式,今天我们就来介绍一下单例模式.单例模式虽然简单,但是还是比较重要的,是常用设计模式之一.在之前的博客<Objective-C中的单例模式>中介绍了Ob ...

  6. iOS引入JavaScriptCore引擎框架(一)

    JavaScriptCore引擎     我们都知道WebKit是个渲染引擎,简单来说负责页面的布局,绘制以及层的合成,但是WebKit工程中不仅仅有关于渲染相关的逻辑,也集成了默认的javascri ...

  7. 读书笔记--SQL必知必会21--使用游标

    21.1 游标 结果集(result set),SQL查询说检出的结果. 游标(cusror),是一个存储在DBMS服务器上的数据库查询. 游标不是一条SELECT语句,而是被该句检索出来的结果集. ...

  8. SpringMVC一路总结(一)

    SpringMVC听闻已久,早在去年就被学长问到关于SpringMVC的基础知识,当时也没在意.主要是工作中也没有用到关于SpringMVC的技术,因此免于没有时间和精力的借口就没有接触和学习Spri ...

  9. 用js触发CSS3-transition过渡动画

    用js触发CSS3-transition过渡动画 经过这几天的工作,让我进一步的了解到CSS3的强大,原本许多需要js才能实现的动画效果,现在通过CSS3就能轻易实现了,但是CSS3也有自身的不足,例 ...

  10. ThreadLocal 工作原理、部分源码分析

    1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...