Centos7使用Docker搭建PXC+双HaProxy高可用MySQL集群

2024-04-13 16:32

本文主要是介绍Centos7使用Docker搭建PXC+双HaProxy高可用MySQL集群,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 安装Docker

  1. 卸载旧版本

    $ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
    
  2. 更新、添加软件源

    $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    $ sudo yum update
    
  3. 安装

    $ sudo yum install docker-ce
    
  4. 加入docker用户组

    $ sudo usermod -aG docker USER_NAME
    
  5. 添加docker到开机启动

    $ sudo systemctl enable docker
    
  6. 启动docker

    $ service docker start
    

2. 开通IPv4转发

  1. 由于后面容器间通讯需要防火墙转发,所以需要开通IPv4转发
    出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。
    vim /usr/lib/sysctl.d/00-system.conf
    添加 net.ipv4.ip_forward=1
    systemctl restart network
    

3. 准备相关镜像

  1. percona/percona-xtradb-cluster

    docker pull percona/percona-xtradb-cluster
    docker tag docker.io/percona/percona-xtradb-cluster pxc # 修改镜像名称
    docker network create --subnet=172.18.0.0/24 pxc_network # 指定特定的网段
    docker network inspect network20 # 查看网段详细信息
    
  2. haproxy

    docker pull haproxy
    

4. 创建docker卷

  1. 创建一个docker卷,自定义名称为 v1

    docker volume create --name v1
    
  2. 查看数据卷信息

    docker volume inspect v1
    [{"Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/v1/_data", # 容器创建的配置文件存放在这个目录下 /var/lib/docker/volumes/"Name": "v1","Options": {},"Scope": "local"}
    ]
    

5. 创建PXC容器, 两个分片的pxc集群

  1. docker命令

    docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=mysql -v v11:/var/lib/mysql --privileged --name=node1 --net=pxc_network --ip=172.18.0.2 pxcdocker run 
    -d # -d 容器后台运行
    -p 3311:3306 # -p 端口映射,[宿主机端口]:[容器端口]
    -e MYSQL_ROOT_PASSWORD=msyql # -e 启动参数
    -e CLUSTER_NAME=PXC 
    -e XTRABACKUP_PASSWORD=mysql # 数据库间节点同步密码
    -v volume-mysql-1:/var/lib/mysql # [宿主机目录(数据卷)]:[容器目录]
    --privileged # 最高权限
    --name node1
    --net pxc_network --ip 172.20.0.2 # 给容器指定网段,指定IP
    pxc
    
  2. PXC1

    docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=mysql -v v11:/var/lib/mysql --privileged --name=node1 --net=pxc_network --ip=172.18.0.2 pxc
    docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=mysql -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=mysql -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --privileged --name=node2 --net=pxc_network --ip=172.18.0.3 pxc
    docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=mysql -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=mysql -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=pxc_network --ip=172.18.0.4 pxc
    
  3. PXC2

    docker run -d -p 3316:3306 -e MYSQL_ROOT_PASSWORD=mysql -e CLUSTER_NAME=PXC2 -e XTRABACKUP_PASSWORD=mysql -v v4:/var/lib/mysql --privileged --name=node4 --net=pxc_network --ip=172.18.0.5 pxc
    docker run -d -p 3317:3306 -e MYSQL_ROOT_PASSWORD=mysql -e CLUSTER_NAME=PXC2 -e XTRABACKUP_PASSWORD=mysql -e CLUSTER_JOIN=node4 -v v5:/var/lib/mysql --privileged --name=node5 --net=pxc_network --ip=172.18.0.6 pxc
    docker run -d -p 3318:3306 -e MYSQL_ROOT_PASSWORD=mysql -e CLUSTER_NAME=PXC2 -e XTRABACKUP_PASSWORD=mysql -e CLUSTER_JOIN=node4 -v v6:/var/lib/mysql --privileged --name=node6 --net=pxc_network --ip=172.18.0.7 pxc
    

6. 数据库、用户创建

  1. 数据库、用户

    CREATE DATABASE dbname DEFAULT CHARACTER SET utf8;
    CREATE USER 'dbuser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
    GRANT ALL ON db.* TO 'dbuser'@'%' WITH GRANT OPTION;
    
  2. pxc集群里面创建haproxy用户并授予权限

    CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
    

7. 配置Haproxy

  1. 在host主机上写好配置文件,启动容器时候读取haproxy.cfg,

    vim /usr/local/docker/haproxy/haproxy.cfg
    vim /usr/local/docker/haproxy2/haproxy.cfg
    global#工作目录chroot /usr/local/etc/haproxy#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级infolog 127.0.0.1 local5 info#守护进程运行daemon
    defaultslog globalmode    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:haproxy
    #数据库负载均衡
    listen  proxy-mysql#访问的IP和端口bind  0.0.0.0:3306#网络协议mode  tcp#负载均衡算法(轮询算法)#轮询算法:roundrobin#权重算法:static-rr#最少连接算法:leastconn#请求源IP算法:sourcebalance  roundrobin#日志格式option  tcplog#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测option  mysql-check user haproxyserver  MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000server  MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000server  MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000#使用keepalive检测死链option  tcpka
    
  2. 启动haproxy容器

    # 第一个haproxy
    docker run -it -d -p 4001:8888 -p 4002:3306 -v /usr/local/docker/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=pxc_network --ip 172.18.0.10 haproxy
    # 第二个haproxy
    docker run -it -d -p 4003:8888 -p 4004:3306 -v /usr/local/docker/haproxy2:/usr/local/etc/haproxy --name h2 --privileged --net=pxc_network --ip 172.18.0.20 haproxy
    
  3. 启动\重启haproxy

    docker exec -it h1 bash
    haproxy -f /usr/local/etc/haproxy/haproxy.cfg # 启动
    haproxy -f /usr/local/etc/haproxy/haproxy.cfg -sf # 重启
    

8. 集群监控界面

  1. 地址

    http://ip:4001/dbs
    http://ip:4003/dbs
    

参考:
https://www.bbsmax.com/A/gVdngYYEzW/
https://www.bbsmax.com/A/xl56Orr9dr/
https://www.jianshu.com/p/f35b6254c2b0
https://qizhanming.com/blog/2019/01/25/how-to-install-docker-ce-on-centos-7

这篇关于Centos7使用Docker搭建PXC+双HaProxy高可用MySQL集群的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900641

相关文章

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf