在Docker下搭建MySQL双主双重集群(单机展示,与多机原理一致)
前言
Docker的安装部署&在Docker下MySQL的安装与配置
https://www.cnblogs.com/yumq/p/14253360.html在Docker进行单机主从复制MySQL集群的搭建(与多机原理流程大差不差)
https://www.cnblogs.com/yumq/p/14253812.html本文的实验的相关配置文件与运行指令
链接:https://pan.baidu.com/s/1Vyp_O1sAir-aqcDMJkEDNw 提取码:6666
Docker下MySQL的安装(双主双从)
创建MySQL配置文件夹
实验前应在本机的/home/
目录下创建mysql文件夹
# mysql1存放mastermysql1的配置文件
# mysql2存放mastermysql2的配置文件
# mysql3存放slavemysql1的配置文件
# mysql4存放slavemysql2的配置文件
sudo mkdir -p /home/mysql/docker-data/mysql1
sudo mkdir -p /home/mysql/docker-data/mysql2
sudo mkdir -p /home/mysql/docker-data/mysql3
sudo mkdir -p /home/mysql/docker-data/mysql4
创建完成之后目录结构是这样的
在MySQL配置文件夹下创建对应的配置文件
或将我的配置文件放进去,本文操作的相关文件在本文前言,拿出来改改即可进行实验测试
mysql1目录下的my.cnf
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
symbolic-links=0
#驼峰命名
lower_case_table_names=1
#主服务器唯一ID
server-id=4122
#启动二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可以设置为多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 我的是数据库叫ymq
binlog-do-db=ymq
#设置logbin格式 STATEMENT & ROW & MIXED
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto_increment_increment=2
#表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto_increment_offset=1
mysql2目录下的my.cnf
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
symbolic-links=0
#驼峰命名
lower_case_table_names=1
#主服务器唯一ID
server-id=4123
#启动二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可以设置为多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 我的是数据库叫ymq
binlog-do-db=ymq
#设置logbin格式 STATEMENT & ROW & MIXED
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto_increment_increment=2
#表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto_increment_offset=2
mysql3目录下的my.cnf
[mysqld]
#主服务器唯一ID
server-id=4124
#启用中继日志
relay-log=mysql-relay
mysql4目录下的my.cnf
[mysqld]
[mysqld]
#主服务器唯一ID
server-id=4125
#启用中继日志
relay-log=mysql-relay
四个配置文件中比较重要是server-id不能重复
Docker拉取 MySQL镜像
配置镜像加速器
以阿里云而言,正常拉取镜像的速度是很慢的。
这个时候就需要阿里云的法宝(容器镜像服务下的镜像加速器)
使用了加速器后,巨快无敌! 强烈推荐!
拉取MySQL5.7镜像
docker pull mysql:5.7
#可以查看一下镜像文件
docker iamges
因为我已经拉取过了,与第一次不太一样
Docker创建对应的MySQL容器
运行下面命令创建MySQL容器
相关的配置参数解释在 https://www.cnblogs.com/yumq/p/14253360.html
安装mastermysql1
docker run --name mastermysql1 -p 3306:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname mastermysql1 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql1/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql1/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql1/logs/:/var/log/mysql -d mysql:5.7
安装mastermysql2
docker run --name mastermysql2 -p 3307:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname mastermysql2 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql2/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql2/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql2/logs/:/var/log/mysql -d mysql:5.7
安装slavemysql1
docker run --name slavemysql1 -p 3308:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname slavemysql1 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql3/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql3/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql3/logs/:/var/log/mysql -d mysql:5.7
安装slavemysql2
docker run --name slavemysql2 -p 3309:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname slavemysql2 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql4/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql4/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql4/logs/:/var/log/mysql -d mysql:5.7
安装完成后查看容器的状态
#显示正在运行的容器
docker ps
#显示所有容器(可以查看没启动成功的容器)
docker ps -a
测试mysql是否正常
以mastermysql1为例子
注意看主机名字来区分在主机还是在容器
我主机名为 ymq
mastermysql1 mastermysql2 slavemysql1 slavemysql2 表示在容器
#查看容器
docker ps
#以交互模式进入容器命令如下
docker exec -it 容器ID/容器名字 /bin/bash
#进入mastermysql1 容器
docker exec -it mastermysql1 /bin/bash
#进入mysql 因为在创建容器是设置的密码为123456
mysql -u root -p123456
成功!!你可以进入不同容器来测试!!
搭建双主双从
关系如下 ,用单机不同端口模拟多云服务器分布式场景,
如果是多个云服务器注意防火墙
以及云服务器安全组
相关的安全问题
编号 | 角色 | IP地址与端口 | 机器名字 |
---|---|---|---|
1 | Master1 | 云服务器内网IP : 3306 | mastermysql1 |
2 | Slave1 | 云服务器内网IP : 3308 | slavemysql1 |
3 | Master2 | 云服务器内网IP : 3307 | mastermysql2 |
4 | Slave2 | 云服务器内网IP : 3309 | slavemysql2 |
两台主机容器 都授权复制从机权限
mastermysql1 授权的角色名字slave 密码为123123
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
#查看主机的状态
show master status;
mastermysql2 授权的角色名字slave2 密码为123123
GRANT REPLICATION SLAVE ON *.* TO 'slave2'@'%' IDENTIFIED BY '123123';
#查看主机的状态
show master status;
两台从机都进行同步操作
#在从机上配置需要复制的主机 Slava1 复制 Master1
#因为我是单机演示所以,需要给MASTER_PORT指定端口访问
CHANGE MASTER TO MASTER_HOST='主机的IP地址,公网内网都行',
MASTER_PORT=相应的端口,
MASTER_USER='角色名称',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;
Slave1 连接 Master1
#我的ip为云服务器内网IP
#端口是mastermysql1容器映射在 主机的端口3306
#mastermysql1 授权的用户 slave 密码为123456
#mastermysql1 logbin复制文件mysql-bin.000001,复制点为443
CHANGE MASTER TO MASTER_HOST='172.24.7.187',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=443;
#授权成功后
#开启slave
start slave;
#查看从服务器状态
show slave status\G;
#如果失败可以
#重置slave
reset slave;
#然后重新配置
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
当看到都为YES 时表示主从配置成功!
Slave2 连接 Master2
CHANGE MASTER TO MASTER_HOST='172.24.7.187',
MASTER_PORT=3307,
MASTER_USER='slave2',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=444;
#开启slave
start slave;
#查看从服务器状态
show slave status\G;
两个主机也需要设置成对方的从机
这样两个就分为一个主机和一个备机,虽然两个都是写主机,但不能同时进行写操作。
在master1 中设置
CHANGE MASTER TO MASTER_HOST='172.24.7.187',
MASTER_PORT=3307,
MASTER_USER='slave2',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=444;
#启动两台主服务器复制功能
start slave;
#查看从服务器状态
show slave status\G;
在master2中设置
CHANGE MASTER TO MASTER_HOST='172.24.7.187',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=443;
#启动两台主服务器复制功能
start slave;
#查看从服务器状态
show slave status\G;
mysql双主双从集群测试
成功!! 感谢阅读!!
在Docker下搭建MySQL双主双重集群(单机展示,与多机原理一致)的更多相关文章
- 基于keepalived搭建mysql双主高可用
目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能 ...
- (转)基于keepalived搭建MySQL的高可用集群
基于keepalived搭建MySQL的高可用集群 原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...
- keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群
keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...
- linux环境下配置mysql双主复制
简单来说,双主复制就是让两台mysql服务器中的数据保持同步,可以用来实现灾备和负载均衡 主机1 IP:192.168.200.128 主机2 IP:192.168.200.131 两台主机系统均为c ...
- 通过keepalived搭建MySQL双主模式的高可用集群系统
1. 配置MySQL双主模式 1.修改my.cnf配置文件 默认情况下,MySQL的配置文件是/etc/my.cnf,在配置文件的[mysqld]段添加如下内容: server-id=1 log-bi ...
- MySQL 双主问题集
最近试用MySQL高可用方案,需要配MySQL双主,对期间遇到的问题做下记录. 1.导出锁表问题 mysqldump 命令增加参数 --skip-opt -q 可避免导出时锁表: 2.导出\导入所有数 ...
- 基于keepalived搭建MySQL的高可用集群
MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...
- 利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境
应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...
- Docker下配置双机热备PXC集群
架构: 步骤: 1.安装centos7 ,设置宿主机IP:192.168.1.224 2.先更新yum软件管理器,再安装docker 1.yum -y update 2.yum install - ...
随机推荐
- 第 4 篇 Scrum 冲刺博客
每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 实现收藏夹功能 实现重设计的个人界面功能 无 ...
- Filebeat+Logstash自定义多索引
方案一:推荐 [root@elk-node-1 filebeat]# cat filebeat.yml|egrep -v "^$|^#|#" filebeat.inputs: - ...
- linux tar 压缩和解压缩
tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个. 下面 ...
- C# 高性能对象映射
1.之前在使用AutoMapper 框架感觉用着比较不够灵活,而且主要通过表达式树Api 实现对象映射 ,写着比较讨厌,当出现复杂类型和嵌套类型时性能直线下降,甚至不如序列化快. 2.针对AutoMa ...
- Android全面解析之Activity生命周期
前言 很高兴遇见你~ 欢迎阅读我的文章. 关于Activity生命周期的文章,网络上真的很多,有很多的博客也都讲得相当不错,可见Activity的重要性是非常高的.事实上,我猜测每个android开发 ...
- CSS3全览_文本+视觉+盒子+背景颜色
CSS全览_文本+视觉+盒子+背景颜色 目录 CSS全览_文本+视觉+盒子+背景颜色 1. 文本属性 2. 视觉格式化基础 3. 内边距, 边框, 轮廓和外边距 4. 颜色, 背景和渐变 作者: ht ...
- MyBatis详细源码解析(上篇)
前言 我会一步一步带你剖析MyBatis这个经典的半ORM框架的源码! 我是使用Spring Boot + MyBatis的方式进行测试,但并未进行整合,还是使用最原始的方式. 项目结构 导入依赖: ...
- 面试 21-面试题整理 by smyhvae
21-面试题整理 by smyhvae #JavaScript #存储相关:请描述以下cookie.localStorage.sessionStorage的区别 在H5之前,cookie一直都是本地存 ...
- [日常摸鱼]bzoj1001狼抓兔子-最大流最小割
题意就是求最小割- 然后我们有这么一个定理(最大流-最小割定理 ): 任何一个网络图的最小割中边的容量之和等于图的最大流. (下面直接简称为最大流和最小割) 证明: 如果最大流>最小割,那把这些 ...
- 神经网络高维互信息计算Python实现(MINE)
论文 Belghazi, Mohamed Ishmael, et al. " Mutual information neural estimation ." Internatio ...