CentOS7_MySQL集群

这里写目录标题

  • 概述
    • 集群目的
  • 集群案例
    • 准备环境
    • 一主一从(M-S)(手动)
      • 主服务器配置
      • 从服务器配置
  • 一主一从(M-S)(自动)
  • 双主双从(MM-SS)
    • 双主
      • 前言
      • 设置pg1为pg0的主服务器
    • 双从

概述

集群目的

  • 负载均衡:解决高并发
  • 高可用HA:服务可用性
  • 远程灾备:数据有效性
    CentOS7_MySQL集群_第1张图片
    CentOS7_MySQL集群_第2张图片
    1.在主库上把数据更改记录到二进制日志文件中
    2.备库I/O线程将主库上的日志复制到自己的中继日志中
    3.备库SQL线程读取中继日志中的事件,将其重放到备库数据库上

集群案例

准备环境

  • 五台全新服务器
  • 全新安装mysql必须每台单独安装,因为数据库ID不同
  • 五台主机分别命名:
    pg0.zhipenghe.com
    pg1.zhipenghe.com
    pg2.zhipenghe.com
    pg3.zhipenghe.com
    pg4.zhipenghe.com
  • 每台配置好域名解析,也可使用DNS
    搭建DNS服务器详情参阅:DNS服务器搭建

一主一从(M-S)(手动)

主服务器配置

一、准备数据
CentOS7_MySQL集群_第3张图片
二、pg0.zhipenghe.com上的二进制日志开启

[root@pg0 ~]# vim /etc/my.cnf

[mysqld]
log_bin			//开启二进制日志
server_id=1		//数据库id设置为1,每一台数据库id不能相同

三、创建复制数据用户

mysql> grant replication slave,replication client on *.* to 'rep'@'192.168.100.%' identified by 'Xyz@123456';

四、主服务器备份
有关备份请参阅:数据库备份

[root@pg0 ~]# mysqldump -p'Xyz@123456' --all-databases \
> --single-transacation \
> --master-data=2 \
> --flush-logs \
> >`date +%F`-mysql-all.sql
[root@pg0 ~]# ls
2021-05-16-mysql-all.sql

五、将备份文件拷贝到从服务器上

[root@pg0 ~]# scp -r 2021-05-16-mysql-all.sql pg1.zhipenghe.com:/tmp

观察二进制日志分割点

[root@pg0 ~]# vim 2020-05-16-mysql-all.sql

在这里插入图片描述
六、更新主服务器数据

mysql> insert into class.y2101 values (9,"JH",26,'1');
mysql> insert into class.y2101 values (10,"GW",19,'0');

从服务器配置

一、检查rep用户是否可用

[root@pg1 ~]# mysql -h pg0.zhipenghe.com -urep -p'Xyz@123456'

二、启动服务器序号

[root@pg1 ~]# vim /etc/my.cnf

[mysql]
server_id=2

[root@pg1 ~]# systemctl restart mysqld	//重启服务是否正常

三、手动同步数据

mysql> set sql_log_bin=0
mysql> source /tmp/2021-05-16-mysql-all.sql

四、设置主服务器

mysql> change master to master_host='pg0.zhipenghe.com',	//主服务器主机名
    -> master_user='rep',					//拷贝使用的用户
    -> master_password='Xyz@123456',		//密码
    -> master_log_file='pg0-bin.000002',	//从哪儿开始考
    -> master_log_pos=154;					//日志裁断的节点
mysql> start slave;							//启动从设备
mysql> show slave status\G;					//查看主服务器状态

如果查看到以下两行显示YES表示设置成功了
CentOS7_MySQL集群_第4张图片
五、测试
在主服务器上更新数据,到从服务器查看

一主一从(M-S)(自动)

前面步骤与手动基本一毛一样
只需要在主和从的/etc/my.cnf配置文件中加入以下行数据:

[mysqld]
...
gtid_mode=ON		//强制开启Gtid
enforce_gtid_consistency=1	//自动协商id

在设置主服务器的时候将代码改为

mysql> change master to master_host='pg0.zhipenghe.com',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1;		//自动进行日志位置的记录

设置完成之后就可以进行测试了

双主双从(MM-SS)

双主

前言

  • 前面的实验,主服务器单节点设置,假如主服务器故障会影响全局的写入时间,故设置双是主
  • 目前已经设置了pg0为pg1的主服务器
  • 只需要设置pg1为pg0的主服务器即可

设置pg1为pg0的主服务器

一、在pg1上进行授权

mysql> grant replication slave,replication client on *.* to 'rep'@'192.168.100.%' identified by 'Xyz@123456';
mysql> flush privileges;

二、设置pg0的主服务器

mysql> change master to master_host='pg1.zhipenghe.com',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1;
mysql> start slave;
mysql> show slave status\G; 

三、测试
在pg0上插入数据在pg1上查看
在pg1上插入数据在pg0上查看
注意:这时还需要开启pg1上的二进制日志记录才能成功

双从

一、同步现有数据库

  • pg0
[root@pg0 ~]# mysqldump -p'Xyz@123456' \
> --all-databases \
> --master-data=2 \
> --flush-logs \
> > `date +%F`-mysql-all.sql
[root@pg0 ~]# scp -r 2021-05-17-mysql-all.sql pg2.zhipenghe.com:/tmp
[root@pg0 ~]# scp -r 2021-05-17-mysql-all.sql pg3.zhipenghe.com:/tmp
  • pg2
[root@pg2 ~]# mysql -p'Xyz@123456' < /tmp/2021-05-17-mysql-all.sql
  • pg3
[root@pg3 ~]# mysql -p'Xyz@123456' < /tmp/2021-05-17-mysql-all.sql

二、启动从服务器id、gtid

  • pg2
[root@pg2 ~]vim /etc/my.cnf

[mysqld]
server-id=3
gtid_mode=ON					
enforce_gtid_consistency=1		
master-info-repository=TABLE	//把主的信息存在表里,安全
relay-log-info-repository=TABLE	//把中继日志也存在表里,安全

[root@pg2 ~]# systemctl restart mysqld
  • pg3
[root@pg3 ~]# vim /etc/my.cnf

[mysqld]
server-id=4
gtid_mode=ON
enforce_gtid_consistency=1		
master-info-repository=TABLE	//把主的信息存在表里,安全
relay-log-info-repository=TABLE	//把中继日志也存在表里,安全

[root@pg3 ~]# systemctl restart mysqld

三、设置主服务器

  • pg2
mysql> change master to master_host='pg0',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1
    -> for channel 'pg0.zhipenghe.com';		//第一条通道
mysql> change master to master_host='pg1',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1
    -> for channel 'pg1.zhipenghe.com';		//第二条通道
mysql> start slave;
mysql> show slave status\G;
  • pg2
mysql> change master to master_host='pg0',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1
    -> for channel 'pg0.zhipenghe.com';		//第一条通道
mysql> change master to master_host='pg1',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1
    -> for channel 'pg1.zhipenghe.com';		//第二条通道
mysql> start slave;
mysql> show slave status\G;

四、测试

  • pg0插入数据
  • pg1插入数据
  • pg2查看
  • pg3查看

你可能感兴趣的:(mysql,数据库,linux,运维,服务器)