【Docker】MySql主从复制-2-集群搭建

1,集群搭建概述

1.1,是什么

集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
MySQL集群技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障。

1.2,优点

高可伸缩性:服务器集群具有很强的可伸缩性。 随着需求和负荷的增长,可以向集群系统添加更多的服务器。在这样的配置中,可以有多台服务器执行相同的应用和数据库操作。
高可用性:在不需要操作者干预的情况下,防止系统发生故障或从故障中自动恢复的能力。通过把故障服务器上的应用程序转移到备份服务器上运行,集群系统能够把正常运行时间提高到大于99.9%,大大减少服务器和应用程序的停机时间。

1.3,缺点

我们知道集群中的应用只在一台服务器上运行,如果这个应用出现故障,其它的某台服务器会重新启动这个应用,接管位于共享磁盘柜上的数据区,进而使应用重新正常运转。我们知道整个应用的接管过程大体需要三个步骤:侦测并确认故障、后备服务器重新启动该应用、接管共享的数据区。因此在切换的过程中需要花费一定的时间,原则上根据应用的大小不同切换的时间也会不同,越大的应用切换的时间越长。

2.搭建思路

在这里插入图片描述

3,搭建准备工作

3.1,使用docker启动5台Mysql[至少要5台哦]

在这里插入图片描述

前面主从已启动了两个,所以只用启动三个就够了
#docker run --name M1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456  -d mysql:5.7
#docker run --name M1S1 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456  -d mysql:5.7
docker run --name M1S2 -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123456  -d mysql:5.7
docker run --name M2 -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456  -d mysql:5.7
docker run --name M2S1 -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123456  -d mysql:5.7

3.2,配置文件的修改

先准备5 个配置文件
在这里插入图片描述
分别修改 因为在上面的主从里面已有两个配置文件,所以只用创建三个就够了m1s2.cnf m2.cnf m2s1.cnf
M2 需要添加一个配置项:
M2 会从M1 复制数据,但是M2 从M1复制的数据,不会记录下来,则M2S1 里面没有数据!
我们需要打开M2的级联复制功能,让M2 也能记录从M1 里面复制的数据
最后结果
在这里插入图片描述

配置文件修改好了后,复制到容器里面,并且重启容器!
#docker cp m1.cnf M1:/etc/mysql/conf.d/docker.cnf
#docker cp m1s1.cnf M1S1:/etc/mysql/conf.d/docker.cnf
docker cp m1s2.cnf M1S2:/etc/mysql/conf.d/docker.cnf
docker cp m2.cnf M2:/etc/mysql/conf.d/docker.cnf
docker cp m2s1.cnf M2S1:/etc/mysql/conf.d/docker.cnf

3.3,重启新建的三个容器

docker restart M1S2 M2 M2S1

4,进入容器执行SQL

在搭建mysql的集群时,先清空所有机器里面的数据
现在有数据的时:M1 M1S1,只需要清空M1的数据,就都没有了
将之前新建的db1 db2 删除就ok

4.1,M1修改

不动

4.2,M1S1修改

不动

4.3,M1S2修改(从机)

给他设置一个主机就ok

docker exec -it M1S2 bash
mysql -uroot -p123456

在这里插入图片描述

扫描二维码关注公众号,回复: 11500033 查看本文章
关联主机
change master to master_host="47.97.173.181",master_port=3307,master_user="rep",master_password="123456",master_log_file="master.000001",master_log_pos=745;
启动主从
start slave ;
查看状态
show slave status \G;

在这里插入图片描述

4.4,M2修改

进入M2使用Root登陆
 
docker exec -it M2 bash
mysql -uroot -p123456
1 新建用户
create user 'rep1'@'%' identified by '123456';
2 给用户授权
grant replication slave on *.* to 'rep1'@'%';
3 刷新权限
flush privileges;
4 使用新的用户尝试登录
M2 做为M1的从机需要执行的sql:(登录m2时要使用root用户)
 
change master to master_host="47.97.173.181",master_port=3307,master_user="rep",master_password="123456",master_log_file="master.000001",master_log_pos=745;
start slave ;
show slave status \G;

4.5,M2S1修改

进入容器

docker exec -it M2S1 bash
mysql -uroot -p123456

M2S1 是M2的从机,执行的sql
进入M2查看pos

change master to master_host="47.97.173.181",master_port=3310,master_user="rep1",master_password="123456",master_log_file="master.000001",master_log_pos=1603;
start slave ;
show slave status \G;

5,验证集群是否成功

使用工具连接上所有的mysql

往M1 写数据 看 M2S1
在M1 新建数据库
观察M2S1
往M1 写数据,看M1S1

猜你喜欢

转载自blog.csdn.net/wyn_365/article/details/107301098