为了账号安全,请及时绑定邮箱和手机立即绑定

Docker前后端分离实战之搭建MYSQL集群

这门慕课实战对想了解Docker的人很有帮助。感谢神思者l大佬

图片描述
图片描述

renren-fast

后台:SpringBoot+SSM+Shiro+swagger(API调试)+Redis+JWT(单点登录)

Linux回顾

图片描述

图片描述

  • 查看、启动、关闭、重启防火墙 firewall-cmd -state -start -stop -restart
  • 端口管理
  • firewall-cmd -permanent --add-port=8080-8085/tcp
  • firewall-cmd -reload
  • firewall-cmd -permanent-remove-port=8080-8085/tcp
  • firewall-cmd --list-ports 查看端口
  • firewall-cmd–permanent–list-services 查看使用网络的程序

Docker创建的所有虚拟实例共用同一个Linux内核,对硬件占用较小,属于轻量级虚拟机

图片描述

图片描述

图片描述

导入导出镜像

图片描述

图片描述

图片描述

单节点缺点

  • 大型互联网程序用户群体庞大,所以架构必须要特殊设计
  • 单节点的数据库无法满足性能上的要求
  • 单节点的数据库没有冗余设计,无法满足高可用
    图片描述

Mysql集群方案

图片描述

PXC (Percona XtraDB Cluster)

建议PXC使用PerconaServer(MySQL改进版,性能提升很大)
图片描述
图片描述

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

安装PXC镜像

图片描述

创建内部网络

图片描述

创建Docker卷

业务数据保存在宿主机中

图片描述

docker volume rm v1

train

下载(略) docker tag 镜像名 命名

创建内部网络

出于安全考虑,需要给PXC集群实例创建Docker内部网络
docker内置网段172.17.0.*
图片描述

docker network create --subnet=10.0.75.1/24 net1 创建网段
docker inspect net1 
docker network rm net1

创建PXC容器

只需要向PXC镜像传入运行参数就能创建出PXC容器
注意:要等待前一个docker镜像中的mysql初始化(数据库初始化比较耗时),如果第一个没有初始化成功,就提前创建了第二个数据库,第二个数据库就会闪退

第一个节点
 docker run -d -p 4406:3306 -v v1:/f/skillTrain -e MYSQL ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 --privileged --name=node1 --net=net1 --ip 10.0.75.2 pxc
第二个节点
docker run -d -p 4407:3306 -v v2:/f/skillTrain -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1        --privileged --name=node2 --net=net1 --ip 10.0.75.2 pxc
第三个节点
docker run -d -p 4408:3306 -v v3:/f/skillTrain -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=net1 --ip 10.0.75.3 pxc
第四个节点
docker run -d -p 4409:3306 -v v4:/f/skillTrain -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node4 --net=net1 --ip 10.0.75.4 pxc
第五个节点
docker run -d -p 4409:3306 -v v5:/f/skillTrain -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node5 --net=net1 --ip 10.0.75.5 pxc

P.S 搞这里由于马虎报错了,docker logs -f containerId 查看错误日志

负载均衡

图片描述
图片描述

docker pull haproxy
宿主机
touch /home/soft/haproxy.cfg 配置文件
docker run -it -d -p 4001:8888-p 40003306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name  haproxy--privileged --net=net1 haproxy
进入容器(配置文件)
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
mysql创建账号
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';

图片描述

  • 文件映射应该不用讲了把
  • 然后4001是用来可视化监控集群的

高可用(使用Keepalived实现双击热备)

单节点Haproxy不具备高可用,必须要有冗余设计

图片描述
图片描述

docekr exec -it 容器名  exit是退出容器界面
yum install keepalived
Keepalived的配置文件是/etc/keepalived/keepalived.conf
最后一步 service keepalived start

图片描述

  • interface 网卡设备
  • virtual_router_id 虚拟路由标识,MASTER和BACKUP的虚拟路由标识必须一致。标识可以是0~255
  • priority MASTER权重要高于BACKUP数字越大优先级越高
  • advert_int MASTER与BACKUP节点间同步检查的时间间隔,单位为妙。主备之间必须一致
  • authentication 主从服务器验证方式,主备必须使用相同的密码才能正常通信
  • virtual_ipaddress 虚拟IP地址。可以设置多个虚拟IP地址 每行一个

热备份数据

mysqldump属于冷备份

  • 冷备份是关闭数据库时候的备份方式,通常做法是拷贝数据文件
  • 冷备份是最简单最安全的一种备份方式
  • 大型网站无法做到关闭业务备份数据,所以冷备份不是最佳选择
  • 冷备份是关闭数据库时候的备份方式,通常做法是拷贝数据文件
  • 冷备份是最简单最安全的一种备份方式
  • 大型网站无法做到关闭业务备份数据,所以冷备份不是最佳选择
    图片描述
  • 热备份是在系统运行的状态下备份数据,也是难度最大的备份
  • MySQL常见的热备份有LVM和XtraBackup两种方案
  • 建议使用XtraBackup热备MySQL
    • XtraBackup备份过程不锁表、快速可靠
    • XtraBackup备份过程不会打断正在执行的事务
    • XtraBackup能够基于压缩等功能节约磁盘空间和流量
  • LVM备份需要锁表,只能读

  • 全量备份是备份全部数据。备份过程时间长,占用空间大
  • 增量备份是只备份变化的那部分数据。

图片描述
图片描述

  1. 创建数据卷
docker volume create backup
  1. 然后映射backup数据卷,因为是先删除之前的节点,这个时候要关联node2节点
 docker run -d -p 4406:3306 -v v1:/f/skillTrain -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v backup:/f/data -e CLUSTER_JOIN=node2 --privileged --name=node1 --net=net1 --ip 10.0.75.2 pxc

  1. PXC容器中安装XtraBackup,并执行备份
dcoer exec -it node1 bash
apt-get update
apt-get install percona-xtrabackup-24
innobackupex --user=root --password=abc123456 /data/backup/full
查看数据卷在哪
docker inspect backup

  1. 数据库可以热备份,但是不能热还原,只能冷回复。为了避免恢复过程中的数据同步,我们采用空白的MySQL还原数据,然后再建立PXC集群
  2. 还原数据前要将未提交的事务回滚,还原数据之后重启MySQL
rm -rf /var/lib/mysql/*
innobackupex --user=root --password=abc123456 --apply-back /data/backup/full/2018/04-15105-09-07/ 回滚
innobackupex --user=root --password=abc123456 --copy-back /data/backup/full/2018/04-15105-09-07/ 还原

点击查看更多内容
17人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
1.6万
获赞与收藏
1807

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消