当前位置: 首页 > news >正文

26 slave写入数据解决与GTIDS主从复制搭建

上午
1、web01与web02服务器搭建
 ip:10.0.0.11
 systemctl stop filewalld
 systemctl disable firewalld
 setenforce 0
 vim /etc/selinux/config
 SELINUX=disabled
 yum -y install nginx
 echo "web----------01" > /usr/share/nginx/html/index.html
 nginx
 ip:10.0.0.12
 systemctl stop filewalld
 systemctl disable firewalld
 setenforce 0
 vim /etc/selinux/config
 SELINUX=disabled
 yum -y install nginx
 echo "web----------02" > /usr/share/nginx/html/index.html
 nginx
2、nat服务器搭建
 两个网卡ip:10.0.0.10(内网ip)、10.0.0.23(外网ip)
 systemctl stop filewalld
 systemctl disable firewalld
 setenforce 0
 vim /etc/selinux/config
 SELINUX=disabled
3、dns服务器搭建
 ip:10.0.0.3
 yum -y install bind
 vim /etc/named.conf
 listen-on port 53 { 127.0.0.1;any; }; 
 ......
 allow-query     { localhost;any; };
 vim /etc/named.rfc1912.zones
 zone "abc.com" IN {
         type master;
         file "abc.com.zone";
         allow-update { none; };
 };
 cp -p /var/named/named.localhost /var/named/abc.com.zone
 vim /var/named/abc.com.zone
 web01   A       10.0.0.11
 web02   A       10.0.0.12
 nat     A       10.0.0.10
 ds      A       10.0.0.23
 systemctl start named
下午
1、时间服务器搭建
 ntp服务器搭建在nat服务器上(ip地址为10.0.0.10)
 [root@ntp ~]# yum -y install ntpdate
 [root@ntp ~]# ntpdate cn.ntp.org.cn
 [root@ntp ~]# yum -y install ntp
 [root@ntp ~]# vim /etc/ntp.conf 
  15行加入   restrict 10.0.0.0 mask 255.255.255.0   //允许10.0.0.0网段的主机访问
 [root@ntp ~]# which ntpdate
 [root@ntp ~]# crontab -e
 * 2 * * * /usr/sbin/ntpdate cn.ntp.org.cn
 [root@ntp ~]# systemctl start ntpd
 [root@ntp ~]# systemctl enable ntpd
 其余内网主机
 yum -y install ntpdate
 crontab -e    //定时与ntp服务器同步时间
 30 * * * * /usr/sbin/ntpdate 10.0.0.10
 date 
 date -s "2014-1-1 14:00:00"
 date
 ntpdate 10.0.0.10
2、规划表
主机名    ip地址    功能
web01    10.0.0.11    realserver
web02    10.0.0.12    realserver
nat    10.0.0.10(内)/10.0.0.23(外)    directorserver,ntp
dns    10.0.0.3    dns
3、ipvsadm
ipvsadm.x86_64 通常是指用于 x86_64 架构的 IP 虚拟服务器管理工具(IP Virtual Server Administration)。

IPVS(IP Virtual Server)是 Linux 内核中的一种负载均衡技术。ipvsadm 工具用于配置和管理 IPVS 规则。

例如,您可以使用 ipvsadm 来设置负载均衡的算法(如轮询、加权轮询等)、定义真实服务器(Real Server)、添加服务(Service)等。

 [root@nat ~]# yum -y install ipvsadm.x86_64 
 [root@nat ~]# ipvsadm -h    # 显示 ipvsadm 工具的帮助信息
 [root@nat ~]# ipvsadm -C    # 清空当前的 IPVS 规则设置。
 [root@nat ~]# ipvsadm -L    # 用于列出当前系统中已配置的 IPVS 规则和相关信息
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 [root@nat ~]# ipvsadm -L -n   # 用于以数字形式列出当前系统中已配置的 IPVS 规则和相关信息
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 [root@nat ~]# ipvsadm -A -t 10.0.0.23:80 -s rr
 (失败)
4、mysql补充 (slave服务器不⼩⼼写⼊数据的解决⽅案)
1、正常情况下,master既可以读,也可以写,但是slave从服务器 只能读取操作,⼀旦我们在slave从服务器中写⼊数据,主从结 构会失败。

2、show slave status\G

3、如果数据⽐较少,可以通过跳过当前语句的⽅式解决,但是如果 从服务器写⼊的数据⽐较多,架构必须重新搭建

4、可通过变量sql_slave_skip_counter临时跳过事务进⾏处理

 mysql> set GLOBAL sql_slave_skip_counter=N # n代表跳过的n个事务
 mysql> stop slave;
 mysql> start slave;
5、跳过事务应该在slave上运⾏

6、传统的ab复制⽅式可以使⽤,基于GTIDs的⽅式不⽀持

5、mysql补充(基于gtids的主从复制搭建)
主从同步太过频繁,浪费资源。添加gtid,只添加提交的事务。

1、什么是GTIDs
 1、Global transaction identifiers 全局事务标识符,是mysql5.6 新加⼊的技术 
 2、使⽤GTIDs时,每⼀个事务都可以被识别和跟踪
 3、添加的新的slave或者发⽣故障时,需要将master身份或者⻆⾊迁移到slave上时,都需要考虑哪⼀个⼆进制⽇志以及哪个position值,极⼤简化了相关操作。 
 4、GTIDs是完全基于事务的,因此不⽀持MYISAM存储引擎 
 5、GTIDs由source_id 和transaction组成:
 source_id来源于server.uuid可以在auto.cnf中看到 
 tansaction_id 是⼀个序列数字,⾃动⽣成
2、限制条件
 1、不⽀持⾮事务引擎(MyISAM)因为可能会导致多个gtid分布给同⼀个事务 
 2、create table select语句不⽀持(主库语法报错)
 3、create、drop temprary table语法不⽀持 
 4、必须使⽤enforce-gtid-consistency参数 
 5、sql-slave-skip-counter不⽀持 
 6、gtid复制环境中必须统⼀开启gtid或者关闭gtid
 7、在5.7之前使⽤mysql upgrade命令也会出现问题
3、环境介绍
replication是基于传统的⽅式部署,并且已经在运⾏,利⽤已经存在的环境升级⾄基于GTIDs的replication。

4、实践步骤
修改配置⽂件,⽀持GTIDs(主从)

重启数据库(主从)

为了保证数据⼀直,master和slave都设置为只读

从服务器上重新配置同步

 1. 修改配置⽂件⽀持GTIDs
 # master中
 [mysqld]
 basedir=/usr/local/mysql
 datadir=/usr/local/mysql/data
 socket=/tmp/mysql.sock
 port=3306
 log-error=/usr/local/mysql/data/db01-
 master.err
 log-bin=/usr/local/mysql/data/binlog
 server-id=10
 character_set_server=utf8mb4
 gtid-mode=on
 # GTID(Global Transaction Identifier,全局事务标识符)模式开启。GTID 是 MySQL 用于在主从复制环境中唯一标识每个事务的标识符。开启此模式可以更方便地进行主从切换、故障恢复以及数据迁移等操作。例如,当需要将从库提升为主库时,通过 GTID 可以更准确和高效地确定需要应用的事务。
 log-slave-updates=1
 # 这个参数表示从服务器将接收到的更新操作记录到其自身的二进制日志中。这对于构建多层级的复制拓扑结构非常有用。比如,如果有一个主库,多个从库,其中一个从库又作为另一个从库的主库时,就需要开启这个参数,以便将更新传递下去。
 enforce-gtid-consistency
 # 强制 GTID 的一致性。这有助于确保在复制环境中,所有的事务都符合 GTID 的规则和要求,避免出现不一致或错误的情况。比如说,如果有事务违反了 GTID 的某些约束,如重复的 GTID 或不连续的 GTID 序列,系统会进行相应的处理或报错。
 # slave中
 [mysqld]
 basedir=/usr/local/mysql
 datadir=/usr/local/mysql/data
 socket=/tmp/mysql.sock
 port=3310
 log-error=/usr/local/mysql/data/db01-
 slave.err
 relay-log=/usr/local/mysql/data/relaylog
 server-id=11
 character_set_server=utf8mb4
 log-bin=/usr/local/mysql/data/binlog
 # 指定了二进制日志的存储路径为 /usr/local/mysql/data/binlog 。二进制日志用于记录数据库的更改操作,对于数据备份、恢复、主从复制等操作至关重要。例如,在进行数据恢复时,可以通过读取二进制日志中的操作来还原到特定的时间点。
 gtid-mode=on
 # 开启 GTID 模式,使得事务在整个复制拓扑中有唯一且全局的标识符。这为复制的管理和故障转移提供了更便利和可靠的方式。比如,在主从切换时,可以基于 GTID 快速确定需要同步的事务,而无需依赖传统的基于二进制日志文件和位置的方式。
 log-slave-updates=1
 # 允许从服务器将从主服务器接收到的更新操作记录到自身的二进制日志中。这对于构建多层级的复制架构非常有用。假设您有一个主库 A,从库 B,而从库 B 又作为从库 C 的主库,那么 B 就需要开启此参数,将从 A 接收到的更新传递给 C 。
 enforce-gtid-consistency
 # 强制保证 GTID 的一致性,确保所有的事务都遵循 GTID 的规则和要求,防止出现不一致或错误的情况。例如,如果有事务试图违反 GTID 的唯一性或连续性等规则,系统会进行阻止或报错,以维护数据库的一致性和可靠性。
 skip-slave-start
 # 这个参数会使得在服务器启动时不会自动启动从库复制进程。这通常在需要手动配置或检查从库的初始状态,或者在特定情况下需要暂时停止从库复制时使用。比如说,在对从库进行一些重大的配置更改或数据修复之前,可能会先使用此参数来防止从库自动启动复制,以免造成不可预期的结果。
 2、重启启动mysql服务
 [root@mysql-zhu ~]# service mysql8 restart
 Shutting down MySQL.......... SUCCESS! 
 Starting MySQL.. SUCCESS! 
 [root@mysql-slave ~]# service mysql8 restart
 Shutting down MySQL.. SUCCESS! 
 Starting MySQL... SUCCESS!
 3、主从配置只读模式
 mysql> set @@global.read_only=ON;
 mysql> set @@global.read_only=ON;
 4、slave重新配置change master to
 mysql> stop slave;
 mysql> change master to
     -> master_host='10.0.0.51',
     -> master_user='slave',
     -> master_password='123',
     -> master_port=3306,
     -> master_auto_position=1;
 Query OK, 0 rows affected, 8 warnings (0.01 
 sec)
 mysql> start slave;
 mysql> show slave status\G;
 5、关闭主从服务器的只读模式
 mysql> set @@global.read_only=OFF;
 mysql> set @@global.read_only=OFF;
 6、获得公钥
 [root@slave ~]# mysql -uslave -p123 -h 10.0.0.51 -P3306 --get-server-public-key
 mysql> quit
 Bye

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 白骑士的C#教学实战项目篇 4.4 游戏开发
  • 《向量数据库指南》——解决方案:采用安全、高性能的Milvus Cloud向量数据库,赋能Dopple AI的创新与发展
  • 速盾:博客主机租用怎么提高访问速度呢?
  • “LOCAL_LISTENER”参数导致业务无法连接数据库,文末附Oracle连接故障检查监听的排查流程
  • 如何高效的利用低代码技术进行数据建模
  • Temu全托管和半托管的区别:一文说清temu全托和半托的差异
  • 项目启动报错:liquibase.lockservice:? - Waiting for changelog lock....
  • 智能监控,无忧仓储:EasyCVR视频汇聚+AI智能分享技术为药品仓库安全保驾护航
  • PyQt5创建多个子窗口并监控其状态
  • 代码随想录算法day19 | 回溯算法part01 | 77. 组合,216.组合总和III,17.电话号码的字母组合
  • 【pdf文件生成】如何将盖章的文件生成PDF文件
  • 营运管理系统应用架构设计
  • 霸王餐返利APP的技术架构与业务模型分析
  • NSIS - 创建桌面应用程序(Client-Side, CS 或者称为本地应用程序)的安装包
  • C#实现多选下拉框
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • ES2017异步函数现已正式可用
  • github指令
  • Git的一些常用操作
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Redis在Web项目中的应用与实践
  • Spring Cloud Feign的两种使用姿势
  • Swift 中的尾递归和蹦床
  • vue-loader 源码解析系列之 selector
  • 安卓应用性能调试和优化经验分享
  • 前端_面试
  • 微信小程序开发问题汇总
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 在Docker Swarm上部署Apache Storm:第1部分
  • Linux权限管理(week1_day5)--技术流ken
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​如何防止网络攻击?
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Linux(帮助手册)
  • #WEB前端(HTML属性)
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (第一天)包装对象、作用域、创建对象
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (每日一问)基础知识:堆与栈的区别
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net CHARTING图表控件下载地址
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET Core中如何集成RabbitMQ
  • .net 设置默认首页
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)