单机三pxc节点集群,+docker-haproxy2.0负载均衡实现

news2024/11/14 18:17:35

一.下载

https://www.haproxy.org/download/2.0/src/haproxy-2.0.5.tar.gz

或者在这里下载(下面需要的各个配置文件都有):

https://download.csdn.net/download/cyw8998/89170129

二.编写文件,制作docker镜像

1.Dockerfile:



FROM centos:7
#将同级目录下的文件haproxy-2.0.5.tar.gz拷贝到该目录下
ADD haproxy-2.0.5.tar.gz /usr/local/etc/
## 安装编译工具,开始安装编译haproxy
RUN yum install -y gcc gcc-c++ glibc glibc-devel pcre \
                pcre-devel openssl openssl-devel systemd-devel \
                net-tools vim iotop bc zip unzip zlib-devel lrzsz \
                tree screen lsof tcpdump wget ntpdate –y \
      && cd /usr/local/etc/haproxy-2.0.5 \
      && make ARCH=x86_64 TARGET=linux-glibc \
              USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 \
              USE_SYSTEMD=1 USE_CPU_AFFINITY=1 \
              PREFIX=/usr/local/haproxy \
      && make install PREFIX=/usr/local/haproxy \
      && cp haproxy /usr/sbin/ \
      && mkdir /usr/local/haproxy/run
# 将Dockerfile同级目录下的haproxy.cfg配置文件拷贝到镜像的该目录下
ADD haproxy.cfg /etc/haproxy/
ADD haproxy.cfg /usr/local/etc/haproxy-2.0.5/
# 将 run_haproxy.sh 启动脚本文件拷贝到镜像的该目录下
ADD run_haproxy.sh /usr/bin
# 赋予 run_haproxy.sh 运行权限
RUN chmod +x /usr/bin/run_haproxy.sh
# 向外暴露 80 和 8888 端口
EXPOSE 80 8888
#执行 run_haproxy.sh 脚本
CMD ["/usr/bin/run_haproxy.sh"]

2.haproxy.cfg:



global
	#工作目录
	chroot /usr/local/etc/haproxy-2.0.5
	#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
	log 127.0.0.1 local5 info
	#守护进程运行
	daemon

defaults
	log	global
	mode	http
	#日志格式
	option	httplog
	#日志中不记录负载均衡的心跳检测记录
	option	dontlognull
    #连接超时(毫秒)
	timeout connect 5000
    #客户端超时(毫秒)
	timeout client  50000
	#服务器超时(毫秒)
    timeout server  50000

#监控界面	
listen  admin_stats
	#监控界面的访问的IP和端口
	bind  0.0.0.0:8888
	#访问协议
    mode        http
	#URI相对地址
    stats uri   /dbs
	#统计报告格式
    stats realm     Global\ statistics
	#登陆帐户信息
    stats auth  admin:admin
#数据库负载均衡
listen  proxy-mysql
	#访问的IP和端口
	bind  0.0.0.0:3306  
    #网络协议
	mode  tcp
	#负载均衡算法(轮询算法)
	#轮询算法:roundrobin
	#权重算法:static-rr
	#最少连接算法:leastconn
	#请求源IP算法:source 
    balance  roundrobin
	#日志格式
    option  tcplog
	#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
    option  mysql-check user haproxy
    server  pxc_node1 170.19.0.11:3306 check weight 1 maxconn 2000  
    server  pxc_node2 170.19.0.12:3306 check weight 1 maxconn 2000
    server  pxc_node3 170.19.0.13:3306 check weight 1 maxconn 2000
	#使用keepalive检测死链
    option  tcpka  

3.run_haproxy.sh


#!/bin/bash
haproxy -f /etc/haproxy/haproxy.cfg
tail -f /etc/hosts

4.制作镜像

docker build -t mars/haproxy .

三.启动pxc和harproxy

1.dock-compose制作镜像并启动pxc,见上一篇文章,pxc8证书制作也略



version : '3.7'
services:


  db1:
    container_name: db1
    image: percona/percona-xtradb-cluster:8.0
    privileged: true
    networks:
      my-pxc:
        ipv4_address: 170.19.0.11
    environment:
      - "CLUSTER_NAME=JWSPXC"
      - "XTRABACKUP_PASSWORD=123456"
      - "MYSQL_ROOT_PASSWORD=123456"
      - "TZ=Asia/Shanghai"
    ports:
      - "13306:3306"
    volumes:
      - v301:/var/lib/mysql
      - ~/pxc-docker-test/cert:/cert
      - ~/pxc-docker-test/config:/etc/percona-xtradb-cluster.conf.d
   
  db2:
    container_name: db2
    image: percona/percona-xtradb-cluster:8.0
    privileged: true
    networks:
      my-pxc:
        ipv4_address: 170.19.0.12
    environment:
      - "CLUSTER_NAME=JWSPXC"
      - "XTRABACKUP_PASSWORD=123456"
      - "TZ=Asia/Shanghai"
      - "CLUSTER_JOIN=db1"
    ports:
      - "23306:3306"
    volumes:
      - v302:/var/lib/mysql
      - ~/pxc-docker-test/cert:/cert
      - ~/pxc-docker-test/config:/etc/percona-xtradb-cluster.conf.d
    restart: always #on-failure
    depends_on:
       - db1
  db3:
    container_name: db2
    image: percona/percona-xtradb-cluster:8.0
    privileged: true
    networks:
      my-pxc:
        ipv4_address: 170.19.0.12
    environment:
      - "CLUSTER_NAME=JWSPXC"
      - "XTRABACKUP_PASSWORD=123456"
      - "TZ=Asia/Shanghai"
      - "CLUSTER_JOIN=db1"
    ports:
      - "33306:3306"
    volumes:
      - v303:/var/lib/mysql
      - ~/pxc-docker-test/cert:/cert
      - ~/pxc-docker-test/config:/etc/percona-xtradb-cluster.conf.d
    restart: always #on-failure
    depends_on:
       - db1
   
volumes:
  v301:
  v302:
  v303:
networks:
  my-pxc:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 170.19.0.0/24

#docker-compose up -d db1  先检测第一个主点,成功后再执行下一句

#docker-compose up -d db2  检测第2个点是否成功,成功后再执行下一句

#docker-compose up -d db3

注意:docker-compose定义的卷标名和network名,在生成docker后,查看network和volume名都带着前缀d-compose_取决于文件夹名_

5.启动一下haproxy

docker run -d -p 80:80 -p 8888:8888 mars/haproxy
因为已经配置了haproxy.cfg,所以容器启动后会自动代理pxc集群

6.访问一下haproxy2.0控制台

192.168.xx.xxx:8888/dbs

发现负载的两台目标机器是DOWN状态

在 pxc集群中创建一个用户给 haproxy使用
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';

运行


 

docker run -d -p 80:80 -p 8888:8888 -p 13301:3306 --name haproxy --privileged --net=d-compose_my-pxc --ip 170.19.0.10 mars/haproxy

再访问控制台

192.168.xx.xxx:8888/dbs

发现负载的两台目标机器是up状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1616805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

恒峰智慧科技—森林消防泵,你了解多少?

在我们的日常生活中,森林火灾是一种非常危险的现象。为了保护森林资源和人民的生命财产安全,森林消防泵成为了一种非常重要的设备。那么,你对森林消防泵了解多少呢?本文将为您详细介绍森林消防泵的操作步骤、注意事项以及维护保养…

第⑮讲:Ceph集群管理与监控操作指南

文章目录 1.查看集群的状态信息2.动态的查看集群的状态信息3.查看集群的利用率4.查看OSD的资源利用率5.查看OSD的列表6.查看各组件的状态7.查看集群的仲裁信息8.查看/修改集群组件sock的配置参数 1.查看集群的状态信息 通过集群状态信息可以看到集群的健康状态、各个组件的运行…

Spark 中的分桶分化

Spark 中的分桶分化 Bucketing是 Spark 和 Hive 中用于优化任务性能的一种技术。在分桶桶(集群列)中确定数据分区并防止数据混洗。根据一个或多个分桶列的值,将数据分配给预定义数量的桶。 分桶有两个主要好处: 改进的查询性能&…

jvm(JVM快速入门、stack栈、堆、GC垃圾回收、Arthas)

文章目录 1. JVM快速入门1.1. 结构图1.2. 类加载器ClassLoader1.3. 执行引擎Execution Engine1.4. 本地接口Native Interface1.5. Native Method Stack1.6. PC寄存器(程序计数器)1.7. Method Area方法区 2. stack栈3. 堆3.1. 堆体系概述3.1.1. 新生区3.1.2. 老年代3.1.3. 永久代…

2024统计建模:大数据与人工智能时代的统计研究

文章目录 题目解读你需要具备的知识点课题推荐视频分析 题目解读 主要做的是“大数据”与“人工智能”。 其中“大数据”所涉及的的第一个就是大量的数据,数据从哪里来?拿到数据后,我们需要做基本的数据分析,如何对大量的数据进…

【UnityShader]使用Shader将图片进行水平/竖直镜像翻转

一、需求 在开发时从很多地方取出来的图片可能并不是图像原本的模样,可能是被水平或者竖直镜像翻转后的图形,这时候我们要将图片再次镜像回来,只需要一个小小的Shader即可。 二、实现 下面是镜像翻转Shader的思路: 一般来说我们在顶点着色…

C++奇迹之旅:从0开始实现日期时间计算器

文章目录 📝前言🌠 头文件Date.h🌉日期计算函数🌠前后置🌉前后置-- 🌠两对象日期相减🌉自定义流输入和输出 🌉 代码🌉 头文件Date.h🌠Date.cpp🌉 …

ECALL介绍

一、ECALL关键词介绍 ECALL:Emergency Call,紧急呼叫 PSTN:Public Switched Telephone Network MSD:Minimum Set of Data PLMN: Public Land Mobile Network PASP:Public Safety Answering Point IVS: in-vehicle system(车载系统)是内部的调制解调器,以全双工的方式…

【漏洞复现】手机卡号推广商城 login.php接口处存在 SQL 注入漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

STM32应用开发教程进阶--UART串口重定向(printf)

实现目标 1、掌握STM32 HAL库的串口重定向 2、具体目标:1、实现printf “打印”各种常用的类型的数据变量 一、串口“打印” UART串口通信协议是我们常用的通信协议(UART、I2C、SPI等)之一,全称叫做通用异步收发传输器&#xf…

卷积神经网络CNN入门

卷积神经网络应用领域 因为卷积神经网络主要应用场景就是计算机视觉任务,因此有必要简单介绍一下CV领域发展情况: 可以发现,在 ImageNet 图像数据集中分析图像的错误率十年间已经被深度学习给降低到了比人类(HuMan)识…

阿里云短信渠道专属优惠价格,全网最便宜入口

阿里云短信渠道专属优惠,1000条短信30元、2000条短信优惠价格60元、3000元短信套餐包价格90元、5000短信优惠150元,活动页面 aliyunbaike.com/go/duanxin 链接打开如下图: 阿里云短信渠道专属优惠价格 阿里云短信支持国内快速发送验证码、通…

算法——BFS算法

1. 什么是BFS算法 BFS(广度优先搜索,Breadth-First Search)算法是一种用于图和树等数据结构中进行搜索的基本算法。它从指定的起始节点开始,逐层地向外扩展搜索,直到找到目标节点或遍历完整个图。 BFS算法的基本思想是…

R可视化:桑基图展示数据层流动

介绍 以桑基图形式展示数据分布情况 加载R包 knitr::opts_chunk$set(message = FALSE, warning = FALSE) library(tidyverse) library(ggalluvial)# rm(list = ls()) options(stringsAsFactors = F) options(future.globals.maxSize = 10000 * 1024^2) 导入数据 metadata…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | Label的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | Label的使用及说明 文章编号:Q…

CentOS 系统的优缺点

CentOS (社区企业操作系统的缩写)是一个基于红帽企业 Linux (RHEL)的免费开源发行版, 旨在为服务器和工作站提供稳定、可靠和安全的平台。 不应将其与CentOS Stream 混淆,后者是即将发布的 RHEL 版本的上游开发平台。 CentOS Li…

虚拟化及Docker基础

一、虚拟化 1.1 云端 1.2 云计算服务模式分层 1.3 虚拟化架构 1.3.1 寄居架构 1.3.2 原生架构 1.4 虚拟化产品 1.4.1 仿真虚拟化产品(对系统硬件没有要求,性能最低) 1.4.2 半虚拟化 (虚拟机可以使用真机物理机&#xff09…

垃圾渗滤液如何有效处理

垃圾渗滤液,通常称为垃圾填埋场的渗滤液,是一种复杂的高浓度有机废水,含有多种有毒有害物质。有效处理垃圾渗滤液对环境保护至关重要。这里是一些常见且有效的处理方法: ### 预处理 ##### 1. 调节池 - **pH调整**:通过…

【招聘】数通,云计算岗位持续招聘中

北京、南京、成都、贵州、杭州、深圳、上海 云计算HCS 薪资:8-25k 岗位描述: 1、制定网络安全技术规范及工作标准、负责全国工程团队技术培训及人员培养 2、全国项目技术支持、协助开展广域网的设计、规划、实施及方案交流工作 3、承担公司中、大型集成项目管理,负…

7、线上系统部署时如何设置JVM内存大小?

7.1、前文回顾 让我们先来回顾一下我们已经学到的知识。现在,大家应该都明白了,在我们日常编写代码时,所创建的对象通常是首先在新生代区域进行分配的。然后,当一些方法执行完毕后,大部分位于新生代区域中的对象将不再被引用,从而变成垃圾对象。如下图所示: 随着程序…