docker搭建haproxy实现负载均衡

获取haproxy镜像

[root@docker-node1 ~]# docker pull haproxy:2.3

建立haproxy容器数据卷

  • conf目录数据卷
[root@docker-node1 ~]# mkdir /var/lib/docker/volumes/conf/

获取haproxy配置文件

[root@docker-node1 ~]# yum install haproxy -y --downloadonly --downloaddir=/mnt

[root@docker-node1 ~]# cd /mnt/

[root@docker-node1 mnt]# rpm2cpio haproxy-2.4.17-3.el9.x86_64.rpm | cpio -id

[root@docker-node1 mnt]# ls
etc  haproxy-2.4.17-3.el9.x86_64.rpm  usr  var
  • 配置文件cpconf数据卷
[root@docker-node1 mnt]# cd etc/haproxy/
[root@docker-node1 haproxy]# cp haproxy.cfg /var/lib/docker/volumes/conf/
  • 修改配置文件
[root@docker-node1 haproxy]# cd /var/lib/docker/volumes/conf/
[root@docker-node1 conf]# vim haproxy.cfg

在这里插入图片描述

编写yaml文件

[root@docker-node1 ~]# cd huazi/
[root@docker-node1 huazi]# vim haproxy.yml
services:
  web1:
    image: nginx:1.23
    container_name: webserver1
    restart: always
    expose:
      - 80
    volumes:
      - data_web1:/usr/share/nginx/html
    networks:
      - internel


  web2:
    image: nginx:1.23
    container_name: webserver2
    restart: always
    expose:
      - 80
    volumes:
      - data_web2:/usr/share/nginx/html
    networks:
      - internel


  haproxy:
    image: haproxy:2.3
    container_name: haproxy
    restart: always
    ports:
      - "80:80"
    volumes:
      - /var/lib/docker/volumes/conf/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
    networks:
      - internel
      - externel


networks:
  internel:
    driver: bridge

  externel:
    driver: bridge

volumes:
  data_web1:
    name: data_web1

  data_web2:
    name: data_web2

运行

[root@docker-node1 huazi]# docker compose -f haproxy.yml up -d
[root@docker-node1 huazi]# docker compose -f haproxy.yml ps
NAME         IMAGE         COMMAND                   SERVICE   CREATED        STATUS                                                                                                                  PORTS
haproxy      haproxy:2.3   "docker-entrypoint.s…"   haproxy   13 hours ago   Up 13 hours   0                                                                                                          .0.0.0:80->80/tcp, :::80->80/tcp
webserver1   nginx:1.23    "/docker-entrypoint.…"   web1      13 hours ago   Up 13 hours   8                                                                                                          0/tcp
webserver2   nginx:1.23    "/docker-entrypoint.…"   web2      13 hours ago   Up 13 hours   8                                                                                                          0/tcp

测试

  • 建立测试网页
[root@docker-node1 huazi]# echo webserver1 > /var/lib/docker/volumes/data_web1/_data/index.html
[root@docker-node1 huazi]# echo webserver2 > /var/lib/docker/volumes/data_web2/_data/index.html
[root@docker-node1 huazi]# curl 172.25.254.100
webserver1
[root@docker-node1 huazi]# curl 172.25.254.100
webserver2
### 使用 Docker 部署 HAProxy 并配置邮件告警 #### 一、HAProxy 的基本部署 为了实现高可用负载均衡,可以使用 Docker 来运行 HAProxy 容器。以下是基于 DockerHAProxy 基础部署命令: ```bash docker run -d \ --name haproxy \ -p 80:80 \ -v /path/to/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro \ haproxy:latest ``` 此命令会启动一个名为 `haproxy` 的容器,并将宿主机上的配置文件 `/path/to/haproxy.cfg` 映射到容器内的默认路径 `/usr/local/etc/haproxy/haproxy.cfg` 中[^4]。 #### 二、HAProxy 配置文件中的邮件告警设置 要在 HAProxy 中启用邮件告警功能,需修改其配置文件 (`haproxy.cfg`) 添加以下内容: 1. **全局部分 (global)** 设置邮件发送的相关参数,例如 SMTP 服务器地址和端口。 ```plaintext global log 127.0.0.1 local0 notice smtp-alert mail.example.com email-alert admin@example.com stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners ``` 2. **监听部分 (listen 或 frontend/backend)** 在特定的服务或后端定义中触发告警条件。例如当某个后端不可用时发送邮件通知。 ```plaintext listen web_servers bind :80 mode http balance roundrobin server server1 192.168.1.101:80 check inter 2000 rise 2 fall 3 server server2 192.168.1.102:80 check inter 2000 rise 2 fall 3 # 当所有后端都失败时发出告警 option httpchk GET / alertmail on ``` 以上配置会在检测到健康检查失败的情况下自动向指定邮箱发送告警消息[^5]。 #### 三、集成 Prometheus 和 Alertmanager 实现更高级别的监控与告警 如果希望进一步增强系统的可观测性和告警能力,则可以通过引入 Prometheus 及其配套组件 Alertmanager 来完成复杂场景下的邮件告警支持。 1. **安装并配置 Prometheus** 创建自定义的 Prometheus 数据采集规则文件用于监测目标服务状态变化情况。例如创建磁盘空间不足警告规则如下所示: ```yaml groups: - name: disk_usage_alerts rules: - alert: DiskUsageCritical expr: 100 - (node_filesystem_free_bytes{fstype=~"xfs|ext4"} / node_filesystem_size_bytes{fstype=~"xfs|ext4"}) * 100 > 90 for: 5m labels: severity: critical annotations: summary: "Disk usage is above 90%" description: "Partition {{ $labels.mountpoint }} has more than 90% utilization." ``` 2. **启动 Prometheus 容器** ```bash docker run -d --name prometheus \ --restart=always \ -p 9090:9090 \ -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus:v2.30.3 ``` 3. **配置 Alertmanager 发送电子邮件** 编辑 Alertmanager 的 YAML 文件来设定接收者以及具体的邮件传输方式。 ```yaml route: group_by: ['alertname'] receiver: 'email-receiver' receivers: - name: 'email-receiver' email_configs: - to: 'admin@example.com' from: 'alerts@example.com' smarthost: 'smtp.example.com:587' auth_username: 'username' auth_password: 'password' hello: 'example.com' tls_config: insecure_skip_verify: true ``` 最后记得重新加载或者重启 Promethues 和 Alermanager 使新改动生效[^2]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

^~^前行者~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值