CentOS7.4—构建haproxy高可用群集

目录

第一部分 实验环境

第二部分 搭建配置web服务器

第三部分 安装配置haproxy服务器

第四部分 测试验证

第五部分 haproxy配置相关详细解释

第一部分 实验环境

一台harpoxy调度服务器

IP地址:192.168.80.10

需要软件:haproxy-1.7.10.tar

两台Web服务器(基于nginx)

IP地址:192.168.80.20(web01)

IP地址:192.168.80.30(web02)

需要软件:nginx-1.13.9.tar.gz

//三台服务器系统:linux—CentOS7.4

//软件:

Win7客户端一台(验证测试用)

IP地址:192.168.80.2

第二部分 搭建配置web服务器

第一步:配置web01

[root@web01 ~]# yum install -y \ //安装相关插件及编译安装工具

pcre-devel \

zlib-devel \

make \

gcc \

gcc-c++

[root@web01 ~]# useradd -M -s /sbin/logogin nginx //创建nginx程序用户

[root@web01 ~]# tar xzvf nginx-1.13.9.tar.gz

[root@web01 ~]# cd nginx-1.13.9

[root@web01 nginx-1.13.9]# ./configure \ //定义配置

--prefix=/usr/local/nginx \

--user=nginx \

--group=nginx

[root@web01 nginx-1.13.9]# make && make install //编译及安装

[root@web01 nginx-1.13.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //将nginx可执行程序放到系统环境中

[root@web01 nginx-1.13.9]# echo "

SERVER AA

" > /usr/local/nginx/html/index.html

//修改默认主页显示内容(便于后面测试)

[root@web01 nginx-1.13.9]# nginx //启动nginx服务

[root@web01 nginx-1.13.9]# netstat -anpt | grep nginx

Win7访问http://192.168.80.10

第二步:配置web02(与web01一样配置)

[root@web02 ~]# yum install -y \

pcre-devel \

zlib-devel \

gcc \

gcc-c++ \

make

[root@web02 ~]# useradd -M -s /sbin/nologin nginx

[root@web02 ~]# tar xzvf nginx-1.13.9.tar.gz

[root@web02 ~]# cd nginx-1.13.9

[root@web02 nginx-1.13.9]# ./configure \

--prefix=/usr/local/nginx \

--user=nginx \

--group=nginx

[root@web02 nginx-1.13.9]# make && make install

[root@web02 nginx-1.13.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

[root@web02 nginx-1.13.9]# echo "

SERVER BB

" > /usr/local/nginx/html/index.html

[root@web02 nginx-1.13.9]# nginx

[root@web02 nginx-1.13.9]# netstat -anpt | grep nginx

Win7访问http://192.168.80.20

第三部分 安装配置haproxy服务器

[root@haproxy ~]# yum install -y \ //安装插件及编译工具

pcre-devel \

bzip2-devel \

gcc \

gcc-c++ \

make

[root@haproxy ~]# tar xzvf haproxy-1.7.10.tar.gz

[root@haproxy ~]# cd haproxy-1.7.10

[root@haproxy haproxy-1.7.10]# make TARGET=linux26 //标识64位系统

[root@haproxy haproxy-1.7.10]# make install

[root@haproxy haproxy-1.7.10]# mkdir /etc/haproxy

[root@haproxy haproxy-1.7.10]# groupadd haproxy

[root@haproxy haproxy-1.7.10]# useradd -s /sbin/nologin -M -g haproxy haproxy //添加haproxy运行haproxy账号并设置及属主与属组

[root@haproxy haproxy-1.7.10]# vi /etc/haproxy/haproxy.cfg //创建并编辑haproxy配置文件

--------------全局配置----------------

global

log 127.0.0.1 local2

#chroot /usr/local/haproxy-1.7.10

pidfile /var/run/haproxy.pid

maxconn 4000 //最大连接数

user haproxy

group haproxy

daemon //创建1个进程进入deamon模式运行,此参数要求将运行模式设置为daemon

#---------------------------------------------------------------------

common defaults that all the 'listen' and 'backend' sections will

use if not designated in their block

#---------------------------------------------------------------------

defaults

mode http //默认模式,tcp是四层,http是七层,health只会返回OK,若是混合模式则mode不需要设置

log global //采用全局定义的日志

option dontlognull //不记录健康检查的日志信息

option httpclose //每次请求完毕后主动关闭http通道

option httplog //日志类别http日志格式;如果是混合模式,此处还需要加上tcpclog

#option forwardfor //如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip

option redispatch //serverId对应的服务器挂掉后,强制定向到其他健康的服务器

timeout connect 10s //超时连接10s

timeout client 10s //客户端超时连接10s

timeout server 10s //服务器连接超时

maxconn 60000 //最大连接数

retries 3 //3次连接失败就认为服务不可用

--------------统计页面配置------------------

listen admin_stats

bind 0.0.0.0:8089 //监听端口

stats enable //启用监听端口

mode http

log global

stats uri /stats //统计页面url

stats realm Haproxy\ Statistics //统计页面密码框上提示文本

stats auth admin:admin //统计页面用户名和密码设置

#stats hide-version //隐藏统计页面上HAProxy的版本信息

stats admin if TRUE //当通过认证才可管理

stats refresh 30s //页面自动刷新时间30s

---------------web设置-----------------------

listen webcluster

bind 0.0.0.0:80

mode http

option httpchk GET /index.html

log global

maxconn 3000

balance roundrobin

server web01 192.168.80.10:80 check inter 2000 fall 3

server web02 192.168.80.20:80 check inter 2000 fall 3

保存退出

[root@haproxy haproxy-1.7.10]# cp examples/haproxy.init /etc/init.d/haproxy

[root@haproxy haproxy-1.7.10]# chmod 755 /etc/init.d/haproxy

[root@haproxy haproxy-1.7.10]# chkconfig --add haproxy

[root@haproxy haproxy-1.7.10]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

[root@haproxy haproxy-1.7.10]# service haproxy start

[root@haproxy haproxy-1.7.10]# netstat -anpt | grep haproxy

[root@haproxy haproxy-1.7.10]# systemctl stop firewalld

[root@haproxy haproxy-1.7.10]# setenforce 0

第四部分 验证测试

Win7访问调度器地址http://192.168.80.30

等待一会,再次访问

//验证成功

第五部分 haproxy配置相关详细解释

#全局配置, 用于设定义全局参数, 属于进程级的配置, 通常与操作系统配置有关.

global

#定义全局日志, 配置在本地, 通过local0 输出, 默认是info级别,可配置两条

log 127.0.0.1 local0 warning

#定义日志级别【error warning info debug】

#log 127.0.0.1 local1 info

#运行路径

chroot /usr/local/haproxy

#PID 文件存放路径

pidfile /var/run/haproxy.pid

#设置每haproxy进程的最大并发连接数, 其等同于命令行选项“-n”; “ulimit -n”自动计算的结果参照此参数设定.

maxconn 4096

#运行haproxy 用户, 或者使用关键字uid

user haproxy

#运行haproxy 用户组, 或者使用关键字gid

group haproxy

#后台运行haproxy

daemon

#设置启动的haproxy进程数量, 只能用于守护进程模式的haproxy;

#默认只启动一个进程, 鉴于调试困难等多方面的原因, 一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式.

nbproc 1

#设置每进程所能够打开的最大文件描述符数目, 默认情况其会自动进行计算, 因此不推荐修改此选项.

#ulimit-n 819200

#调试级别, 一般只在开启单进程时调试, 且生产环境禁用.

#debug

#haproxy启动后不会显示任何相关信息, 这与在命令行启动haproxy时加上参数“-q”相同

#quiet

#定义统计信息保存位置

stats socket /usr/local/haproxy/stats

#默认配置

defaults

#默认的模式【tcp:4层; http:7层; health:只返回OK】

mode http

#继承全局的日志定义输出

log global

#日志类别, httplog

#option httplog

#如果后端服务器需要记录客户端真实ip, 需要在HTTP请求中添加”X-Forwarded-For”字段;

#但haproxy自身的健康检测机制访问后端服务器时, 不应将记录访问日志,可用except来排除127.0.0.0,即haproxy本身.

#option forwardfor except 127.0.0.0/8

option forwardfor

#开启http协议中服务器端关闭功能, 每个请求完毕后主动关闭http通道, 使得支持长连接,使得会话可以被重用,使得每一个日志记录都会被记录.

option httpclose

#如果产生了一个空连接,那这个空连接的日志将不会记录.

option dontlognull

#当与后端服务器的会话失败(服务器故障或其他原因)时, 把会话重新分发到其他健康的服务器上; 当故障服务器恢复时, 会话又被定向到已恢复的服务器上;

#还可以用”retries”关键字来设定在判定会话失败时的尝试连接的次数

option redispatch

retries 3

#当haproxy负载很高时, 自动结束掉当前队列处理比较久的链接.

option abortonclose

#默认http请求超时时间

timeout http-request 10s

#默认队列超时时间, 后端服务器在高负载时, 会将haproxy发来的请求放进一个队列中.

timeout queue 1m

#haproxy与后端服务器连接超时时间.

timeout connect 5s

#客户端与haproxy连接后, 数据传输完毕, 不再有数据传输, 即非活动连接的超时时间.

timeout client 1m

#haproxy与后端服务器非活动连接的超时时间.

timeout server 1m

#默认新的http请求连接建立的超时时间,时间较短时可以尽快释放出资源,节约资源.

timeout http-keep-alive 10s

#心跳检测超时时间

timeout check 10s

#最大并发连接数

maxconn 2000

#设置默认的负载均衡方式

#balance source

#balnace leastconn

#统计页面配置, frontend和backend的组合体, 监控组的名称可按需自定义

listen admin_status

#配置监控运行模式

mode http

#配置统计页面访问端口

bind 0.0.0.0:1080

#统计页面默认最大连接数

maxconn 10

#http日志格式

option httplog

#开启统计

stats enable

#隐藏统计页面上的haproxy版本信息

stats hide-version

#监控页面自动刷新时间

stats refresh 30s

#统计页面访问url

stats uri /stats

#统计页面密码框提示文本

stats realm mCloud\ Haproxy

#监控页面的用户和密码:admin, 可设置多个用户名

stats auth admin:admin

#手工启动/禁用后端服务器, 可通过web管理节点

stats admin if TRUE

#设置haproxy错误页面

errorfile 400 /usr/local/haproxy/errorfiles/400.http

errorfile 403 /usr/local/haproxy/errorfiles/403.http

errorfile 408 /usr/local/haproxy/errorfiles/408.http

errorfile 500 /usr/local/haproxy/errorfiles/500.http

errorfile 502 /usr/local/haproxy/errorfiles/502.http

errorfile 503 /usr/local/haproxy/errorfiles/503.http

errorfile 504 /usr/local/haproxy/errorfiles/504.http

#监控haproxy后端服务器的监控状态

listen site_status

bind 0.0.0.0:1081 #监听端口

mode http #http的7层模式

log 127.0.0.1 local2 err #[err warning info debug]

monitor-uri /site_status #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回503

acl site_dead nbsrv(php_server) lt 1 #定义网站down时的策略当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true

acl site_dead nbsrv(html_server) lt 1

acl site_dead nbsrv(backend_default) lt 1

monitor fail if site_dead #当满足策略的时候返回503,网上文档说的是500,实际测试为503

monitor-net 192.168.4.171/32 #来自192.168.4.152的日志信息不会被记录和转发

monitor-net 192.168.4.172/32

#frontend, 名字自定义

frontend HAproxy_Cluster

#定义前端监听端口, 建议采用bind :80的形式,否则做集群高可用的时候有问题,vip切换到其余机器就不能访问.

bind 0.0.0.0:80

#acl后面是规则名称,当请求的url末尾是以.php结尾时,匹配触发php_web规则,以下两种写法均可.

#当请求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif结尾时,匹配并触发static_web规则.

#acl static_web path_end .gif .png .jpg .css .js .jpeg

#acl static_web url_reg /.(css|jpg|png|jpeg|js|gif)$

#-i为忽略大小写,当被请求的是以www.test.com开头的主机时,匹配并触发dns_name规则.

acl html_web hdr_beg(host) -i www.haproxytest.com

#acl html_web hdr_beg(host) 10.11.4.152

#当客户端的IP是x.x.x.x时,匹配并触发src_ip规则.

#acl src_ip src x.x.x.x

#如果匹配acl规则php_web,将请求转交到php_server组处理;如果匹配acl规则html_web,将请求转交到html_server组处理.

use_backend php_server if php_web

use_backend html_server if html_web

#如果以上规则都不匹配时,将请求转交到default_backend组处理.

default_backend backend_default

#backend后端配置, 配置php_server组与html_server组

backend php_server

#定义负载均衡方式为roundrobin方式, 即基于权重进行轮询调度的算法, 在服务器性能分布较均匀情况下推荐.

#另有如下几种负载均衡方式:

#-- static-rr: 也是基于权重进行轮转调度, 但属于静态方法, 运行时调整后端机组权重不会使用新的权重;

#-- source: 基于请求源IP进行hash运算匹配后端服务器组;

#-- leastconn: 不适合会话较短的环境, 如基于http的应用;

#-- uri: 对整个URI进行hash运算;

#-- uri_param: 对URI中的参数进行转发;

#-- hdr():根据http头进行转发, 无该头部则转为使用roundrobin.

balance roundrobin

mode http

#允许插入serverid到cookie中,serverid后面可定义

cookie SERVERID

#心跳检测方式为检测后端服务器index.html文件,还有其他方式

option httpchk GET /index.html

#后端服务器定义, maxconn 1024表示该服务器的最大连接数, cookie 1表示serverid为1, weight代表权重(默认1,最大为265,0则表示不参与负载均衡),

#check inter 1500是检测心跳频率, rise 2是2次正确认为服务器可用, fall 3是3次失败认为服务器不可用.

server php1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

backend html_server

balance source

mode http

server html1 192.168.4.172:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

backend backend_default

balance source

mode http

server default1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

linux7自带haprox版本,CentOS7.4—构建最新版haproxy高可用群集相关推荐

  1. 如何快速构建服务发现的高可用能力

    作者:十眠 背景 注册中心作为承担服务注册发现的核心组件,是微服务架构中必不可少的一环.在 CAP 的模型中,注册中心可以牺牲一点点数据一致性(C),即同一时刻每一个节点拿到的服务地址允许短暂的不一致 ...

  2. heartbeat+drbd+mysql构建mysql高可用群集

    heartbeat+drbd+mysql构建mysql高可用群集 1. 试验环境: 操作系统:Red Hat Enterprise Linux 5.4 所需的软件包: mysql-5.5.22.tar ...

  3. 构建在线教育弹性高可用视频处理架构实战

    简介: 对于负责建设视频处理系统的技术团队而言,这样的业务场景就留给了他们一系列的挑战. 前言 近些年,在线教育行业飞速发展,为整个社会的知识传播提供了前所未有的便利性.通过多种形式的在线教育平台,学 ...

  4. 基于heartbeatV2版本的ha-gui工具对httpd做高可用集群(1)

    一.简述 Heartbeat通过插件技术实现了集群间的串口.多播.广播和组播通信,在配置的时候可以根据通信媒介选择采用的通信协议,heartbeat启动的时候检查这些媒介是否存在,如果存在则加载相应的 ...

  5. 构建MFS+Keepalived双机高可用热备方案`

    一.简介 MooseFS(即Moose File System,简称MFS)是一个具有容错性的网络分布式文件系统,它将数据分散存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本,对于访 ...

  6. CentOS7.5搭建Heartbeat+DRBD+NFS高可用共享存储

    在一般的网络架构的设计中,如果前端web做了负载均衡,后端存储都会用到共享存储,在并发不大.数据量不大的情况下,nfs是一个不错共享存储方案,但是nfs存在单点故障的问题,要想保证nfs的高可用,就要 ...

  7. 带哨兵节点的链_深入学习Redis高可用架构:哨兵原理及实践

    原标题:深入学习Redis高可用架构:哨兵原理及实践 " 在上篇文章<深入学习 Redis 高可用的基石:主从复制>中曾提到,Redis 主从复制的作用有数据热备.负载均衡.故障 ...

  8. ansible+heartbeatV2构建高可用群集

    主机的ip地址分配 hostname IP address  role  master 192.168.1.250/24 ansible node2.mictiger.com 192.168.1.12 ...

  9. CentOS7下LVS+Keepalived实现高性能高可用负载均衡

    一.规划 1 2 3 4 5 6 7 8  对外VIP:10.10.10.10    对内VIP:192.168.10.10 LVS_MASTER:10.10.10.28(eth0)          ...

最新文章

  1. 帧中继简单总结(修改)
  2. Spring定时器的使用-多实例下定时重建索引
  3. Unity3d截图两种方式
  4. nyoj-469--擅长排列的小明 II
  5. HDU1524(博弈--有向无环图SG函数)
  6. scala学习手记26 - 重用函数值
  7. linux mysql odbc驱动安装_mysql odb驱动_Mysql的odbc driver安装配置(Linux)
  8. for each java_Java 实例 - for 和 foreach循环使用
  9. STL 源代码分析 算法 stl_algo.h -- includes
  10. 发电机机房设计规范_民用建筑变电所等机房设置的几点建议
  11. 通过脚本下派WsusAgent3.0.exe
  12. 多个值合并成一个字段oracle排序,Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)...
  13. 【Gson】【1】Gson使用简介
  14. java单链表上的选择排序_《Java数据结构和算法》简单排序选择排序
  15. 网站添加Google翻译代码
  16. 计算机专业提升计划范文,民航个人提升计划范文个人职业规划方案.doc
  17. 最新公路测量计算机,公路施工测量坐标计算系统
  18. php 公众号发表文章,微信公众号如何发布文章(一套完整的流程)
  19. Linux企业运维篇——git+gitlab+jenkins+docker构成持续集成环境
  20. EXCEL中如何将日期格式转换为文本格式

热门文章

  1. 有的时候不评价别人其实挺难的
  2. SAP UI5 应用开发教程之六十九 - 如何从 SAP UI5 Not Found 页面跳转回到正常的应用页面
  3. 使用 SAP Business Application Studio 创建 Fiori Elements 应用显示 OData 服务的数据
  4. 什么是 SAP Commerce yForms
  5. 在 Excel 内使用 ODBC 消费 SAP ABAP CDS view
  6. 微前端概述(Micro Frontends) 以及相比单体应用,微前端能带来什么好处
  7. 通过 Route 配置的例子,学习SAP Cloud for Customer 的scoping操作
  8. Chrome开发者工具使用console.trace的一个小技巧
  9. SAP Spartacus产品页面的normalizer
  10. Angular的大小写风格规范