Docker搭建mysql集群

RXC方案与Replication方案的对比:



  • RXC采用同步复制,事务在所有集群节点要么同时提交,要么不提交
  • Replication采用异步复制,无法保证数据的一致性

RXC镜像下载

docker pull percona/percona-xtradb-cluster

docker创建内部网段

docker network create --subnet=172.18.0.0/24 net1

docker卷:容器中的PXC节点映射数据目录的解决办法
name:v1,v2,v3,v4,v5

docker volume create --name v1
  • docker卷查看
docker inspect v1

创建PXC容器
name: node1,node2,node3,node4,node5
ip:172.18.0.2,172.18.0.3,172.18.0.4,172.18.0.5,172.18.0.6
port:3306,3307,3308,3309,3310

docker run -d -p 3306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc

docker run -d -p 3307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc

数据库负载均衡

  • 使用Haproxy做负载均衡,请求被均匀分发给每个节点,单节点负载低,性能好


  • 安装Haproxy镜像
docker pull haproxy
touch /home/soft/haproxy.cfg
...
  • 创建Haproxy容器
docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy
docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg

web监控:http://114.115.154.152:4001/dbs

Keepalived实现双机热备

  • 一个虚拟ip
  • 多个keepalived(用于强虚拟ip)


  • 安装Keepalived
  • Keepalived必须安装在Haproxy所在的容器内(虚机为ubantu)
docker exec -it h1 bash
apt-get update
apt-get install keepalived
  • keepalived配置文件(/etc/keepalived/keepalived.conf)
apt-get install vim
vim /etc/keepalived/keepalived.conf
  • MASTER:主服务;BACKUP:备服务
  • eth0:网卡设备,用于与宿主ip映射
  • priority:权重
  • advert_int:心跳检测时间间隔(秒)
  • virtual_ipaddress:公用虚拟ip
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.18.0.201
    }
}
service keepalived start

在宿主中:ping 172.18.0.201

数据库备份(热备份)

  • MySQL常见的热备份:LVM和XtraBackup(推荐)
  • 创建一个docker卷
docker volume create backup
  • 停止并删除一个节点(随意:node1)
docker stop node1
docker rm node1
  • 创建PXC节点(node1)
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=node2 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
  • PXC全量备份步骤(手动触发)(PXC容器中安装XtraBackup)
  • 以后自动增量备份
  • 进入容器,以管理员的身份
docker exec -it --name root node1 bash
apt-get update
apt-get install percona-xtrabackup-24
innobackupex --user=root --password=root /data/backup/full
  • PXC全量恢复(进入容器内部执行)
rm -rf /var/lib/mysql/*
innobackupex --user=root --password=root --apply-back /data/backup/full/2018-04-15_05-09-07/
innobackupex --user=root --password=root --copy-back /data/backup/full/2018-04-15_05-09-07/


注意:RXC不能直接使用容器中的目录。

3----3.docker run -d -p 3308:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
4----4.docker run -d -p 3309:3306 -v v4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=node1 --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
5----5.docker run -d -p 3310:3306 -v v5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=node1 --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
global
    #工作目录
    chroot /usr/local/etc/haproxy
    #日志文件吗,使用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:port
    bind 0.0.0.0:8888
    #访问协议
    mode http
    #URI相对地址
    stats uri /dbs
    #统计报告格式
    stats realm Global\ statistics
    #登陆账户信息
    stats auth pascall:zj1424603784

#数据库负载均衡
listen proxy-mysql
    #访问的ip:port
    bind 0.0.0.0:3306
    #网络协议
    mode tcp
    #负载均衡算法(轮询算法)
        #轮询算法:roundrobin
        #权重算法:static-rr
        #最少连接算法:leastconn
        #请求源IP算法:source
    balance roundrobin
    #日志格式
    option tcplog
    #在Mysql中创建一个没有权限的haproxy用户,密码空
    option mysql-check user haproxy
    server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000
    server MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000
    server MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000
      server MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000
      server MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000
    #使用keepalive检测死链
    option tcpka
 

原文地址:https://www.cnblogs.com/pascall/p/9749770.html

时间: 2024-11-07 23:18:22

Docker搭建mysql集群的相关文章

Docker搭建PXC集群

如何创建MySQL的PXC集群 下载PXC集群镜像文件 下载 docker pull percona/percona-xtradb-cluster 重命名 [[email protected] ~]# docker tag docker.io/percona/percona-xtradb-cluster pxc 创建内部网络 处于安全考虑,需要给PXC集群实例创建Docker内部网络 创建网段: [[email protected] ~]# docker network create --sub

搭建mysql集群

一.搭建mysql集群集群/群集:一组服务器提供相同的服务 ***以下方面只适用于ndbcluster存储引擎,其它类型请绕行!!!!!*** 1.mysql集群中服务器的角色数据节点 (ndbd):存储表里的数据SQL节点(sql):用户访问数据的接口.执行sql语句,不存储数据管理节点(mgmd):管理集群中的所有主机客户端 (client):访问数据        大致拓扑图:               client(172.30.13.X)                       

window平台如何搭建Mysql集群

为了提高系统的可用性实现系统7*24小时运行的目标,我们的项目搭建了一个mysql集群来增加系统的可靠性,下面说一下项目中mysql集群的搭建过程. 先谈谈对于搭建各种集群.分布式.负载均衡的理解,一个高可用.高性能.伸缩性强的分布式系统并不是一蹴而就,一下搭出这样的架构也有点不可能,至少个人觉得对于系统的运行状况没有一个可靠地保证,你不能保证架构中不会出现什么纰漏之处,因此架构师也是一点一点成长起来的,在小的架构解决不了目前的问题时.在不断的高并发.每年的双十一等这样的问题中成长起来的. 在我

Docker搭建RabbitMQ集群

Docker搭建RabbitMQ集群 Docker安装 见官网 RabbitMQ镜像下载及配置 见此博文 集群搭建 首先,我们需要启动运行RabbitMQ docker run -d --hostname my-rabbit -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 -p 25672:25672 -p 4369:4369 -v $PWD/rabbitmq-data:/var/rabbitmq/lib --name my_rab

docker 搭建zookeeper集群和kafka集群

docker 搭建zookeeper集群 安装docker-compose容器编排工具 Compose介绍 Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排.Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multicontainer Docker appl

docker 搭建PXC集群 与 redis集群

docker基本指令: 更新软件包 yum -y update 安装Docker虚拟机(centos 7) yum install -y docker 运行.重启.关闭Docker虚拟机 service docker start service docker stop 搜索镜像 docker search 镜像名称 下载镜像 docker pull 镜像名称 查看镜像 docker images 删除镜像 docker rmi 镜像名称 运行容器 docker run 启动参数 镜像名称 查看容

使用 Docker搭建 ZooKeeper 集群

1.镜像下载 docker pull zookeeper 2.启动 ZK 镜像 >>> docker run --name my_zookeeper -d zookeeper:latest 这个命令会在后台运行一个 zookeeper 容器, 名字是 my_zookeeper, 并且它默认会导出 2181 端口.接着我们使用: docker logs -f my_zookeeper 3.使用 ZK 命令行客户端连接 ZK 因为刚才我们启动的那个 ZK 容器并没有绑定宿主机的端口, 因此我

通过docker搭建ELK集群

单机ELK,另外两台服务器分别有一个elasticsearch节点,这样形成一个3节点的ES集群. 可以先尝试单独搭建es集群或单机ELK https://www.cnblogs.com/lz0925/p/12018209.html // 单机ELK https://www.cnblogs.com/lz0925/p/12011026.html // 三节点es集群 注意点 服务器内存:要求不低于8G,如果4G,没有跑其他程序的话,应该也可以,低于4G基本不用考虑. 我的系统:阿里云centOS7

Docker搭建redis-cluster集群三主三备

环境准备 系统:centos7.7 redis:5.0.5 master1:192.168.33.9:7071 master2:192.168.33.10:7072 master3:192.168.33.11:7073 slave1:192.168.33.9:7074 slave2:192.168.33.10:7075 slave3:192.168.33.11:7076 一.搭建redis集群(以下步骤在每台服务器上都要执行) 1.>安装docker yum -y install docker