gg修改器怎么设置守护进程,gg修改器怎样获得守护进程

首页 > 实用技巧 > 作者:YD1662023-11-16 14:38:36

Haproxy调度器介绍和配置文件详解

1.haproxy介绍 (四层TCP和七层HTTP都可用)

是一个开源的、高性能的基于TCP(四层)和HTTP(七层)应用代理的高可用的、负载均衡服务软件,它支持双击热备、高可用、负载均衡、虚拟主机、基于TCP和HTTP的应用代理、图形界面查看信息等功能。其配置简单、维护方便,且拥有良好的对服务器节点的健康检查功能,当其代理的后端服务器出现故障时,haproxy会自动的将该故障服务器摘除,当故障服务器恢复后,haproxy还会自动将该服务自动加入进来提供服务。Haproxy是代理客户端访问后端服务器,当服务器返给客户端页面时候也是先经过haproxy,然后才返给客户端,类似lvs的nat模式,但也不是nat模式,所以并发量没有lvs的DR模式大。但也不算小(访问量单台1-3000万pv)也是没问题的。

2.haproxy支持两种主要代理模式

1)基于4层的tcp应用代理(如:可用于邮件服务、内部协议通信服务器、mysql、https服务等)。

2)基于7层的http代理。在4层tcp代理模式下,haproxy仅仅在客户端和服务器之间进行流量转发。但是在7层http代理模式下,haproxy会分析应用层协议,并且通过允许、拒绝、交换、增加或者删除请求或者回应里指定内容来控制协议。

3.关于安装haproxy后配置文件的详细说明

1)基于listen集群的配置文件配置方案:(有listen,但没有frontend和backend)

[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg

global

log 127.0.0.1:514 local0 warning //记录请求haproxy的信息,local0为接收设备,级别不要用info

log 127.0.0.1 local1 notice

chroot /usr/local/haproxy/var/chroot //安全参数,当软件出现漏洞时候,这里会来保护。

pidfile /usr/local/haproxy/var/run/haproxy.pid //存放进程号pid

maxconn 20480 //定义每个haproxy进程的最大连接数,默认:4096

nbproc 8 //设定启动几个进程,一般跟cpu的核数相当就可,太大易崩溃

daemon //以守护进程方式允许。

group haproxy //设置允许haproxy的用户和组

user haproxy

spread-checks 3

defaults

log global

mode http //模式,或tcp是4层、health是健康检查,listen里优先

option httplog

option dontlognull

retries 3

redispatch

maxconn 2000

contimeout 5000 //成功连接到一台服务器的最长等待时间,默认毫秒,默认:5000

clitimeout 50000 //连接客户端发送数据时的成功连接最长等待时间,默认毫秒,默认:50000

srvtimeout 50000 //服务器回应客户端数据发送最长等待时间,默认毫秒,默认:50000

listen test 172.10.10.5:80 //listen 监听的名字(随意) 监听的vip:端口 下面的前两行可以用这一行代替。

listen test //每个listen就是一个集群,test为名字

bind 172.10.10.5:80 //绑定的集群的vip:端口

mode http //模式,里面优先

stats enable //激活web界面的状态信息

stats uri /admin?Stats //web界面的uri,访问时格式:http://调度IP或域名/admin?stats

stats hide-version //隐藏haproxy的版本号

stats auth admin:123456 //访问web页面状态信息时的用户名和密码:admin,123456

balance roundrobin //负载均衡的策略:轮询,也可根据需要上帮助文档里用其它算法

option forwardfor //把用户请求的ip转给后面的server,让server能记录用户真实IP

option httpchk HEAD /check.html HTTP/1.0 //http基于网页健康检查,检查网页是否正常,若无check.html,即使服务开启也认为不正常。

option httpchk GET /check.html HTTP/1.0 //http基于网页健康检查,检查网页是否正常,和上面一样,可以选择一种用即可。

option httpchk GET /check.html HTTP/1.1\r\nHOST:www.etiantian.org //对后面服务器网站的域名健康检查,不太理解

timeout server 15s

timeout connect 15s

option httpclose

cookie SERVERID rewrite

option allbackups

server web1 192.168.4.100:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

server web2 192.168.4.200:80 cookie B maxconn 4096 weight 10 check port 80 inter 2000 rise 2 fall 5

server web3 192.168.4.201:80 cookie C maxconn 4096 weight 10 check port 80 inter 2000 rise 2 fall 5 backup

server web4 192.168.4.202:80 cookie D maxconn 4096 weight 10 check port 80 inter 2000 rise 2 fall 5 backup

详解:

格式:server 服务器名字(随便) 服务器IP/域名:端口,cookie A/B/C/D,往服务器的客户端写cookie,也可去掉。

maxconn 2048/4096 控制节点并发量,weight 8/10 控制节点权重,check port 80检查端口,如果只写check默认就是检查冒号后面端口,inter 2000检查间隔2s(2000是毫秒),fall 5如果5次失败就剔除,rise 2,若2次恢复好了就加入,check.html的健康检查优先级大于端口健康检查,如果网页正常,则认为服务器正常,如果网页不正常,则即使服务正常,也认为不正常。

backup参数:

1)如果不加上面的“option allbackups ”,只有一个backup的服务器时(这是其中一种情况而已,不绝对),在最后那个服务器最后面加个backup表示当前面所有节点全部都挂了,最后那个机器才接管。

2)如果加上上面的“option allbackups”,后面有多个backup的服务器时(这是其中一种情况而已,不绝对),在服务器最后面加上backup表示当前面所有节点全部都挂了,后面所有的有backup的服务器同时启动来接管服务。

option forwardfor参数: 表示haproxy支持后端服务器记录真实IP,但后端web服务器也要在配置文件中修改才行,

如下:vim /etc/httpd/conf/httpd.conf

#LogFormat "%h %l %u %t \"%r\" %>s %b" common //默认是这个,把%h修改为:\"%{X-Forwarded-For}i\"

LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b" common //修改为这个,下面日志也要common

如果listen中bind绑定的IP在本机不存在,则无法启动haproxy,解决方法如下:

解决不用bind绑定IP也能启动haproxy服务:echo "net.ipv4.ip_nonlocal_bind=1" >> /etc/sysctl.conf

多业务需要绑定多个VIP做调度器时情况:把多做几个listen,多绑定几个VIP即可,listen里面名字不要重复。

2)基于acl域名规则控制的集群的配置文件配置方案:(没有listen,但有frontend和backend)

[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg

global

log 127.0.0.1:514 local0 warning

log 127.0.0.1 local1 notice

chroot /usr/local/haproxy/var/chroot

pidfile /usr/local/haproxy/var/run/haproxy.pid

maxconn 20480

nbproc 8

daemon

group haproxy

user haproxy

spread-checks 3

defaults

log global

option httplog

option dontlognull

retries 3

redispatch

maxconn 2000

contimeout 5000

clitimeout 50000

srvtimeout 50000

mode http

stats enable

stats uri /admin?stats

stats hide-version

stats auth admin:123456

balance roundrobin

frontend zdyname1 #名字随便(可多个) // 1)基于定义域名规则,然后根据不同域名抛给后面对应服务器池中或跳转。

stats enable

stats hide-version

stats auth admin:123456

bind 172.10.10.5:80 //绑定VIP,客户端访问IP

acl bd_zdyname hdr(host) -i www.etiantian.org //hdr(host):从主机名里取,-i:不分大小写,用后面域名访问时…

acl bbs_zdyname hdr(host) -i bbs.etiantian.org //hdr(host):从主机名里取,-i:不分大小写,用后面域名访问时…

redirect prefix http://www.baidu.com code 301 if bd_zdyname //符合bd_zdyname中(www.etiantian.org)时跳到百度

use_backend bbs if bbs_zdyname //符合bbs_zdyname中(bbs.etiantian.org)访问时抛给后端的bbs池

default_backend www //默认情况下,无论用域名还是IP访问都抛给后面的的www池

backend www #名字随便,但要和上面对应。

balance leastconn

option httpclose

option forwardfor

server web1 192.168.4.101:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

server web2 192.168.4.201:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

backend bbs #名字随便,但要和上面对应。

balance leastconn

option httpclose

option forwardfor

server web3 192.168.4.102:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

server web4 192.168.4.202:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

frontend zdyname2 #名字随便(可多个) // 2)基于访问站点下的不同目录时,到后面对应池中找服务器的对应站点目录

stats enable

stats hide-version

stats auth admin:123456

bind 172.10.10.55:80 //绑定的另一个VIP,客户端访问IP

acl zdy_php path_beg /php/ //path_beg固定,匹配访问站点目录下的php目录时……

acl zdy_java path_beg /java/ //path_beg固定,匹配访问站点目录下的java目录时……

use_backend php if zdy_php //访问站点目录下的php目录时到后面的php池找服务器站点目录中的php目录

use_backend java if zdy_java //访问站点目录下的java目录时到后面的java池找服务器站点目录中的java目录

backend php #名字随便,但要和上面对应。

balance leastconn

option httpclose

option forwardfor

server web3 192.168.4.103:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

server web4 192.168.4.203:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

backend java #名字随便,但要和上面对应。

balance leastconn

option httpclose

option forwardfor

server web3 192.168.4.104:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

server web4 192.168.4.204:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

frontend zdyname3 #名字随便(可多个) // 3)基于访问站点目录下的扩展名访问资源时,抛给对应后端池服务器访问

stats enable

stats hide-version

stats auth admin:123456

bind 172.10.10.55:80 //绑定的另一个VIP,客户端访问IP

acl zdy_pic path_end .gif .png .jpg .css .js //path_end固定,访问站点目录下的扩展名如下资源时……

acl zdy_static path_end .gif .png .jpg .css //path_end固定,访问站点目录下的扩展名如下资源时……

use_backend suibian_static if zdy_pic or zdy_static //访问站点目录下的扩展名如下资源时,抛给后端池服务器访问

backend suibian_static #名字随便,但要和上面对应。

balance leastconn

option httpclose

option forwardfor

server web3 192.168.4.105:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

server web4 192.168.4.205:80 cookie A maxconn 2048 weight 8 check port 80 inter 2000 rise 2 fall 5

frontend zdyname4 #名字随便(可多个) // 4)基于不同手机访问类似或相同网站时,解析到相对应的服务器 //无环境

stats enable

stats hide-version

stats auth admin:123456

bind 172.10.10.55:80 //绑定的另一个VIP,客户端访问IP

acl iphone_users hdr_sub(user-agent) -i iphone //-i前面固定,后面的不好判断,需访问看看是啥或看日志

redirect prefix http://blog.51cto.com if iphone_users //如果是苹果手机访问就转到后面苹果手机服务器上

acl android_users hdr_sub(user-agent) -i android //-i前面固定,后面的不好判断,需访问看看是啥或看日志

redirect prefix http://www.51cto.com if android_users //如果是安卓手机访问就转到后面安卓手机服务器上

frontend zdyname5 #名字随便(可多个), // 5)基于端口和IP访问限制做控制

stats enable

stats hide-version

stats auth admin:123456

bind 172.10.10.55:80 //绑定的另一个VIP,客户端访问IP

acl zdy_valid_ip src 192.168.4.0/24 //仅仅帮助192.168.4.0网段的IP实现haproxy代理

block if !zdy_valid_ip //不是上面网段的规定的IP不给代理,block等于drop

解释:frontend设置匹配规则,backend是后端地址池,前面规则匹配好后,到后面相应的池里找去。

3)基于haproxy错误页面跳转优雅显示的配置案例(可放到:defaults/listen/fronend/backend里)

不支持404,支持:503、502、504 //没有试验成功

[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg

errorfile 400 /etc/haproxy/errorfiles/400badreq.http //上面根据需要添加,errorfile也可换为:errorloc

errorfile 403 /etc/haproxy/errorfiles/403forbid.http //上面根据需要添加,errorfile也可换为:errorloc

errorfile 503 /etc/haproxy/errorfiles/503sorry.http //上面根据需要添加,errorfile也可换为:errorloc

errorfile 504 http://www.360buy.com/ //京东做法,错误页面时候返回到首页。

…………

[root@localhost haproxy]# mkdir -p /etc/haproxy/errorfiles

[root@localhost haproxy]# echo 400 > /etc/haproxy/errorfiles/400badreq.http

[root@localhost haproxy]# echo 403 > /etc/haproxy/errorfiles/403forbid.http

[root@localhost haproxy]# echo 503 > /etc/haproxy/errorfiles/503sorry.http

经过上述配置后,当后台服务器页面找不到时候,就会返回相应的400,403,503等,通过浏览器测试,curl不行。

4)haproxy配置文件补充说明:

注意:

global:全局配置参数段,主要控制haproxy启动前的进程及系统相关设置。

defaults:配置一些默认参数。如果frontend、backend、listen等段未设置则使用defaults段配置。

listen:每个listen就是一个集群。

frontend:用来匹配接收客户端所请求的域名,uri等,并针对不同的匹配,做不同的请求处理。(服务员)

backend:定义后端服务器集群,以及对后端服务器的一些权重,队列,连接数等选项的设置。(厨师)

日志级别不要用info,用info会打访问日志,特别大,影响磁盘IO读写能力。默认是info,应改为:warning或err

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.