登录
首页 >  数据库 >  MySQL

CentOS7 快速搭建基于Rancher 1.6 的容器自动化资源调度平台(二) MySQL主从复制

来源:SegmentFault

时间:2023-02-24 14:57:39 127浏览 收藏

小伙伴们有没有觉得学习数据库很有意思?有意思就对了!今天就给大家带来《CentOS7 快速搭建基于Rancher 1.6 的容器自动化资源调度平台(二) MySQL主从复制》,以下内容将会涉及到MySQL、MySQL主从、mysql-replication,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

概要

主要是基于Rancher搭建MySQL5.7 的主从复制的双机模式

添加服务 -MySQL57-master

应用-> 用户 -> 选择对应的应用 ->添加服务

图中镜像名称:mysql:5.7.23

clipboard.png

对该服务添加一些信息

这个就同 Docker 启动 一个容器一样,有些需要指定 端口、卷、或者变量
配置环境变量

clipboard.png
图中变量
MYSQL_ROOT_PASSWORD=123456
TZ=Asia/Shanghai
映射卷

clipboard.png
路劲映射为:
/d01/test/mysql/db:/var/lib/mysql
/d01/test/mysql/conf:/etc/mysql/conf.d
/d01/test/mysql/backup:/backup
配置调度规则
所谓调度规则就是Rancher会根据该配置的规则,觉得该容器启动的时候会在哪个主机上面运行。
这个标签就是在添加主机的时候配置,添加主机完成之后也可以添加标签

调度规则:
如果配置的标签,也就是键值对只在一台主机上出现,那么该容器就是只在该主机上运行,但是如果这个标签在多台主机上出现,那么该容器就会随机选一台主机运行。

clipboard.png
启动成功

clipboard.png

添加Salve节点 - MySQL57-salve

在添加 MySQL的从节点的时候,有两个地方需要修改
  • 服务名称
  • 调度规则: 不能让所有的mysql都是同一台主机上面运行

配置图例如下:

clipboard.png

clipboard.png

配置负载均衡规则

该配置主要是将内部端口进行转换,掩护真正开发的接口

添加负载均衡

clipboard.png
开始配置负载均衡的内容

clipboard.png

clipboard.png

defaults
    mode tcp
    retries 2               #两次连接失败就认为是服务器不可用,也可以通过后面设置
    option redispatch       #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    option abortonclose     #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
    maxconn 4096            #默认的最大连接数
    timeout client          0
    timeout server          0
将调度规则配置到安装rancher的主机上

clipboard.png
ok! 等待 该负载均衡启动成功!
使用Navicat 测试数据库连接

clipboard.png

配置MySQL主从复制

MySQL主从复制和读写分离的区别

一直依赖都有人将主从复制和读写分离是混淆的。但是在我看来MySQL读写分离跟主从复制根本就是两回事。

主从复制

首先主从复制一种数据冗余的技术,简单来说是用数据备份的。体现为一个数据库节点将数据以异步同步的形式同步到另外数据库节点的技术。首先这是一种异步的方式进行同步的,这种异步同步数据也不是每时每刻进行的,所以这种方式的数据同步是保证了数据实时一致性。

读写分离

而读写分离,简单来理解就是将针对一个数据库的读写操作分离出来,某个数据库只进行读操作、某个数据库进行写操作,而在主从复制是可以应用到读写分离中来的。
因为为了保证数据库的数据的完整性,写操作时只能在主库进行的,而读操作时可以在主库和从库进行的。但是很多人更多是主库读、从库写这样子进行操作的。

大概过程如下图所示:

clipboard.png
上面我瞎说一堆理论,哪如何配置这样的主从复制的环境呢?

搭建
# 注意 /d01/test/mysql/conf/mysql-local.cnf 这个路劲按自己映射的路径配置即可
# 这个路径映射的是 容器的 /etc/mysql/conf.d/ 这路径

# 这个是主数据库的配置
server_id = 101
log-bin=mysql-bin

# 这个是从服务器的配置
server_id=104  ###从服务器server_id
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin

注意

如果你在本地配置的mysql配置没有生效,记得将配置文件后缀改为*.cnf

查看该帮助 MySQL !includedir not working

但是如果您添加上了上面的配置仍然没有生效的话,怎么办?

clipboard.png

查看容器启动时候的日志

# 命令如下:
docker logs 

然后你可能看到的日志如下:

clipboard.png

大概意思就是说:

-- 在主服务器中执行以下命令
show master status;

结果:

clipboard.png
记住
-- 分配账号密码为 slave/123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

第三步: 在从服务器中创建同步的连接

change master to master_host='192.168.182.103', master_port=18083, master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=968;

-- 注意上面几个参数:
master_host : 主服务器的ip
master_port : 主数据库对外开放的端口 也就是在上面负载均衡中配置
master_user : 主服务器配置的账号
master_password : 密码
master_log_file: 这个就是上面要记录的那个 File 的值
master_log_pos: 这个是Position的值

clipboard.png

第四步:开始同步

start slave;

第五步:查看同步状态

SHOW SLAVE STATUS;

clipboard.png
只有这两个都是Yes才算是成功的!

其他错误情况解决

  • Slave IO Running 的值一直是 Connecting 状态
show variables like 'read_only';

clipboard.png
  • 配置只读

clipboard.png
  • 创建非
    -- 在 root 账号下创建
    -- 格式:create user "username"@"host" identified by "password";
    -- 授权: grant select on test.* to 'user1'@'localhost';  /*给予查询权限*/
    -- 刷新权限 : flush privileges;
    
    --创建一个 hunter/123456 的账户
    create user "hunter"@"localhost" identified by "123456";
    
    -- 给hunter分配 test 数据库下 select,delete,update,insert,create 的权限
    grant select,delete,update,insert,create on test.* to 'hunter'@'localhost';
    
    -- 刷新权限
    flush privileges;
    如果是
    -- 删除 hunter
    drop user 'hunter'@'localhost';
    
    create user "hunter"@"%" identified by "123456";
    
    grant select,delete,update,insert,create on test.* to 'hunter'@'%';
    
    flush privileges;
    使用 Navicat 链接成功, 尝试在从库中添加数据,报以下错误!
    clipboard.png

    OK! 大功告成!

    好了,本文到此结束,带大家了解了《CentOS7 快速搭建基于Rancher 1.6 的容器自动化资源调度平台(二) MySQL主从复制》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>