MySQL如何搭建集群(附搭建过程详细命令及步骤截图)

概述

集群架构设计的三个维度:可用性、扩展性、一致性。

可用性主要是站点、服务、数据的高可用。

扩展性主要是加从库或者是分库分表。

一致性主要是如何保证访问数据的一致。

主从模式实现原理

实现步骤:

1)主库将数据库的变更操作记录到Binlog日志文件中

2)从库读取主库中的Binlog日志文件信息写入到从库的Relay Log中继日志中

3)从库读取中继日志信息在从库中进行Replay,更新从库数据信息

具体触发机制如下:

1)Master服务器对数据库更改操作记录在Binlog中,BinlogDump Thread接到写入请求后,读取 Binlog信息推送给Slave的I/O Thread。

2)Slave的I/O Thread将读取到的Binlog信息写入到本地Relay Log中。

3)Slave的SQL Thread检测到Relay Log的变更请求,解析relay log中内容在从库上执行。

存在的问题:

1)主库宕机后,数据可能丢失

2)从库只有一个SQL Thread,主库写压力大,复制很可能延时

解决的办法:

1)半同步复制—解决数据丢失的问题

2)并行复制----解决从库复制延迟的问题

实现步骤

1)修改主库my.cnf配置文件

执行命令vim /etc/my.cnf

log_bin=mysql-bin #开启binlog,文件名称为mysql-bin

server-id=1 #指定server-id

sync-binlog=1 #执行几次后进行磁盘同步1就代表次数

#忽略以下库的同步

binlog-ignore-db=performance_schema

binlog-ignore-db=information_schema

binlog-ignore-db=sys

#指定同步的库 不设置就是同步所有库

binlog-do-db=test

2)完成配置修改重启mysql

systemctl restart mysqld

3)主库授权

#登录MySQL

mysql -uroot -p

#主库授权设置

grant replication slave on . to ‘root’@’%’ identified by ‘root’;

grant all privileges on . to ‘root’@’%’ identified by ‘root’;

#刷新权限,立即生效

flush privileges;

#查看主库状态

show master status;

4)从库配置修改

执行命令 vim /etc/my.cnf

server-id=2

relay_log=mysql-relay-bin #relay-log名称

read_only=1 #此库只读

5)完成配置修改重启mysql

systemctl restart mysqld

6)从库启动授权

#登陆数据库设置复制的主库

change master to master_host=‘47.106.138.46’,master_port=3306,master_user=‘root’,

master_password=‘root’,master_log_file=’ master-bin.000002’,master_log_pos=154;

#查看从库状态

show slave status \G;

#开启从库

start slave;

#停止从库

stop slave;

#重新绑定主库

reset master;

#主库修改配置,从库无法启动,重置

reset slave;

半同步复制

MySQL让Master在某一个时间点等待Slave节点的ACK消息,接收到ACK消息后才进行事务提交。

实现步骤

1)主库半同步复制设置

#是否支持动态加载

select @@have_dynamic_loading;

#查看插件列表

show plugins;

#安装半同步复制插件并起别名

install plugin rpl_semi_sync_master soname ‘semisync_master.so’;

#查看半同步复制相关参数

show variables like ‘%semi%’;

#开启半同步复制

set global rpl_semi_sync_master_enabled=1;

#设置超时时间,默认10秒,设置为1秒

set global rpl_semi_sync_master_timeout=1000;

2)从库半同步复制设置

#是否支持动态加载

select @@have_dynamic_loading;

#查看插件列表

show plugins;

#安装从库半同步复制插件并起别名

install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;

#查看半同步复制相关参数

show variables like ‘%semi%’;

#开启从库半同步复制

set global rpl_semi_sync_slave_enabled=1;

#重新加载从库

stop slave;

start slave;

切换到/var/log目录,查看mysqld.log日志文件核验半同步复制是否生效

并行复制

当事务提交时,通过在主库上的二进制日志中添加组提交信息,并将在单个操作中写入到二进制日志中。如果多个事务能同时提交成功,那么它们意味着没有冲突,因此可以在Slave上并行执行。

实现步骤

1)主库设置

#查看数据库组信息

show variables like ‘%binlog_group%’;

#设置延迟时间

set binlog_group_commit_sync_delay=1000;

#设置组内事务数量

set binlog_group_commit_sync_no_delay_count=100;

2)从库配置

#查看从库可设置参数

show variables like ‘%slave%’;

#修改并行复制方式,由库改组

set global slave_parallel_type=‘LOGICAL_CLOCK’;

#设置组内最大线程数

set global slave_parallel_workers=8;

#查看relay相关参数

show variables like ‘%relay_log%’;

#打开relay_log写入权限

set global relay_log_recovery=1;

#设置日志信息源为table,提高效率

set global relay_log_info_repository=’TAABLE’;

#重启服务,使配置生效

systemctl restart mysqld

随便看看