Haproxy+Percona-XtraDB-Cluster 集群

Haproxy介绍

  • Haproxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
  • Haproxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
  • Haproxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救
  • 了很多站点,这个优点也是其它负载均衡器没有的。
  • Haproxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。

性能:HAProxy借助于OS上几种常见的技术来实现性能的最大化

  • 1,单进程、事件驱动模型显著降低了上下文切换的开销及内存占用。
  • 2,事件检查器(event checker)允许其在高并发连接中对任何连接的任何事件实现即时探测。
  • 3,在任何可用的情况下,单缓冲(single buffering)机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存带宽;
  • 4,借助于Linux 2.6 (>= 2.6.27.19)上的splice()系统调用,HAProxy可以实现零复制转发(Zero-copy forwarding),在Linux 3.5及以上的OS中还可以实现零复制启动(zero-starting);
  • 5,内存分配器在固定大小的内存池中可实现即时内存分配,这能够显著减少创建一个会话的时长;
  • 6,树型存储:侧重于使用作者多年前开发的弹性二叉树,实现了以O(log(N))的低开销来保持计时器命令、保持运行队列命令及管理轮询及最少连接队列;
  • 7,优化的HTTP首部分析:优化的首部分析功能避免了在HTTP首部分析过程中重读任何内存区域;
  • 8,精心地降低了昂贵的系统调用,大部分工作都在用户空间完成,如时间读取、缓冲聚合及文件描述符的启用和禁用等;
  • 所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚至于在非常高的负载场景中,5%的用户空间占用率和95%的系统空间占用率也是非常普遍的现象,这意味着HAProxy进程消耗比系统空间消耗低20倍以上。因此,对OS进行性能调优是非常重要的。即使用户空间的占用率提高一倍,其CPU占用率也仅为10%,这也解释了为何7层处理对性能影响有限这一现象。由此,在高端系统上HAProxy的7层性能可轻易超过硬件负载均衡设备。
  • 在生产环境中,在7层处理上使用HAProxy作为昂贵的高端硬件负载均衡设备故障故障时的紧急解决方案也时长可见。硬件负载均衡设备在“报文”级别处理请求,这在支持跨报文请求(request across multiple packets)有着较高的难度,并且它们不缓冲任何数据,因此有着较长的响应时间。对应地,软件负载均衡设备使用TCP缓冲,可建立极长的请求,且有着较大的响应时间。
  • HAProxy目前主要有三个版本: 1.3 , 1.4 ,1.5,CentOS6.6 自带的RPM包为 1.5 的。

1.1 搭建Haproy

[root@haproxy ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[root@haproxy ~]# systemctl stop firewalld
[root@haproxy ~]# getenforce 
Disabled
[root@haproxy ~]# yum install -y haproxy
[root@haproxy ~]# haproxy -v
HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>

 

 1.2  修改/etc/haproxy/haproxy.cfg

global   # 全局参数的设置
log 127.0.0.1 local0 info
# log语法:log <address_1>[max_level_1] # 全局的日志配置,使用log关键字,指定使用127.0.0.1上的syslog服务中的local0日志设备,记录日志等级为info的日志
user haproxy
group haproxy
# 设置运行haproxy的用户和组,也可使用uid,gid关键字替代之
daemon
# 以守护进程的方式运行
nbproc 16
# 设置haproxy启动时的进程数,根据官方文档的解释,我将其理解为:该值的设置应该和服务器的CPU核心数一致,即常见的2颗8核心CPU的服务器,即共有16核心,则可以将其值设置为:<=16 ,创建多个进程数,可以减少每个进程的任务队列,但是过多的进程数也可能会导致进程的崩溃。这里我设置为16
maxconn 4096
# 定义每个haproxy进程的最大连接数 ,由于每个连接包括一个客户端和一个服务器端,所以单个进程的TCP会话最大数目将是该值的两倍。
#ulimit -n 65536
# 设置最大打开的文件描述符数,在1.4的官方文档中提示,该值会自动计算,所以不建议进行设置
pidfile /var/run/haproxy.pid
# 定义haproxy的pid 
defaults # 默认部分的定义
mode http
# mode语法:mode {http|tcp|health} 。http是七层模式,tcp是四层模式,health是健康检测,返回OK
log 127.0.0.1 local3 err
# 使用127.0.0.1上的syslog服务的local3设备记录错误信息
retries 3
# 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用
option httplog
# 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求的,只记录“时间[Jan 5 13:23:46] 日志服务器[127.0.0.1] 实例名已经pid[haproxy[25218]] 信息[Proxy http_80_in stopped.]”,日志格式很简单。
option redispatch
# 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。
option abortonclose
# 当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option dontlognull
# 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来
option httpclose
# 这个参数我是这样理解的:使用该参数,每处理完一个request时,haproxy都会去检查http头中的Connection的值,如果该值不是close,haproxy将会将其删除,如果该值为空将会添加为:Connection: close。使每个客户端和服务器端在完成一次传输后都会主动关闭TCP连接。与该参数类似的另外一个参数是“option forceclose”,该参数的作用是强制关闭对外的服务通道,因为有的服务器端收到Connection: close时,也不会自动关闭TCP连接,如果客户端也不关闭,连接就会一直处于打开,直到超时。
contimeout 5000
# 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,新版本的haproxy使用timeout connect替代,该参数向后兼容
clitimeout 3000
# 设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒,新版本haproxy使用timeout client替代。该参数向后兼容
srvtimeout 3000
# 设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,新版本haproxy使用timeout server替代。该参数向后兼容

listen status # 定义一个名为status的部分
bind 0.0.0.0:1080
# 定义监听的套接字
mode http
# 定义为HTTP模式
log global
# 继承global中log的定义
stats refresh 30s
# stats是haproxy的一个统计页面的套接字,该参数设置统计页面的刷新间隔为30s
stats uri /admin?stats
# 设置统计页面的uri为/admin?stats
stats realm Private lands
# 设置统计页面认证时的提示内容
stats auth admin:password
# 设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可
stats hide-version
# 隐藏统计页面上的haproxy版本信息

frontend http_80_in # 定义一个名为http_80_in的前端部分
bind 0.0.0.0:80
# http_80_in定义前端部分监听的套接字
mode http
# 定义为HTTP模式
log global
# 继承global中log的定义
option forwardfor
# 启用X-Forwarded-For,在requests头部插入客户端IP发送给后端的server,使后端server获取到客户端的真实IP
acl static_down nbsrv(static_server) lt 1
# 定义一个名叫static_down的acl,当backend static_sever中存活机器数小于1时会被匹配到
acl php_web url_reg /*.php$
#acl php_web path_end .php
# 定义一个名叫php_web的acl,当请求的url末尾是以.php结尾的,将会被匹配到,上面两种写法任选其一
acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$
#acl static_web path_end .gif .png .jpg .css .js .jpeg
# 定义一个名叫static_web的acl,当请求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif结尾的,将会被匹配到,上面两种写法任选其一
use_backend php_server if static_down
# 如果满足策略static_down时,就将请求交予backend php_server
use_backend php_server if php_web
# 如果满足策略php_web时,就将请求交予backend php_server
use_backend static_server if static_web
# 如果满足策略static_web时,就将请求交予backend static_server

backend php_server #定义一个名为php_server的后端部分
mode http
# 设置为http模式
balance source
# 设置haproxy的调度算法为源地址hash
cookie SERVERID
# 允许向cookie插入SERVERID,每台服务器的SERVERID可在下面使用cookie关键字定义
option httpchk GET /test/index.php
# 开启对后端服务器的健康检测,通过GET /test/index.php来判断后端服务器的健康情况
server php_server_1 10.12.25.68:80 cookie 1 check inter 2000 rise 3 fall 3 weight 2
server php_server_2 10.12.25.72:80 cookie 2 check inter 2000 rise 3 fall 3 weight 1
server php_server_bak 10.12.25.79:80 cookie 3 check inter 1500 rise 3 fall 3 backup
# server语法:server [:port] [param*] # 使用server关键字来设置后端服务器;为后端服务器所设置的内部名称[php_server_1],该名称将会呈现在日志或警报中、后端服务器的IP地址,支持端口映射[10.12.25.68:80]、指定该服务器的SERVERID为1[cookie 1]、接受健康监测[check]、监测的间隔时长,单位毫秒[inter 2000]、监测正常多少次后被认为后端服务器是可用的[rise 3]、监测失败多少次后被认为后端服务器是不可用的[fall 3]、分发的权重[weight 2]、最为备份用的后端服务器,当正常的服务器全部都宕机后,才会启用备份服务器[backup]

backend static_server
mode http
option httpchk GET /test/index.html
server static_server_1 10.12.25.83:80 cookie 3 check inter 2000 rise 3 fall 3

 

转载于:https://www.cnblogs.com/so-cool/p/8194526.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac安装和卸载mysql_基于centos7系统卸载rpm安装的mysql

概述前面有介绍了怎么用rpm包去安装mysql&#xff0c;那么如果我们要卸载的话可以怎么弄呢&#xff1f;下面介绍下卸载mysql的流程。环境&#xff1a;centos7.31、 检查是否安装了MySQL组件。# rpm -qa | grep -i mysql2、卸载前关闭MySQL服务systemctl stop mysqld3、收集MySQ…

(转)Linux服务器磁盘空间占满问题

转自&#xff1a;https://www.cnblogs.com/cindy-cindy/p/6796684.html 下面我们一起来看一篇关于Linux服务器磁盘占满问题解决&#xff08;/dev/sda3 满了&#xff09;&#xff0c;希望碰到此类问题的人能带来帮助。今天下班某电商技术部leader发现个问题&#xff0c;说他们服…

计算机组成原理2套题,计算机组成原理试卷及答案2套.doc

计算机组成原理试卷A一、 选择题(每小题2分&#xff0c;共30分)1&#xff0e; 下列数中最小的数是______。A.(100100)2 B.(43)8 C.(110010)BCD D.(25)162&#xff0e; 计算机经历了从器件角度划分的四代发展历程&#xff0c;但从系统结构上来看&#xff0c;至今绝大多数计算机仍…

改变您一生的90/10原理

了解并运用由Stephen Covey发现的90/10原理&#xff0c;您的一生或许会有所改变&#xff0c;至少&#xff0c;您对待事情的态度会与以前不一样了。 什么是90/10原理&#xff1f;即在您的一生中&#xff0c;只有10%的事情您无能为力&#xff0c;而90%的事情都在您的把握之中。 我…

透明网桥

所谓“透明网桥”是指&#xff0c;它对任何数据站都完全透明&#xff0c;用户感觉不到它的存在&#xff0c;也无法对网桥寻址。所有的路由判决全部由网桥自己确定。当网桥连入网络时&#xff0c;它能自动初始化并对自身进行配置。 透明网桥以混杂方式工作&#xff0c;它接收与…

vue用阿里云oss上传图片使用分片上传只能上传100kb以内的解决办法

首先&#xff0c;vue和阿里云oss上传图片结合参考了 这位朋友的 https://www.jianshu.com/p/645f63745abd 文章&#xff0c;成功的解决了我用阿里云oss上传图片前的一头雾水。 该大神文章里有写github地址&#xff0c;里面的2.0分支采用vue2.0实现&#xff0c;只不过这个上传图…

iphone11右上角信号显示_苹果iOS11信号强度的标志变了意味着什么?

原标题&#xff1a;苹果iOS11信号强度的标志变了意味着什么?在iOS 11测试版中&#xff0c;苹果将状态栏中表示 LTE信号强度的5个小圆点换成了4 个竖状条。从 iOS 7 到 iOS 10苹果就一直使用小圆点标志信号强度设计&#xff0c;而这次的改变也意味着范围的变化。这到底是什么意…

计算机二级access选择题技巧,计算机二级access考试注意事项及解题技巧策略

计算机二级access考试注意事项及解题技巧策略2017年计算机考试将至&#xff0c;今天yjbys小编为大家带来了计算机二级access考试注意事项及解题技巧哦!快点行动起来吧~考试注意事项1.考试时间&#xff1a;120分钟(即2小时)2.考试类型&#xff1a;上机操作 (总分100分&#xff0…

【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

题目描述 求一张有向图的强连通生成子图的数目对 $10^97$ 取模的结果。 题解 状压dp容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目&#xff0c;容易想到使用总方案数 $2^{sum[i]}$ 减去不为强连通图的方案数得到强连通图的方案数&#xff0c;其中 $sum[i]$ 表示点集 $…

交换机实现虚拟局域网

但由于它是逻辑地而不是物理地划分&#xff0c;所以同一个 VLAN内的各个工作站无须被放置在同一个物理空间里&#xff0c;即这些工作站不一定属于同一个物理LAN网段。一个VLAN内部的广播和单播流量都不会转发到其他 VLAN中&#xff0c;即使是两台计算机有着同样的网段&#xff…

产品与项目

产品和项目到底有什么区别&#xff0c;扩展开说&#xff0c;做产品和做项目最大的不同在哪里&#xff1f;产品经理和项目经理&#xff08;都是PM&#xff0c;有时候自己都搞不清说的哪一个&#xff09;职责的不同在哪里&#xff1f;一直困扰了我很长时间&#xff0c;直到2007年…

python斐波那契前20递归_算法python实现经典递归问题(汉诺塔, 斐波那契数列,阶乘)...

经典递归汉诺塔问题背景故事传说印度某间寺院有三根柱子&#xff0c;上串64个金盘。寺院里的僧侣依照一个古老的预言&#xff0c;以上述规则移动这些盘子&#xff1b;预言说当这些盘子移动完毕&#xff0c;世界就会灭亡。这个传说叫做梵天寺之塔问题(Tower of Brahma puzzle)。…

Hello This Cruel World!

第一天&#xff0c;已经成为了半年的OIer&#xff0c;仍然是个蒟蒻&#xff0c;希望以后能够变强&#xff01; 在OJ和博客的常用网名&#xff1a; TimeTraveller ->洛谷 VictoryCzt ->csdn,cnblog等 Czt Czttt czt ->OJ CrazyTea CrazyTeaMajor 游戏&#xff0c;QQ…

计算机系统的部件名称作用,电脑配件与每个配件作用详细完整的解释

电脑各配件的具体功能和特性说起来很长&#xff0c;先简单介绍一下。一台个人台式电脑的主要配件有&#xff1a;1.主板&#xff1a;也叫母板&#xff0c;是连接CPU、内存、AGP等电脑配件的最主要最基本的载体&#xff0c;主板的结构类型决定电脑各配件的结构和类型&#xff0c;…

信道效率以及信道的吞吐率

信道的效率即为信道的利用率&#xff0c;是指发送方在一个发送周期的时间内&#xff0c;有效的发送数据所需要的时间占整个发送周期的比率。 例如,发送方从开始发送数据&#xff0c;到收到第一个确认帧为止&#xff0c;称为一个周期&#xff0c;设为T。发送方在这个周期内共发…

jquery兄弟标签_js jquery获取当前元素的兄弟级 上一个 下一个元素

var chils s.childNodes; //得到s的全部子节点var pars.parentNode; //得到s的父节点var nss.nextSbiling; //获得s的下一个兄弟节点var pss.previousSbiling; //得到s的上一个兄弟节点var fcs.firstChild; //获得s的第一个子节点var lcs.lastChile; //获得s的最后一…

将本地代码备份到Github public repository

1. 在本地代码所在的文件夹中初始化&#xff0c;即打开powershell&#xff0c;输入下面命令 git init 此时本地文件夹中会出现一个.git的隐藏文件夹。 2. 然后将当前的文档commit&#xff0c;在本地commit之前可以先加一个.gitignore文件&#xff0c;忽略一些不必要的文件&…

推辞掉得不是你的工作,而是你的未来

在民营企业&#xff0c;年轻人无疑是主力&#xff0c;为什么年纪相仿&#xff0c;他是经理&#xff0c;我却是职员&#xff1f;相信对此愤恨不平的大有人在&#xff01;说什么人家后台硬、或者别人嘴巴甜&#xff0c;恨自己生不逢时、怨自己出身平凡的居多&#xff0c;相反检讨…

路考计算机系统评判,科目三智能考试有效解决路考舞弊行为

科目三智能考试是指通过在考试车辆上加装计算机、定位系统、传感器、音视频采集等设备实现对考试项目的自动化评判&#xff0c;代替原来人工评判&#xff0c;且记录考试过程的音视频资料&#xff0c;提供考试过程回放等相关功能。科目三自动化考试减少了人为因素对考试过程的干…