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
关联主机 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