基于TCP的Haproxy代理

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     4000
    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 10
        option redispatch
        maxconn         2000
        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的mysql数据库
listen  mysql
        bind 0.0.0.0:7306
        mode tcp
        balance roundrobin
        server mysql1 192.168.108.140:3306

#haproxy监听端口(可去掉),访问虚机地址+端口号+/stats可以看到,例如:192.168.108.133:1080/stats
listen stats
        bind 0.0.0.0:1080
        mode http
        option httplog
        maxconn 10
        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 514
    将这两行前的#去掉。
    在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.133:1080/stats)
netstat -plantu | grep 7306 --查看端口7306

(七)测试

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

2.haproxy代理访问后端的mysql数据库,这里我用的工具是Navicat。这里7306连接的就是192.168.108.140:3306数据库,这里用的用户名和密码是140数据库的用户名和密码。有疑问的同学可以在140上新建个数据库,通过7306这个端口访问数据库也可以看见刚新建的数据库。

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

  

时间: 2024-11-04 11:06:35

基于TCP的Haproxy代理的相关文章

基于keepalived对HAproxy做高可用集群

一.Keepalived简介 Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器. Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下: Layer3:Keepalived使用Layer3的方式

haproxy代理设置及配置文件详解

haproxy代理配置: 结果图: haproxy代理配置2方式: 结果配置: Haproxy的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global. Default.frontened.backend.listen 配置文件格式: HAPROXY的配置处理3类来主要参数来源: ---最先处理的命令行参数 ---"global"配置段,用于设定全局的参数配置 ----proxy相关配置段,如default,listen,frontend和backend 全局配置: *

Haproxy代理配置---传输层

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

Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理

Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理 通常我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至于4层负载均衡和7层负载均衡的区别,可以参考:http://www.cnblogs.com/kevingrace/p/6137881.html.然而Nginx从1.9.0版本开始,新增加了一个stream模块,用来实现四层协

如何利用HAProxy 代理 MySQL Master-Slave Replication

背景 我有一个MySQL Master-Slave Replication, 想要通过HAProxy代理, 做读写分离. 写流量给到Master 节点, 读流量给到Slave 节点. 首先我应该由一个HAProxy的配置, 我想应该这样写(伪配置): listen mysql bind *:3316 mode tcp ... server 192.168.1.111 192.168.1.111:3306 check server 192.168.1.112 192.168.1.112:3306

基于keepalived的Haproxy高可用配置

一.概述: HAProxy是一个用于4层或7层的高性能负载均衡软件,在大型网站的大型Web服务器群集中,HAProxy可用来替代专业的硬件负载均衡设备,节省大量的开支. 通常情况下,为了避免整个体系中出现单点故障,在至关重要的架构中,都需要部署备份设备,同样,负载均衡设备也不能部署单台,一旦主设备出现问题之后,备份设备可对主设备进行接管.实现不间断的服务,这便是Keepalived的作用. 于是,HAProxy和Keepalived的组合便成了省钱高效的Web服务器负载均衡架构. 拓扑图: 二.

haproxy代理https配置方法

记得在之前的一篇文章中介绍了nginx反向代理https的方法,今天这里介绍下haproxy代理https的方法: haproxy代理https有两种方式:1)haproxy服务器本身提供ssl证书,后面的web服务器走正常的http 2)haproxy服务器本身只提供代理,后面的web服务器走https(配置ssl证书) 第一种方式:haproxy服务器本身提供ssl证书 注意:需要编译haproxy的时候支持ssl编译参数: #make TARGET=linux26 USE_OPENSSL=

haproxy代理https配置方法【转】

记得在之前的一篇文章中介绍了nginx反向代理https的方法,今天这里介绍下haproxy代理https的方法: haproxy代理https有两种方式:1)haproxy服务器本身提供ssl证书,后面的web服务器走正常的http 2)haproxy服务器本身只提供代理,后面的web服务器走https(配置ssl证书) 第一种方式:haproxy服务器本身提供ssl证书 注意:需要编译haproxy的时候支持ssl编译参数: #make TARGET=linux26 USE_OPENSSL=

nginx篇高级用法之基于TCP/UDP的四层调度

nginx 从1.9版本开始支持基于TCP/UDP的四层调度,在编译nginx时使用--with-stream开启该模块 支持TCP/UDP调度时,支持给所有的软件做调度器,例如:nfs smb ftp dns 等等... 在编译时: ./configure --with-http_ssl_module --with-stream 开启该模块 准备环境: 为了区分ftp1 和ftp2 他们各自放的共享内容不同 ftp1:192.168.2.100   /var/ftp/password ftp2