自建网站需要备案吗,模板和网站的区别,井研移动网站建设,有道云笔记 wordpressMGR特点 #xff08;1#xff09;基于Paxos协议和原生复制#xff0c;多数节点同意即可通过事务提交#xff1b;#xff08;2#xff09;具备高可用自动故障检测#xff0c;可自动切换#xff1b;#xff08;3#xff09;可弹性扩展#xff0c;集群自动的新增和移除… MGR特点 1基于Paxos协议和原生复制多数节点同意即可通过事务提交2具备高可用自动故障检测可自动切换3可弹性扩展集群自动的新增和移除节点4有单主和多主模式5支持多节点写入具备冲突检测机制可以适应多种应用场景需求。 MGR组复制是什么 1主从复制是异步复制 master事务的提交不需要经过slave的确认slave是否接收到master的binlogmaster并不care。slave接收到master binlog后先写relay log最后异步地去执行relay log中的SQL应用到自身。由于master的提交不需要确保slave relay log是否被正确接受当slave接受master binlog失败或者relay log应用失败master无法感知。 2半同步复制 基于传统异步存在的缺陷MySQL在5.5版本推出半同步复制。可以说半同步复制是传统异步复制的改进在master事务的commit之前必须确保一个slave收到relay log并且响应给master后从库收到并产生 relaylog 后会向主库发送一个 ACK 的信息包当主库获得这个包后认为从库已经获得 relaylog才能进行事务的commit。但是slave对于relay log的应用仍然是异步进行的。 3组复制 基于传统异步复制和半同步复制的缺陷——数据的一致性问题无法保证MySQL官方在5.7.17版本正式推出组复制MySQL Group Replication简称MGR。 由若干个节点共同组成一个复制组一个事务的提交必须经过组内大多数节点N / 2 1决议并通过才能得以提交。如上图所示由3个节点组成一个复制组Consensus层为一致性协议层在事务提交过程中发生组间通讯由2个节点决议(certify)通过这个事务事务才能够最终得以提交并响应。 引入组复制主要是为了解决传统异步复制和半同步复制可能产生数据不一致的问题。组复制依靠分布式一致性协议(Paxos协议的变体)实现了分布式下数据的最终一致性提供了真正的数据高可用方案(是否真正高可用还有待商榷)。其提供的多写方案给我们实现多活方案带来了希望。 组复制脱离了传统的主从模式结构是一个具有容错功能的集群架构在组复制的架构中有多个 server成员构成并且每个成员都可以独立执行事务也就意味着多写的功能但是所有的读写事务必须在冲突校验完成后才能提交如果是只读型的事务那么会直接提交。当某个节点上发出一个读写的事务准备提交时那么这个节点就会向整个集群开始广播这次读写的变更和对应的一个校验标识符然后会针对这个事务产生一个全局的顺序号由于是有顺序号的所以集群中的每个成员都会按照顺序去执行事务的变更从而保证了数据的一致性。 如果在不同的 server 上执行了相同的操作并且产生了事务冲突那么校验机制就会做成相应的判断通常先提交的事务先执行后提交的回滚。所以从某种程度上来说组复制是一种伪同步复制模式。 组复制的模式 1单主模式 在单主模式下组有一个设置为读写模式的单主 server。组中的所有其他成员被自动设置为只读模式超级只读模式。主服务器通常是用于引导组的第一个 server所有其他加入的 server 自动从主服务器同步并设置为只读。 在单主机模式下将禁用在多主机模式下部署的某些检查因为系统会强制在组中每次只有一个写入server。例如在单主模式下允许对具有外键的表进行更改而在多主模式下不允许。在主服务器故障时自动选主机制选择下一个主服务器。通过按字典顺序使用其 UUID来排序剩余的 server 成员并选择列表中的第一个成员来作为下一个主服务器。 如果主服务器从组中移除则启动主节点选择程序然后从组中的其余 server 成员中选择新的主节点。通过查看新视图按照词典顺序将 server 的 UUID 进行排序并选择第一个作为主节点。选择了新的主节点后它将自动设置为只读其他辅助节点仍然为辅助节点因此也是只读。 2多主模式 多主模式也就是所有节点都可以写入每个节点基本都一样。 PXC和MGR的区别: a.执行提交PXC 事务需要在所有节点跑一下MGR 多数节点同意即可执行b.复制PXC 在复制上需要Gcache中缓存MGR 直接写binlogc.新增节点新增节点PXC支持mysqldump xtrabackupMGR直接集成复制克隆
d.网络中断网络中断发生时PXC具有分区的表不可读写MGR 可读不可写
e.流控MGR 写入变慢PXC所有节点不可写
f.跨平台跨平台PXC支持LinuxMGR支持所有平台
g.DDL当PXC在进行DDL时为了保证节点数据一致此时整个集群拒绝写操作注意是集群内所有的表写操作均无法提供写服务但是读操作可以正常进行。
MGR 采用innodb存储引擎支持在线DDL 单主搭建5.7 规划主机 我这里用三台虚拟机 192.168.168.101 3306 192.168.168.102 3306 192.168.168.103 3306 1配置host和IP的映射 在三台主机上分别 vi /etc/hosts。 MySQL 的组复制依然存在解析 host 的 bug所以我们必须在所有节点内把 host和 ip 的映射关系配置完毕。 192.168.168.101 master1192.168.168.102 slave2192.168.168.103 slave3 2关闭防火墙 查看centos7的防火墙 firewall-cmd --state 停止firewall systemctl stop firewalld.service 禁止firewall开机启动 systemctl disable firewalld.service 3快速初始化3台MySQL库 1、压缩包解压
tar -xvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz /usr/local/mysql2、配置环境变量
vi /etc/profile
export PATH/usr/local/mysql/bin:$PATH
source /etc/profile3、编辑mysql配置文件
vi /etc/my.cnf
[mysqld]
usermysql
basedir/usr/local/mysql
datadir/data/3306/data
log_bin/data/3306/binlog/mysql-bin
port3306
server_id1013306 #(另外两台机器 server_id1023306\ server_id1033306)
socket/tmp/mysql.sock
gtid-modeon
enforce-gtid-consistencytrue
log_slave_updates1
relay_log_info_repositoryTABLE
master_info_repositoryTABLE
relay_log_recoveryon4、创建数据目录和赋权
mkdir -p /data/3306/data
mkdir -p /data/3306/binlog
chown mysql:mysql -R /data5、初始化
mysqld --defaults-file/etc/my.cnf --basedir/usr/local/mysql --initialize-insecure --datadir/data/3306/data --usermysql 6、启动
mysqld_safe --defaults-file/etc/my.cnf --usermysql 7、登录
mysql -u root
mysql -S /tmp/mysql3306.sock -u root 4配置MGR参数 分别在三台配置文件my.cnf上添加配置后重启生效。 101上:
transaction_write_set_extractionXXHASH64
loose-group_replication_group_name a876d35e-9110-11e6-a365-842b2b5909d6
loose-group_replication_start_on_boot off
loose-group_replication_local_address 192.168.168.101:34901
loose-group_replication_group_seeds 192.168.168.101:34901,192.168.168.102:34902,192.168.168.103:34903
loose-group_replication_bootstrap_group off
loose-group-replication-ip-whitelist192.168.168.101,192.168.168.102,192.168.168.103102上:
transaction_write_set_extractionXXHASH64
loose-group_replication_group_name a876d35e-9110-11e6-a365-842b2b5909d6
loose-group_replication_start_on_boot off
loose-group_replication_local_address 192.168.168.102:34902
loose-group_replication_group_seeds 192.168.168.101:34901,192.168.168.102:34902,192.168.168.103:34903
loose-group_replication_bootstrap_group off
loose-group-replication-ip-whitelist192.168.168.101,192.168.168.102,192.168.168.103103上:
transaction_write_set_extractionXXHASH64
loose-group_replication_group_name a876d35e-9110-11e6-a365-842b2b5909d6
loose-group_replication_start_on_boot off
loose-group_replication_local_address 192.168.168.103:34903
loose-group_replication_group_seeds 192.168.168.101:34901,192.168.168.102:34902,192.168.168.103:34903
loose-group_replication_bootstrap_group off
loose-group-replication-ip-whitelist192.168.168.101,192.168.168.102,192.168.168.103 分别将三台库重启 mysqld_safe --defaults-file/etc/my.cnf --usermysql 5创建组复制用户 SET SQL_LOG_BIN0;
CREATE USER repl% IDENTIFIED BY repl;
GRANT REPLICATION SLAVE ON *.* TO repl%;
FLUSH PRIVILEGES;
SET SQL_LOG_BIN1; 6安装组复制插件 在3套库上都安装 INSTALL PLUGIN group_replication SONAME group_replication.so;
show plugins; 7启动并引导组复制 在单主模式中我们需要默认的选择一个节点作为主节点并且使这个节点成为引导节点。 选择在101主机上的 MySQL 中运行以下的命令 SET GLOBAL group_replication_bootstrap_groupON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_groupOFF; SET GLOBAL group_replication_bootstrap_groupON; 意思是打开节点的引导模式。 START GROUP_REPLICATION; 意思是开启同步。 SET GLOBAL group_replication_bootstrap_groupOFF; 在我们将节点一设置为引导节点后关闭。 启动报错查看日志。 set global.binlog_checksumnone; 在3套库上都需要执行可以写入配置文件。 可以查看到改节点已经加入到集群中 ONLINE。 在erro日志中看到到节点 1 已经通过 MGR 的内部通信管理 GCS 加入到节点中。 查看是否是主节点可以看到101主机的库是主节点 select * from performance_schema.replication_group_members;查询节点是否正常 8.0版本可以直接通过表performance_schemaerformance_schema.replication_group_members查看是否是主节点在5.7中查看是否主节点需要这样查 SELECT IF((SELECT
server_uuid) (SELECT VARIABLE_VALUE FROM
performance_schema.global_status WHERE VARIABLE_NAME
group_replication_primary_member), 1, 0) as is_primary_node; 测试 为了验证组复制是否能做到加入的节点后自动同步我们这里可以在节点 1 上造一点数据。 这里我创建了一些库和一些表。 等节点 2 和节点 3 加入组后观察是否同步 create database test;
use test;
create table t(id int,name varchar(30),PRIMARY KEY (id));
insert into t select 1,aa; 8节点2加入 set global.binlog_checksumnone;
CHANGE MASTER TO MASTER_USERrepl, MASTER_PASSWORDrepl FOR CHANNEL group_replication_recovery;
START GROUP_REPLICATION; 2节点加入到集群且不是主 如果是8.0的MGR可以直接从这里查到是否是主 数据也自动同步过来了验证了组复制新加入的节点数据自动同步 9节点3加入 set global.binlog_checksumnone;
CHANGE MASTER TO MASTER_USERrepl, MASTER_PASSWORDrepl FOR CHANNEL group_replication_recovery;START GROUP_REPLICATION; 3节点加入集群且不是主 可以查看数据已经同步过来了再次验证了组复制新加入的节点数据自动同步。 注意配置文件没有写 loose-group_replication_single_primary_mode true
loose-group_replication_enforce_update_everywhere_checks false 在5.7中开始组复制之前可以手动配置写入 set global group_replication_single_primary_modetrue;
set global group_replication_enforce_update_everywhere_checks false; 当然如果不写默认是 多主搭建 多主节点搭建基本和单主步骤一样只需要配置文件my.cnf额外添加本文以下示例为单主节点搭建多主节点搭建亦相差无几。 loose-group_replication_single_primary_modeFALSE
loose-group_replication_enforce_update_everywhere_checks TRUE 单主搭建8.0 1、压缩包解压
tar -xvf mysql-8.0.25-linux-glibc2.12-x86_64.tar
rm -rf /usr/local/mysql
mv mysql-8.0.25-linux-glibc2.12-x86_64 /usr/local/mysql2、配置环境变量
vi /etc/profileexport PATH/usr/local/mysql/bin:$PATH
source /etc/profile3、编辑MySQL配置文件
vi /etc/my.cnf
[mysqld]
usermysql
basedir/usr/local/mysql
datadir/data/3306/data
log_bin/data/3306/binlog/mysql-bin
port3306
server_id1013306 #(另外两台机器 server_id1023306\ server_id1033306)socket/tmp/mysql.sock
gtid-modeon
enforce-gtid-consistencytrue
log_slave_updates1
relay_log_info_repositoryTABLE
master_info_repositoryTABLE
relay_log_recoveryon--101----------------------------------------------------------------------------------------------------------
transaction_write_set_extractionXXHASH64
loose-group_replication_group_name a876d35e-9110-11e6-a365-842b2b5909d6loose-group_replication_start_on_boot off
loose-group_replication_local_address 192.168.168.101:34901loose-group_replication_group_seeds 192.168.168.101:34901,192.168.168.102:34902,192.168.168.103:34903loose-group_replication_bootstrap_group off
loose-group-replication-ip-whitelist192.168.168.101,192.168.168.102,192.168.168.103--102----------------------------------------------------------------------------------------------------------
transaction_write_set_extractionXXHASH64
loose-group_replication_group_name a876d35e-9110-11e6-a365-842b2b5909d6loose-group_replication_start_on_boot off
loose-group_replication_local_address 192.168.168.102:34902loose-group_replication_group_seeds 192.168.168.101:34901,192.168.168.102:34902,192.168.168.103:34903loose-group_replication_bootstrap_group off
loose-group-replication-ip-whitelist192.168.168.101,192.168.168.102,192.168.168.103--103----------------------------------------------------------------------------------------------------------
transaction_write_set_extractionXXHASH64
loose-group_replication_group_name a876d35e-9110-11e6-a365-842b2b5909d6loose-group_replication_start_on_boot off
loose-group_replication_local_address 192.168.168.103:34903loose-group_replication_group_seeds 192.168.168.101:34901,192.168.168.102:34902,192.168.168.103:34903loose-group_replication_bootstrap_group off
loose-group-replication-ip-whitelist192.168.168.101,192.168.168.102,192.168.168.103------------------------------------------------------------------------------------------------------------4、创建数据目录和赋权
mkdir -p /data/3306/data
mkdir -p /data/3306/binlog
chown mysql:mysql -R /data5、初始化mysqld --defaults-file/etc/my.cnf --basedir/usr/local/mysql --initialize-insecure --datadir/data/3306/data --usermysql 6、启动
mysqld_safe --defaults-file/etc/my.cnf --usermysql 7、登录
mysql -u root
mysql -S /tmp/mysql3306.sock -u root
8、安装组复制插件
INSTALL PLUGIN group_replication SONAME group_replication.so;
show plugins;9、在101上创建复制用户
SET SQL_LOG_BIN0;
CREATE USER repl% IDENTIFIED WITH mysql_native_password BY repl;
GRANT REPLICATION SLAVE ON *.* TO repl%;
GRANT BACKUP_ADMIN ON *.* TO repl%;
FLUSH PRIVILEGES;
SET SQL_LOG_BIN1;
10、启动并引导组复制
在单主模式中我们需要默认的选择一个节点作为主节点并且使这个节点成为引导节点。
在 mysql 中运行以下的命令
SET GLOBAL group_replication_bootstrap_groupON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_groupOFF;11、依次在另外两个节点
CHANGE MASTER TO MASTER_USERrepl, MASTER_PASSWORDrepl FOR CHANNEL group_replication_recovery;
START GROUP_REPLICATION; 如下为8.0的单主三节点MGR集群 墨天轮原文链接https://www.modb.pro/db/166364?sjhy复制链接至浏览器或点击文末阅读原文查看) 关于作者 陈家睿云和恩墨MySQL技术顾问,拥有MySQL OCP、PGCE、OBCA、SCDP证书长期服务于电信行业。现负责公司MySQL数据库、分布式数据库运维方面的技术工作热衷于运维故障处理、备份恢复、升级迁移、性能优化的学习与分享。 更多数据库行业相关内容欢迎光临 2021 数据技术嘉年华 https://www.modb.pro/dtc2021扫描下方二维码免费领取大会门票 END 推荐阅读267页2020年度数据库技术年刊 推荐下载2020数据技术嘉年华PPT下载 2020数据技术嘉年华近50个PPT下载、视频回放已上传墨天轮平台可在“数据和云”公众号回复关键词“2020DTC”获得 你知道吗我们的视频号里已经发布了很多精彩的内容快去看看吧↓↓↓ 点击下图查看更多 ↓ 云和恩墨大讲堂 | 一个分享交流的地方 长按识别二维码加入万人交流社群 请备注云和恩墨大讲堂 点个“在看” 你的喜欢会被看到❤