HAProxy
- 一、准备
- 二、配置HAProxy服务器
- 1. 下载HAProxy
- 2. 编写配置文件
- 3. 启动HAProxy服务
- 三、配置后端服务
- ①配置web服务器
- ②配置php服务器
- 四、测试
一、准备
- 准备5台CentOS7服务器,IP地址如下:
- HAProxy 192.168.152.71
- web1 192.168.152.72
- web2 192.168.152.73
- php1 192.168.152.74
- php2 192.168.152.75
二、配置HAProxy服务器
1. 下载HAProxy
yum install -y haproxy
2. 编写配置文件
vim /etc/haproxy/haproxy.cfg
编写内容如下
# 全局设置
globallog 127.0.0.1 local3 info # 日志记录到本地maxconn 4096 # 最大连接数uid nobody # 运行用户,写用户编号99也行gid nobody # 运行组,写组编号99也行daemon # 以守护进程模式运行nbproc 1 # 使用的进程数量pidfile /run/haproxy.pid # PID 文件位置# 默认设置
defaultslog global # 使用全局日志设置mode http # 设置模式为 HTTPmaxconn 2048 # 默认最大连接数retries 3 # 重试次数option redispatch # 如果一个服务器超载,重新分配请求contimeout 5000 # 连接超时(毫秒)clitimeout 50000 # 客户端超时(毫秒)srvtimeout 50000 # 服务器超时(毫秒)
#timeout connect 5000 #contimeout的新版写法
#timeout client 50000 #clitimeout的新版写法
#timeout server 50000 #srvtimeout的新版写法option abortonclose # 客户端关闭连接时中断后端连接stats uri /admin?stats # 统计信息的 URIstats realm Private lands # 统计信息页面标题stats auth admin:password # 统计信息页面认证,登录用户为 admin,登录密码为 passwordstats hide-version # 隐藏版本信息# 前端配置
frontend http-inbind 0.0.0.0:80 # 监听所有 IP 的 80 端口mode http # HTTP 模式log global # 使用全局日志设置option httplog # 启用 HTTP 日志记录option httpclose # 在每个请求后关闭连接acl html url_reg -i \.html$ # 匹配 URL 中的 .html 扩展名use_backend html-server if html # 如果匹配 .html 扩展名 acl php url_reg -i \.php$ # 匹配 URL 中的 .php 扩展名acl php url_reg -i \.php$ # 匹配 URL 中的 .php 扩展名use_backend php-server if php # 如果匹配 .php 扩展名,则使用 php-server 后端default_backend html-server # 默认使用 html-server 后端# web后端配置
backend html-servermode http # HTTP 模式balance roundrobin # 负载均衡算法:轮询option httpchk GET /index.html # 健康检查:请求 /index.htmlcookie SERVERID insert indirect nocache # 插入会话 Cookieserver html-A 192.168.152.72:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5 # 后端服务器,注意 cookiec 后的值是唯一的server html-B 192.168.152.73:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5 # 后端服务器,注意 cookiec 后的值是唯一的# php后端配置
backend php-servermode http # HTTP 模式balance roundrobin # 负载均衡算法:轮询option httpchk GET /index.php # 健康检查:请求 /index.phpcookie SERVERID insert indirect nocache # 插入会话 Cookieserver php-A 192.168.152.74:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5 # 后端服务器,注意 cookiec 后的值是唯一的server php-B 192.168.152.75:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5 # 后端服务器,注意 cookiec 后的值是唯一的,则使用 html-server 后端
3. 启动HAProxy服务
systemctl start haproxy && systemctl enable haproxy
三、配置后端服务
①配置web服务器
测试用简单配置,web1 和 web2 都要配置
- 安装http服务
yum install -y httpd
- 编写主页
web1:
web2:echo web1 > /var/www/html/index.html
echo web2 > /var/www/html/index.html
- 启动http服务
systemctl start httpd && systemctl enable httpd
②配置php服务器
测试用简单配置,php1 和 php2 都要配置
- 安装 php 和 http 服务
yum install -y httpd php
- 编写主页
php1:
php2:echo php1 > /var/www/html/index.php
echo php2 > /var/www/html/index.php
- 启动服务
systemctl start httpd && systemctl enable httpd
四、测试
可以在浏览器访问 HAProxy服务器地址/统计信息的URI
如 http://192.168.152.71/admin?stats
可以看到如下界面
- 图中绿色部分变为其他颜色代表什么:
- 红色
- 配置文件中服务器地址冲突、找不到服务器
- 黄色
- 对应服务器中的http服务未开启
- 红色
- 可以在浏览器分别输入:
- http://192.168.152.71
- http://192.168.152.71/index.html
- http://192.168.152.71/index.php
多次刷新,查看结果,前两个的结果为 web1,web2;最后一个结果为 php1,php2。
如果配置没有问题,但多次刷新无果,可能是浏览器缓存,可以用命令 elinks
下载 yum insdall -y elinks
elinks --dump http://192.168.152.71
elinks --dump http://192.168.152.71/index.html
elinks --dump http://192.168.152.71/index.php