云计算学习100天-第32天

Haproxy负载均衡集群

  • 概念

    • HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理
    • 是免费、快速并且可靠的一种解决方案
    • HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理
    • 可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到公网
  • 工作模式

    • mode http:只适用于web服务
    • mode tcp:适用于各种服务
    • mode health:仅做健康检查,很少使用
  • 调度算法

    • roundrobin:轮询
    • static-rr:加权轮询
    • leastconn:最少连接者先处理
    • source:根据请求源IP,类似于nginx的ip_hash
    • ri:根据请求的URI
    • rl_param:根据请求人URL参数'balance url_param'
    • rdp-cookie(name) :根据cookie(name)来锁定并哈希每一次的TCP请求
    • hdr(name) :根据HTTP请求头来锁定每一次HTTP请求
主机名 IP地址 角色
pubserver eth0:192.168.88.240 ansible主机
client eth0:192.168.88.10 客户端
proxy eth0:192.168.88.5 haproxy服务器
web1 eth0:192.168.88.100 web服务器
web2 eth0:192.168.88.200 web服务器

安装haproxy服务

#基于前一天的keepalived网络架构搭建

lvs1节点安装Haproxy软件,在ansible主机上用剧本实现

vim 12_install_haproxy.yml


  • name: config haproxy

hosts: lvs1

tasks:

  • name: stop keepalived #停止Keepalived服务

service:

name: keepalived

state: stopped

enabled: false

  • name: remove softs #卸载软件

yum:

name: ipvsadm,keepalived

state: absent

  • name: modify hostname #设置主机名

shell: "hostnamectl set-hostname haproxy"

  • name: install haproxy #安装软件

yum:

name: haproxy

state: present

ansible-playbook 12_install_haproxy.yml

配置Haproxy

配置文件说明

global为全局配置,通常保持默认即可

defaults为缺省配置,如果后续有相同配置则覆盖缺省值

#haproxy服务器配置

vim /etc/haproxy/haproxy.cfg

...

#先把包括64行在内的之后的行全部删除,然后添加以下配置

...

listen webservers #定义虚拟服务器

bind 0.0.0.0:80 #定义监听端口

mode http #定义工作模式

balance roundrobin #定义调度算法

server web1 192.168.88.100:80 check inter 2000 rise 2 fall 5

server web2 192.168.88.200:80 check inter 2000 rise 2 fall 5

#check:对后端服务器进行健康检查

#inter:健康检查心跳包发送时间间隔

#rise:连续检查N次有响应则认为健康

#fall:连续检查N次无响应则认为故障

systemctl start haproxy

ss -antlp | grep haproxy #查看已用的端口命令,集群搭建的常用命令

client客户端访问测试

for i in {1..6}

do

curl http://192.168.88.5

done

Welcome to web1

Welcome to web2

Welcome to web1

Welcome to web2

Welcome to web1

Welcome to web2

haproxy服务器开启Haproxy健康检查页面

vim /etc/haproxy/haproxy.cfg

...

listen stats #定义虚拟服务器

bind 0.0.0.0:1080 #定义监听端口

stats refresh 30s #定义页面刷新时间

stats uri /stats #定义请求路径

stats auth admin:admin #定义用户/密码

systemctl restart haproxy

ss -antlp | grep haproxy

LISTEN 0 128 0.0.0.0:1080 0.0.0.0:* users:(("haproxy",pid=28627,fd=7))

LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("haproxy",pid=28627,fd=5))

浏览器访问测试

http://192.168.88.5:1080/stats 用户名/密码:admin/admin

相关推荐
richxu2025100114 分钟前
嵌入式学习之路>(二)单片机核心原理篇>1.GPIO
单片机·嵌入式硬件·学习
wanhengidc20 分钟前
G口服务器都有哪些作用?
运维·服务器·科技·云计算
xybDIY22 分钟前
【aws invoice】将AWS默认出具的invoice发票拆分成较小的发票
云计算·aws
敲代码的嘎仔26 分钟前
LeetCode面试HOT100——160. 相交链表
java·学习·算法·leetcode·链表·面试·职场和发展
敲代码的嘎仔28 分钟前
LeetCode面试HOT100—— 206. 反转链表
java·数据结构·学习·算法·leetcode·链表·面试
丝斯201129 分钟前
AI学习笔记整理(19)—— AI核心技术(深度学习3)
人工智能·笔记·学习
自然语30 分钟前
深度学习时代结束了,2025年开始只剩下轮廓
数据结构·人工智能·深度学习·学习·算法
im_AMBER30 分钟前
Leetcode 66 几乎唯一子数组的最大和
数据结构·笔记·学习·算法·leetcode
岳来37 分钟前
lscpu 命令学习
学习·lscpu
TomCode先生1 小时前
2个月精通SaaS MES系统业务知识学习计划(每天2小时)
学习