该系列文章只是本人的学习笔记,文章中的文字描述提取自《Linux鸟哥私房菜》《Linux运维之道》等书中的重点内容,部分内容是在培训Linux运维时总结的笔记,化繁为简能够在工作中快速复习掌握重点,并不代表个人立场,但转载请加出处,并注明参考文献。

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理,特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

编译安装HaProxy

1.安装编译环境和Haproxy所依赖的包文件.

[root@localhost ~]# yum install -y gcc autoconf automake
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Package gcc-4.8.5-36.el7.x86_64 already installed and latest version
Package autoconf-2.69-11.el7.noarch already installed and latest version
Package automake-1.13.4-3.el7.noarch already installed and latest version
Nothing to do

2.编译并安装Haproxy.

[root@localhost ~]# wget https://src.fedoraproject.org/repo/pkgs/haproxy/
[root@localhost ~]# mkdir -p /usr/local/haproxy
[root@localhost ~]# useradd -s /sbin/nologin -M haproxy [root@localhost ~]# tar -xzvf haproxy-1.8.8.tar.gz
[root@localhost ~]# cd haproxy-1.8.8/
[root@localhost ~]# make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy
[root@localhost ~]# make install PREFIX=/usr/local/haproxy
[root@localhost ~]# /usr/local/haproxy/sbin/haproxy -v

3.内核优化,开启NAT转发,追加写入以下两个选项即可.

[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #开启转发功能
net.ipv4.ip_nonlocal_bind = 1 #允许没监听IP时启动 [root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_nonlocal_bind
[root@localhost ~]# sysctl -p

4.由于Haproxy不会生成日志文件,下面自己添加haproxy日志路径.

[root@localhost ~]# sed -i 's/^#$ModLoad imudp/$ModLoad imudp/g' /etc/rsyslog.conf
[root@localhost ~]# sed -i 's/^#$UDPServerRun 514/$UDPServerRun 514/g' /etc/rsyslog.conf
[root@localhost ~]# echo 'local0.* /var/log/haproxy.log'>>/etc/rsyslog.conf
[root@localhost ~]# systemctl restart rsyslog

实现Web集群

1.手动生成配置文件,由于Haproxy不会生成配置文件,所有应手动创建(写入以下内容)

[root@localhost ~]# vim /usr/local/haproxy/haproxy.cfg

######################全局配置####################

global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
daemon
#nbproc 1 #进程数量
maxconn 4096 #最大连接数
user haproxy #运行用户
group haproxy #运行组
chroot /usr/local/haproxy #haproxy路径
pidfile /var/run/haproxy.pid #进程ID ###################默认配置####################### defaults
log global
mode http #默认模式{ tcp|http|health }
option httplog #日志类别,采用httplog
option dontlognull #不记录健康检查日志信息
retries 2 #2次连接失败不可用
option forwardfor #后端服务获得真实ip
option httpclose #请求完毕后主动关闭http通道
option abortonclose #服务器负载很高,自动结束比较久的链接
maxconn 4096 #最大连接数
timeout connect 5m #连接超时
timeout client 1m #客户端超时
timeout server 31m #服务器超时
timeout check 10s #心跳检测超时
balance roundrobin #负载均衡方式,轮询 ###################统计页面配置################### listen stats
bind 0.0.0.0:1080
mode http
option httplog
log 127.0.0.1 local0 err
stats refresh 30s
maxconn 10 #最大连接数
stats uri /admin #状态页面 http//ip:1080/admin访问
stats realm Haproxy\ Statistics
stats auth admin:admin #用户和密码:admin
stats hide-version #隐藏版本信息
stats admin if TRUE #设置手工启动/禁用 ##############设置haproxy 错误页面################# #errorfile 403 /opt/haproxy/errorfiles/403.http
#errorfile 500 /opt/haproxy/errorfiles/500.http
#errorfile 502 /opt/haproxy/errorfiles/502.http
errorloc 503 https://www.baidu.com/
#errorfile 504 /opt/errorfiles/504.http #################frontend前端配置################# frontend http_main #指定类型(http_main/mysql)
bind *:80 #本机侦听端口(80/3306)
option forwardfor
acl web hdr(host) -i elven.win #acl规则,-i忽略大小写,访问*就触发web规则
use_backend web1 if web acl web_kvm path_beg -i /kvm
use_backend kvm if web_kvm default_backend web1 #不满足则响应的默认页面 #################backend后端配置################# backend web1 #www1作用域
cookie SERVERID
balance roundrobin
option httpchk HEAD /index.html HTTP/1.0 server web1 192.168.1.10:80 weight 1 check inter 2000 rise 2 fall 3 #web1均衡(应添加内容)
server web2 192.168.1.11:80 weight 1 check inter 2000 rise 2 fall 3 #web2均衡(应添加内容) backend kvm
server kvm1 127.0.0.1:8000 #################################################

2.设置权限

[root@localhost ~]# chmod 755 -R /usr/local/haproxy
[root@localhost ~]# chown -R haproxy:haproxy /usr/local/haproxy

3.启动HaProxy,并设置开机自启动

[root@localhost ~]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
[root@localhost ~]# echo "/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg" >> /etc/profile

4.查看Web监控页面,和日志文件

[root@localhost ~]# elinks http://127.0.0.1:1080/admin
[root@localhost ~]# cat /var/log/haproxy.log

实现MariaDB集群

1.手动生成配置文件,由于Haproxy不会生成配置文件,所有应手动创建(写入以下内容)

[root@localhost ~]# vim /usr/local/haproxy/haproxy.cfg

global
maxconn 4096
daemon
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid
#debug
#quiet
user haproxy
group haproxy defaults
log global
mode http
option httplog
option dontlognull
log 127.0.0.1 local0
retries 3
option redispatch
maxconn 2000
#contimeout 5000
#clitimeout 50000
#srvtimeout 50000
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s listen admin_stats
bind *:1080
mode http
stats uri /admin
stats realm Global\ statistics
stats auth admin:admin
stats hide-version listen proxy-mysql #MySQL代理字段
bind *:3306
mode tcp
balance roundrobin
option tcplog
option mysql-check user haproxy #在mysql中创建无任何权限用户haproxy且无密码
server MySQL1 192.168.1.13:3306 check weight 1 maxconn 2000 #均衡主机1
server MySQL2 192.168.1.14:3306 check weight 1 maxconn 2000 #均衡主机2
option tcpka

2.进入从数据库,创建Mysql用户

MariaDB [(none)]> create user 'haproxy'@'%';
Query OK, 0 rows affected (0.10 sec) MariaDB [(none)]> create user 'haproxy'@'localhost';
Query OK, 0 rows affected (0.00 sec)

3.设置权限

[root@localhost ~]# chmod 755 -R /usr/local/haproxy
[root@localhost ~]# chown -R haproxy:haproxy /usr/local/haproxy

4.启动HaProxy,并设置开机自启动

[root@localhost ~]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
[root@localhost ~]# echo "/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg" >> /etc/profile

5.查看Web监控页面,和日志文件

[root@localhost ~]# elinks http://127.0.0.1:1080/admin
[root@localhost ~]# cat /var/log/haproxy.log

6.测试MySQL负载均衡

[root@localhost ~]# mysql -uroot -p -h 192.168.1.12

grant all privileges  on *.* to root@'%' identified by "123";

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wang |
+--------------------+
4 rows in set (0.18 sec) MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| rui |
+--------------------+
4 rows in set (0.01 sec)

实现Web动静分离

实际应用环境中,往往需要根据业务请求将相关不同请求跳转到指定的后端server,比如客户静态资源请求交给静态资源server处理,php请求交给php server处理,jsp请求交给tomcat处理,即业务上的应用请求分离,而haproxy完全可以利用acl匹配规则实现这一目的.

角色名称    ip信息
haproxy server eth0:172.51.96.233/24 && eth1:192.168.0.233/24
static server eth1:192.168.0.247/24
php server eth1:192.168.0.235/24
tomcat server eth1:192.168.0.238/24
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local3
maxconn 204800
chroot /usr/local/haproxy
user haproxy
group haproxy
daemon
nbproc 1
pidfile /var/run/haproxy.pid
stats socket /usr/local/haproxy/stats
description haproxy server
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
log global
mode http
maxconn 10000
option httplog
option httpclose
option dontlognull
option forwardfor except 127.0.0.0/8
retries 3
option redispatch
option abortonclose
balance roundrobin
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
#---------------------------------------------------------------------
# use listen setting the haproxy status for site
#---------------------------------------------------------------------
listen admin_status #设置haproxy监控状态
bind *:3030
mode http
log 127.0.0.1 local3 err
stats refresh 5s
stats uri /status #监控状态页面访问url
stats realm www.skeryp.com
stats auth admin:admin
stats hide-version
stats admin if TRUE
#---------------------------------------------------------------------
# main listen which proxys to the backends
#---------------------------------------------------------------------
listen www
bind *:80
maxconn 5000
mode http
log global
option httplog
option httpclose
option forwardfor
log global
default_backend default #设置默认访问页面
#定义当请求的内容是静态内容时,将请求转交给static server的acl规则
acl url_static path_beg -i /static /images /img /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js .html
acl host_static hdr_beg(host) -i img. video. download. ftp. imags. videos.
#定义当请求的内容是php内容时,将请求转交给php server的acl规则
acl url_php path_end -i .php
#定义当请求的内容是.jsp或.do内容时,将请求转交给tomcat server的acl规则
acl url_jsp path_end -i .jsp .do
#引用acl匹配规则
use_backend static_pool if url_static or host_static
use_backend php_pool if url_php
use_backend tomcat_pool if url_jsp
#定义后端backend server
backend static_pool
option httpchk GET /index.html
server static1 192.168.0.247:80 cookie id1 check inter 2000 rise 2 fall 3
backend php_pool
option httpchk GET /info.php
server php1 192.168.0.235:80 cookie id1 check inter 2000 rise 2 fall 3
backend tomcat_pool
option httpchk GET /index.jsp
server tomcat1 192.168.0.238:8086 cookie id2 check inter 2000 rise 2 fall 3 #<----------------------default site for listen and frontend------------------------------------>
backend default
mode http
option httpchk GET /index.html
server default 192.168.0.127:80 cookie id1 check inter 2000 rise 2 fall 3 maxconn 5000

HaProxy 负载均衡集群的更多相关文章

  1. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  2. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  3. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  4. LB 高可扩展性集群(负载均衡集群)

    一.什么是负载均衡 首先我们先介绍一下什么是负载均衡: 负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载, ...

  5. 负载均衡集群企业级应用实战—LVS

    一.负载均衡集群介绍 1.集群 ① 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技 ...

  6. 实现基于LVS负载均衡集群的电商网站架构

    背景 上一期我们搭建了小米网站,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法 ...

  7. LVS负载均衡集群

    回顾-Nginx反向代理型负载 负载均衡(load balance)集群,提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用 ...

  8. 负载均衡集群中的session解决方案【转】

    通常面临的问题 从用户端来解释,就是当一个用户第一次访问被负载均衡代理到后端服务器A并登录后,服务器A上保留了用户的登录信息:当用户再次发送请求时, 根据负载均衡策略可能被代理到后端不同的服务器,例如 ...

  9. 项目实战:负载均衡集群企业级应用实战—LVS详解

    目录 一.负载均衡集群介绍 二.lvs 的介绍 三.LVS负载均衡四种工作模式 1.NAT工作模式 2.DR工作模式 3.TUN工作模式 4.full-nat 工作模式 5.四者的区别 四.LVS i ...

随机推荐

  1. for 没有作用域的说话

    for i in range(10): passprint(i) 打印的结果就是9 打印的最后一次结果

  2. git从远程分支clone项目到本地,切换分支命令,其他常用命令

    1.在git命令窗口输入git clone git@139.129.217.217:sg/sgsq_cms.git 回车,即可克隆远程项目到本地.红色字体为远程分支的SSHkey,可以登录到gitli ...

  3. (转)Word插入图片显示不全怎么办

    https://jingyan.baidu.com/article/e73e26c0c0081c24adb6a73d.html 现在告诉大家解决办法. 方法一: A.单击选中图片,然后在“开始”选项卡 ...

  4. (vue.js)element ui 表单重置

    el-form需要接收一个model,并且需要配合el-form-item一起使用,并且在el-form-item上绑定prop属性,resetField方法才能好使. <el-form :mo ...

  5. Spark升级--在CDH-5.15.1中添加spark2

    一.环境准备 jdk-1.8+scala-2.11.X+python-2.7 二.创建目录 mkdir -p /opt/cloudera/csd 修改权限 chown cloudera-scm:clo ...

  6. Pushlet实现后台信息推送(一)

    Pushlet是使用较多的后台向前台推送信息的工具.前台订阅某个感兴趣的事件joinListen,触发后台的Pushlet的servlet,为该请求会话建立session,默认这个sessionID是 ...

  7. oday获取系统最高权限的代码

    import sys,sockettarget = sys.argv[1]shellcode = ("\x6a\x4f\x59\xd9\xee\xd9\x74\x24\xf4\x5b\x81 ...

  8. TZOJ 1689 Building A New Barn(求平面上有几个其它点求到n个点的曼哈顿距离最小)

    描述 After scrimping and saving for years, Farmer John has decided to build a new barn. He wants the b ...

  9. 【mac上安装&配置&使用git】

    转自:https://www.jianshu.com/p/7edb6b838a2e 目录 安装git 创建ssh key.配置git 提交本地项目到GitHub 一.安装Git MAC 上安装Git主 ...

  10. webapi 重复提交问题

    https://izen.live/Blog/info/13.html /// <summary> /// action方法过滤器 /// </summary> public ...