本文共 4149 字,大约阅读时间需要 13 分钟。
**之前讲了haproxy基本操作
回顾:haproxy是一个高性能的 tcp/http reverse(相反) proxy haproxy的配置文件分为两大段,haproxy.cfg global 全局 proxies 代理配置段,4部分组成 提供默认配置defaults(为前端,后端或listen提供默认配置) frontend 类似nginx server 定义如何接受或处理客户端请求,(面向客户端连接建立以后,可以向后端服务器进行转发,这种转发只能成模拟客户端协议转发或者是简单的建立一个信道,这取决于7层还是4层) listen backend 后端服务器为组,定义出调度方法的配置,因为是backend,(listen也有这个功能) ** **global当中具体有一些指令,有些非常关键的参数,其中由log,maxconn (haproxy支持的最大连接数,和进程本身相关,多数工作在单进程模式下) 回顾下代理配置段的常见参数 proxies:bind(用来绑定监听地址端口),balance(调度算法),default_backend 默认后端 server(可以定义backend后端主机),hash-type balance调度算法有哪些 roundrobin动态 static-rr静态 leastconn最少链接 first source uri hdr(可以指定自己的HEADER) url_param ** 在后端服务器还可以使用server来定义(server依然是配置参数的keywords,配置指令),后端服务器, server关键词+name唯一标识,这个标识会记录到日志当中,因此至少是当前配置段唯一的标识 address后端服务器主机地址 port端口(如果省略则可以直接跟frontend中监听端口一致) param可以设定服务器的工作特性,如果多个server都可以使用某个默认,可以使用default-server 如果想把每个服务器的setting设定好,可以放到default-server上 对于服务器怎么做检测也可以在default-server后面直接定义,其他server继承default-server的值就可以了 对整个haproxy来讲,server的一个参数是有自己专门的配置段的 对主要参数了解即可, maxconn 当前一个server的最大并发连接数,每个服务器上线在进行测试以后就设定一个合理的值,不要使用默认的,万一这个服务器被分发过来太多请求的话,服务器忙不过来,会每个请求都无法处理 backlog,达到了最大连接数,后面就要跟上排队的长度,超出长度拒绝响应 backup (nginx可以把自己设置成一个sorry server),这个服务器未必只能sorry server ,也可以提供一些降级的服务 超出服务器并发链接请求,可能导致服务器健康检测失败 所以可以做两个服务器集群,一个是正常提供服务的集群,一旦这个集群的服务都无法响应时,可以用另外一个备用集群来处理,而这个备用的内容,不是say sorry,而是仅仅用静态的方式,来给用户呈现一个页面,用户可以点击页面的某些链接来打开其中的描述,只能看,但是不是交互,静态处理的,不是程序,也不能使用数据库查询,对nginx而言,对静态内容响应,只要磁盘IO,网络IO不受问题,单个服务器响应几万个并发不是问题 所以可以提供用户短暂的访问,要交易,就跳出正在维护 这就是降级服务模型 一旦前端服务器负载过大,可以触发降级操作,可以很多种策略来实现, 帮我们的主机都宕机后才触发,也可以超出配额的direct请求转发到这个上面来,可以做过载保护 nginx引入了过载保护,要用相应模块来实现 事实上,将来真正配置实现的,通常会有一些监控系统来触发保护机制 check健康状态监测,除了定义好的地址端口,也可以用到专门的地址端口 当 每个server有多个地址的时候,就可以后端服务器做检测,使用别的链接,并不影响正常服务时的带宽 inter每多长时间检测一次,默认单位毫秒 rise 检测几次都ok,才认为是ok的,默认为两次 fail 从ok到fail,要检测3次,都为fail才认为fail 一般来讲服务器检查状态只有两种,ok,problem check到底是7层还是4层 7层可以请求特定资源,要求回应码是多少 4层检测可以检测对方的端口能响应就是可以的 3层检测主机连接就可以了 而对于haproxy,还有其他参数来定义检测方法 httpchk,7层检查方式,smtpchk ,如果不做4层检测,默认就是7层检测,只要tcp3次握手的第一次,主要能得到对方的回应,就认为是对方服务是ok的 cookie,为每一个后端server指定一个cookie值。,一个静态cookie值,这时候haproxy集群有两个server,如果这两个server都能为用户设定cookie,即便不能设定cookie也没事,我们server可以自己设定,如果用户请求第一次发来时,一个链接发到服务器时,后端服务器有可能自己设定cookie,响应报文中使用set-cookie去设定,对于这种设定的结果,我们可以尝试着在中间的代理服务器上,把这个set-cookie的值上进行修改,这个value在客户端收到以后,会赋值给自己的cookie首部,再请求时都会带这个值, cookie的值就是后面服务器的标识符,这个标识符就是使用cookie参数给定的value 后端服务器没有设定cookie,中间代理服务器也可以设定cookie 所以同一个人再次请求的时候,也会带有cookie,哪个server提供的服务 来自同一个cookie请求发送给同一个服务器,这就是基于cookie的会话联系 除了server参数 还有全局的专用的cookie nginx有个down,服务器并没有不可用,但是可以人为down掉的,比如灰度发布,down掉,更新之后再发布上去,而haproxy是用disabled redir 重定向,能够把代理发给此server的get,head的请求重定向至指定的url,加个映射以后,后端服务器会把请求重定向或者映射到其他服务器上去 现在简单演示一下效果,既然能做健康性检测,后端服务器down了,就不会调度了 现在就是权重的效果 现在把一个服务器下线 现在是每两秒一次检测,检测三次失败 检测两次成功,就正常调度 也可以指定每隔几秒检查一次,inter 1000ms 一次就是rise成功,两次就fall,针对服务器来讲,也可以设定maxconn 2000,也可以指定后面对吗队列,backlog 500 可以标记一个disabled,这是server背后的参数的指令和参数的使用方法, redir 重定向 修改成这样 出现问题,查看文件 也不能转 总共server的参数,其他的参考文档 接下来是haproxy内建的工具叫做内置的统计页接口,内置的状态页(nginx也有一个status,haproxy也有,不光显示状态数据,还能显示统计数据,所以叫stats,) 想要使用,可以在frontend,backend使用stats enable,即可生效,可以定义一个server一样,在backend就可以定义,要想生效,一定在可以被调度到此backend能访问的接口上 修改配置文件 就成功了 pid,详细进程编号 uptime 进程运行多久了 system limit 最大能打开多大内存 maxconn最大并发链接4000 current conns当前连接数 running tasks当前运行任务 queue 队列,session rate会话速率,session会话统计数据,btytes 以字节为单位的进站出站统计数据,denied拒绝请求响应,eroor错误的请求或响应以及 warnings警告的 server端 eshop定义的前端,websrv定义的后端 当前正在活动的,备用的对应 当前正在允许,马上要宕了,正在宕的过程中 、活动的,当前正在down状态,目前正在启动 可以是活动或是备用的,当前处于down状态 软停机状态 服务器定义成backup以后,可以stop掉,查看状态变化 完全down掉了 因为现在定义是检查三次,会查看到状态变化 L4ok表示底下4层检查 act表示是不是active状态的,-表示不是active的 bck表示backup 主机 chk健康状态检查次数, dwn代表down了几次 dwntime,代表down的累计时长 可以尝试修改状态页的配置 可以把uri进行修改 用刚才定义的uri 这个访问页面还可以做basic认证 realm的定义弹出对话框 的时候可以说明是 什么 认证成功还可以用另外一个指令。 管理级别 接口 cond,条件,通常是每一个用户的ACL访问控制列表 只要验证了,任何人都能使用这个接口 可以加一个认证成功,能不能访问 force down强制下线 kill sessions杀死所有会话 对于统计接口来讲,放在80服务,有时候并不安全,可以自己选择一个listen来定义 监听1080,仅用于,状态页 上面的version是一个很严重的信息泄露,可以隐藏掉 也可以设定stats页面自动刷新多长时间 下一个参数是maxconn,再某一个前后端设置,i定义最大并发链接 可以在frontend定义 刷新页面得出4000 如果没有修改,将会继承默认值3000 一般来讲frontend的maxconn,不应该大于各后端server的maxconn之和 mode代表haproxy的工作模式 **bind监听某个端口 balance调度算法 mode t’c’p ** 先用ssh进行演示 leastcon最少链接,代表长连接 没有向后端直接进行转发 改成这个 就可以了 说明这样配置是没有问题的,现在直接使用3306端口试试 现在是健康的 成功 现在就链接不上去了转载地址:http://dbkgn.baihongyu.com/