1 引言

      在之前的文章中提到过相关搭建方法,具体请参考《MySQL主从数据库搭建》这篇文章本文主要讲述双主双从,双主多从集群搭建方式 这里要问一个问题,为什么MySQL要搭建数据库集群呢?我想应该有以下几点原因:

2 双主双从

      搭建双主双从需要使用6台服务器,两个主节点,每个主节点各自有两个从节点,这里采用的是docker部署方式,如果缺乏docker运行环境,请参考《CentOS7安装Docker运行环境》这篇文章进行配置配置完成后使用下列语句拉去MySQL镜像创建运行MySQL镜像这里采用了MySQL5.7.26版本进行创建创建语句如下:

docker run -p 3306:3306 --name mysql --restart=always --privileged=true -v /mnt/mysql/log:/var/log/mysql -v /mnt/mysql/data:/var/lib/mysql -v /mnt/mysql/conf:/etc/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.26

      使用docker ps 查看一下执行结果
在这里插入图片描述
      这6台服务器都按照上述方法配置后就可以开始搭建集群了。

2.1 集群划分

      6台服务器如下表所示,读者可根据自己的实际情况选择其他的固定IP。

序号 角色 IP地址
1 master1 172.16.17.231
2 master2 172.16.17.232
3 slave1 172.16.17.233
4 slave2 172.16.17.234
5 slave3 172.16.17.235
6 slave4 172.16.17.236

2.2 集群架构

      其中一个主机master1负责处理所有写请求,当master1宕机后,master2负责接替master1对外恢复数据库服务slave1、slave2、slave3、slave4负责所有读请求,分摊读请求的压力。
在这里插入图片描述

2.3 配置

      根据前文提到的目录(/mnt/mysql/conf)下创建my.cnf文件

2.3.1 主节点

      在my.cnf文件添加如下配置

[mysqld]
# 设置字符
character-set-server=utf8mb4
# 设置排序规则
collation-server=utf8mb4_general_ci
# 允许最大连接
max_connections=200
# 设置临时表最大大小
tmp_table_size=128M
# 设置最大内存使用
max_heap_table_size=1024M
# 服务器唯一ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置需要复制数据库,这里test为例
binlog-do-db=db1
# 设置不需要复制数据库(可以设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information-schema
# 设置logbin格式
binlog_format=statement
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
[client]
default-character-set=utf8mb4

      以db1作为需要同步数据库,binlog-do-db这个属性也可以根据读者需要改成自己需要同步数据库名称注意:log-slaveupdates这个属性一定要添加不然修改master1的数据master读取到之后,它的从机无法同步数据

2.3.2 从节点

      修改配置文件

vi /mnt/mysql/conf/my.cnf

      具体配置如下:

[mysqld]
# 设置字符
character-set-server=utf8mb4
# 设置排序规则
collation-server=utf8mb4_general_ci
# 允许最大连接
max_connections=200
# 设置临时表最大大小
tmp_table_size=128M
# 设置最大内存使用量
max_heap_table_size=1024M
server-id=3
relay-log=mysql-relay
[client]
default-character-set=utf8mb4

      按照上面对主从节点的配置,根据架构图中标识的server-id分别修改6台服务器的MySQL配置文件

2.3.3 重启服务

      使用下述命令分别重启6台服务器的MySQL容器

docker restart mysql

2.3.4 创建同步slave账号并授权

步骤1: 分别进入master1和master2服务器docker容器登录MySQL

docker exec -it mysql /bin/bash
mysql -uroot -p123456

步骤2: 创建slave账号并授权

create user 'slave'@'%' IDENTIFIED by '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

2.3.5 主从配置

步骤1: 登录主节点,查询master1的状态

msql -uroot -p123456
show master status

执行结果如下:
在这里插入图片描述
      记录File和Position两列的值。用以配置从节点
步骤2:登录从节点,配置需要复制主机
      登录从节点

msql -uroot -p123456
CHANGE MASTER TO MASTER_HOST='主节点IP地址',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='刚刚记录的File值',MASTER_LOG_POS=刚刚记录的Position;

      示例

CHANGE MASTER TO MASTER_HOST='172.16.17.231',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

步骤3:启动从节点复制功能

start slave;

步骤4:查看从节点状态

show slave statusG

执行结果

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.17.231
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay.000003
                Relay_Log_Pos: 367
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 570
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: be75605d-4620-11ee-8b15-0242ac110002
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

      查看Slave_IO_Running、Slave_SQL_Running属性都是Yes,则说明主从配置成功
slave3 重复步骤1-5进行配置,slave2、salve4与slave1、slave3类似,只不过登录主机换成master2,步骤2中的ip需要换成master2的IP(172.16.17.232)

2.3.6 双主配置

      与主从配置类似,master2需要复制master1、master1需要复制master2
master2复制master1:

CHANGE MASTER TO MASTER_HOST='172.16.17.231',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

master1复制master2:

CHANGE MASTER TO MASTER_HOST='172.16.17.232',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

主节点启动从服务器复制功能

start slave;

查看主节点从服务状态:

show slave statusG;

      具体细节语句会和实际略有出入,读者根据自己的环境调整一下IP和端口之类的参数

额外的一些命令(如无需要可以跳过):

# 停止从服务复制功能
stop slave;
# 重新配置主从
stop slave;
reset master;

3 测试

      master1创建一张表并插入一条数据,master2、slave1、slave2、slave3、slave4也做出了相应的变更即代表成功,master2反之亦然。

原文地址:https://blog.csdn.net/weixin_37624828/article/details/134668917

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_5089.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注