存储复制其实是工作在Windows,假设您的数据完全

因为硬件复制不可用,数据必须在逻辑数据库或者访问方式access method)的级别上被获取。有几个产品可以做这件事。部分产品得通过读数据库或Virtual Storage Access Method简称VSAM)记录来升级。变更投到其他数据中心,通过通信线路使用多种的传输协议。在接收端,由另一个软件发给数据库或访问方式命令来完成远程升级。

在MySQL从库上执行的操作

1. 设置server-id并关闭binlog功能参数
数据库的server-id一般在一套主从复制体系内是唯一的,这里从库的 server-id 要与主库及其他从库不同,并且要注释掉从库的 binlog 参数配置。如果从库不做级联复制,并且不作为备份用,就不要开启 binlog,开启了反而会增加从库磁盘I/O等的压力。

这两种情况需要打开从库 binlog 记录功能,记录数据库更新的SQL语句:

级联同步 A-->B-->C中B时,需要开启;
在从库做数据备份,数据库备份必须要有全备和binlog日志,才是完整的备份。

vim /path/3307/my.cnf

[mysqld]
server-id = 2

2. 把主库的数据导入从库

mysql -uusername -ppasswd -S /path/mysql.sock < mysql_bak.sql

3. 登录从库,配置复制信息
从库连接主库配置信息:

mysql> CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_PORT='3306',
MASTER_USER='rep',
MASTER_PASSWORD='passwd',
MASTER_LOG_FILE='mysql-bin.log',
MASTER_LOG_POS=342;

#字符串用单引号' '括起来,数值不用引号,注意内容前后无空格,参数不能出错。

上述操作的原理实际上是把用户密码等信息写入从库新的 master.info 文件中。

16Server2

玄惭大师”谈双十一活动中云数据库保障经验

导读对不少商家而言,双 11 销量往往是平时的N倍。云数据库如何从容应对双 11 当日的流量高峰?今天,特别邀请到 ApsaraDB 团队的大牛级人物玄惭和大家分享,结合历年双十一活动中云数据库保障经验,从弹性扩容、访问链路、架构设计、高可用配置、参数优化等五个方面详解讲解云数据库大流量峰值保障的最佳实践。玄惭被誉为双 11 护航老司机。过去五年,他一直负责天猫双 11 项目的数据库运维,0 故障,0 丢单。

1、弹性扩容的两种方式

多数用户在双十一到来之前都会进行弹性扩容。常见的弹性扩容分为两类:本机升降级和跨机升降级。

本机升降级的话,比较简单。举个栗子,一个 6G/6C 的 RDS 数据库想要升级到 12G/12C,如果本机资源足够,则可以在本机完成升降级,无需迁移到其他机器上。

图片 1

另一种弹性扩容的方式是:跨机升降级。当本机资源不足以支撑升级所需要的资源的时候,需要将实例分配到另外一台机器上。所以跨机升级需要使用数据库最近一次的备份和日志实时同步到新的主机上,保证新实例和旧实例的数据是完全一致的。

这里需要注意的坑是:如果历史备份集较大或原主库压力较大时,会导致跨机迁移时间较长。

图片 2

那些老司机踩过的坑:

  1. 如果升级很长时间也没有完成,可能发生了跨机迁移或者主备存在延迟。
  2. 可用区迁移、数据库版本升级耗时通常较长,是因为两者迁移都会发生跨机迁移。
  3. 空间升级非常快,这是因为空间升级无需重启、迁移数据库,对业务也不会造成影响。
  4. 弹性扩容时间的选择,建议在业务低峰期进行弹性扩容。

2、双 11 期间,如何让访问链路更安全?

在云数据库中,访问链路分为两种模式:高安全访问链路和标准访问链路。双 11 期间,流量高的网站也会成为黑客的重点关注对象。所以建议商家提前采用高安全访问链路。

图片 3

高安全访问链路在数据库的前面增加了一层代理层,所有请求在代理层都被解析,在解析过程中添加了 SQL 拦截规则,进而可以防止 SQL 注入的攻击。

此外,高安全访问链路可以防止 90% 的连接闪断;并支持内外网地址同时访问;对短连接应用具有缓冲防护作用。
需要注意的是高安全访问链路较标准链路增加了 5% 左右的响应时间。
那些老司机踩过的坑:

  1. 建议使用高安全访问模式,特别是短连接应用,高安全访问模式具有缓冲短连接对数据库冲击的效果。
  2. 在标准访问链路切换到高安全访问链路时,切换过程最多会有30秒不可访问。
  3. 如果ECS使用VPC,那么数据库只能选择高安全访问链路。
  4. 访问链路上需要注意应用不要使用IP来访问数据库,避免由于IP变化导致故障。

3、双 11 的架构如何设计?

在历年的双 11 中,由于业务流量的突增,那些平时没有暴露出来的问题往往在这个时候爆发出来,所以我们要把数据库这块地基打好,细节上做好,架构设计就需要我们在这些上下功夫。

图片 4

读写分离是常见的架构设计手段。RDS 支持只读节点,主库主要承担写和实时性要求高操作,一些复杂的分析计算业务操作最好不要放在主库上执行,而是选择放在只读节点运算。使用读写分离架构时,首先数据库版本需要升级到 MySQL 5.6 版本;同时目前 RDS 最多可以支持到五个只读节点。在读写分离时,延时是我们必须关注的重点,目前 RDS 上通过源码改进并行复制,提升复制性能,降低了主库与备库之间数据同步的延迟。

引擎选择是数据库设计中很基础的一点,这里重点介绍下 Tokudb 引擎。日志型应用的特性是:写操作很高、读操作相对较少。Tokudb 引擎压缩比 Innodb 引擎高出 5~7 倍,适合写多读少的应用;同时,Tokudb 引擎 online ddl 速度较快,适合表很大需要经常 DDL 操作的应用。

对于大字段,数据库的更新写入压力过大,update、insert、delete 会导致 binlog 日志急剧增加,导致实例磁盘报警。因此在数据库设计时,要注意规避大字段引起的问题。常见的大字段有 varchar(8000)、text、blob、clob(sqlserver/mysql),使用时建议将大字段拆分出主表或者存入到其他存储系统中。

字段类型也是常见的问题之一。在设计开发阶段,就要避免数据库字段定义与应用程序参数定义不一致的情况。

字段大小同样会对数据库性能造成影响。字段长度超过索引允许的最大长度会导致索引字段被截断;同时,过长的字段定义会消耗大量的排序内存以及临时表空间。

索引设计也是大家经常犯错的一个点,在历年双十一保障中,索引出现的问题最多。
这里,重点讲解单条SQL的创建索引思路,常见的索引误区包括但不限于:

  1. 对SQL语句的每个查询条件字段建立一个单列索引,MySQL 只能使用其一个索引;
  2. 对SQL语句的所有查询字段建立组合索引,导致索引远大于数据,同时性能低下;
  3. 小表不建立索引。

4、双 11 的高可用配置如何搞?

RDS 本身是一个主备的高可用架构,当主库 Down 后,会快速切换到备库。在高可用架构中很重要的一点是数据同步,保障主备数据一致不丢失。

常见的高可用配置包括:

  1. 单可用区:主备都在同一个可用区内,可以实现主备之间的快速切换;
  2. Binlog 同步:采取异步和半同步的方式保障主备的数据一致;
  3. Binlog 刷写:根据应用特点设置安全模式或者高性能模式;
  4. 事务提交:默认采用最高安全模式。

此外,为了保障服务高可用,也可以采用多可用区配置,即主备在不同可用区,此时,应用同样需要多可用区部署。需要注意 Binlog 在主备的同步模式,通常这种情况下开启半同步模式跨可用区访问,可能导致写入性能下降。
另外,还有一种跨数据中心的灾备方案,在历年的双 11 中,已经有很多用户实施过这样的方案,你可以选择在两个不同的数据中心部署数据库和应用,比如在杭州和上海两个地区部署,两个数据中心的数据同步采用 DTS,以保证一个数据中心挂掉后,另外一个数据中心能够接管起来。

此外,从 2015 年起,RDS 为天猫的商家后台数据库提供了异地灾备的功能。当主机房出现较大的负载压力、断网、断电等极端情况,RDS 可将商家的后台系统在 30 分钟内切换至灾备机房继续运行,以保障总体可靠性,进一步确保平台大型品牌商家双 11 期间后台系统安全、稳定。

5、针对双 11,如何做参数优化?

在 RDS 中,大部分参数是已经经过调优的,因此很多参数是不需要再去调整的。
但是用户可以根据应用场景的不同选择合适的参数,这里重点看下 RDS 新增的四个参数优化:

  1. rds_max_tmp_disk_space:控制 MySQL 能够使用的临时文件的大小,适用于一个 SQL 语句就消耗掉整个数据库的磁盘空间;
  2. tokudb_buffer_pool_ratio:控制 TokuDB 引擎能够使用的 buffer 内存大小,适用于选择了 tokudb 作为存储引擎的场景;
  3. max_statement_time:控制单个 SQL 语句的最长执行时间,适用于控制数据库中的慢 SQL 数量;
  4. rds_threads_running_high_watermark:控制 MySQL 并发的查询数目,常用于秒杀场景的业务;

看完了“玄惭大师”的经验分享, 那么,你对大流量峰值下保障云数据库有什么好的经验可以分享吗?

原文来自:

本文地址:

导读 对不少商家而言,双 11 销量往往是平时的N倍。云数据库如何从容应对双 11 当日的流量...

现如今,提供数据中心高可用性是一种不同的,更具成本效益的方法:即数据镜像以及云计算和容器的使用。

冲突问题——数据库管理系统Database Management Systems,简称DBMS)在不同的系统联合体中,不能从太宽的距离锁定数据库记录。这导致在不同数据中心内,相同的数据库记录可能会同时升级。基础设施和应用需要准备好应对混乱。

让从库记录binlog日志的方法

从库需要记录binlog的应用场景:当前从库还要作为其他从库的主库,如级联或互为主从的情况。

vim  /path/my.cnf

[mysqld]
log-slave-updates
log-bin = /path/mysql-bin

等待一分钟后测试完成,打开报告路径即可看到html格式的存储复制测试报告

容器也变得对数据更加敏感。例如,它们可以容纳作为持久存储的数据卷。通过使用容器编排系统(container orchestration systems),可以将数据快照从主站点同步到远程容器。当前,这在高可用性系统中可能难以实现,但市场将如何发展是值得关注的。

相信各位深思熟虑的读者已经想到不少这些问题。但是还有更多令人不安的不稳定因素。

MySQL多实例常见的配置方案

Get-SRPartnership

如果您的组织需要通过持续的高可用性系统来保证业务连续性,则必须为高级数据镜像服务支付费用。云服务提供商(如Amazon Web Services和Microsoft Azure)现在拥有可实现远程数据镜像的高速数据连接。但是,具有数据备份的快照可能是一个较为经济的选项。快照从实时系统创建数据的只读副本。它不需要将实时系统锁定或暂停运转,并且在CPU和I/O利用率方面很有效率。快照有不同的方法,但是写时复制方法是上述要求的最佳选择。快照捕获对数据系统的每次写入,并将其作为后台任务写入主存储系统和远程系统。通过这些方法,您可以在容器旁快速启动快照数据集,以在辅助站点上创建运行的系统。

概念上,这是关于两个不同位置的数据中心,如图1所示。在数目也许会扩展到更多站点。

创建MySQL多实例的启动程序

创建MySQL启动文件

vim /var/mysql/3306/mysql.sh
vim /var/mysql/3307/mysql.sh
vim /var/mysql/3308/mysql.sh

这几个启动MySQL实例的脚本自己根据需要来写。
在多实例启动文件中,启动MySQL不同实例服务,所执行的命令实质是有区别的。

mysqld_sage --defaulte-files=/var/mysql/3306/my06.cnf >/dev/null 2>&1
mysqladmin -u root -p passwd -S /var/mysql/3306/mysql.sock shutdown

对于同步复制而言,一个应用程序的写入请求,会等待日志复制到对方节点,返回写入成功后,IO才会结束,因此对于应用程序的写入会略微感到一点延迟,所以对于网络要求会很高,如果网络带宽足够高,延迟不高,那么就不会感觉到写入延迟,利用同步复制可以使您的业务应用获得崩溃一致性,发生故障时应用转移到其他站点继续运行,数据不会丢失。

然而,容器,可在某一很小的单一系统内容纳完整的应用程序。虽然虚拟机在整个堆栈中运行所有内容,从操作系统向上,容器只携带它们所需要的内容,并与其他容器共享底层操作系统。

网络在数据中心管理中占了重要位置,是两个数据中心之间的切换开关。有了合适的内部通讯系统,以后的要求都可以基于不同标准,按路线分给每个数据中心。其实,有了现在基于浏览器的应用,用户可以实现不同数据中心的不间断切换。

通过read-only参数让从库只读访问

read-only参数可以让从服务器只允许来自从服务器线程或具有SUPER权限的数据库用户进行更新,确保从服务器不接受来自用户端的非法用户更新。
方法一:直接带 --read-only 参数启动或重启数据库

mysql xxxxx --read-only

方法二:vim /path/my.cnf

[mysqld]
read-only

Clear-SRMetadata -AllConfiguration (群集一招爽)

遗憾的是,镜像数据并不像看起来那么容易。距离是其中的主要问题;镜像站点越远,存在的延迟越高,维持数据的保真度就越难。另外,如果发生数据损坏,你最不想做的事情就是镜像损坏部分的数据。

为相隔两地的数据中心配置

MySQL主从复制读写分离集群

读写分离账户设置
主从库,账户权限,访问IP等······

#Master
GRANT SELECT, INSERT, 权限 ON  'database'.'table' TO 'user'@'ip' identified by 'passwd';

#Slave
GRANT SELECT ON 'database'.'table' TO 'user'@'ip' identified by 'passwd';

flush privilege;

如果是在计划外灾难恢复场景,单机对单机,主服务器忽然断电宕机,可以在备节点使用这条命令执行强制故障转移,此命令将备节点提升为主,原主节点恢复后也可以再改变方向,反向复制回去

对于宕机容忍度比较低的组织来说,可以不断地启动容器,而不是存储它们,并在必要时使用它们。此时成本会更高,但是如果主站点发生故障,系统可以几乎实时地平滑地将故障转移到备份站点。您还可以通过支付弹性资源来最小化成本;一个未使用的启动容器将不会使用很多CPU或网络资源。当主站点发生故障并发生故障转移时,您只需要增加资源。

在升级-查询的方案中,一个数据中心地区全体升级,而其他只允许查询。升级的站点为只读的系统联合体及时带来改变。如果升级数据中心失败,负责查询的系统联合体得负全责。

MySQL多实例的应用场景

  1. 资金紧张型公司的选择;
  2. 并发访问不是特别大的业务;
  3. 门户网站应用MySQL多实例场景;

计划内故障转移

IT宕机可能对任何业务产生重大影响。传统情况下,这使得备份数据恢复的速度成为IT团队的主要焦点。然而,即使备份工具得到改进,许多组织的恢复时间仍然不够。此外,此前的高可用性系统已经超出了大多数组织的财务可接受范围。

Hot-warm

创建MySQL多实例的配置文件

MySQL数据库默认为用户提供了多个配置文件模板,用户可以根据服务器硬件配置的大小来选择。

vi /var/mysql/3306/my06.cnf
vi /var/mysql/3307/my07.cnf
vi /var/mysql/3308/my08.cnf

为了让MySQL多实例之间彼此独立,要为每一个实例建立一个 my.cnf 配置文件和一个启动文件MySQL,让它们分别对应自己的数据文件目录 db。

3306实例 3307实例 3308实例
[ client ]
port = 3306
socket = /var/mysql/3306/mysql.sock

[ mysql ]
no-auto-rehash

[ mysqld ]
user = mysql
port = 3306
socket = /var/mysql/3306/mysql.sock
basedir = /bin/mysql
datadir = /var/mysql/3306/db
以及其他优化信息

[ mysql_safe ]
pid-file = /var/mysql/3306/mysql.pid
log-error = /var/log/mysql/mysql06.log
[ client ]
port = 3307
socket = /var/mysql/3307/mysql.sock

[ mysql ]
no-auto-rehash

[ mysqld ]
user = mysql
port = 3307
socket = /var/mysql/3307/mysql.sock
basedir = /bin/mysql
datadir = /var/mysql/3307/db
以及其他优化信息

[ mysqld_safe ]
pid-file = /var/mysql/3307/mysql.pid
log-error = /var/log/mysql/mysql07.log
[ client ]
port = 3308
socket = /var/mysql/3308/mysql.sock

[ mysql ]
no-auto-rehash

[ mysqld ]
user = mysql
port = 3308
socket = /var/mysql/3308/mysql.sock
basedir = /bin/mysql
datadir = /var/mysql/3308/db
以及其他优化信息

[ mysqld_safe ]
pid-file = /var/mysql/3308/mysql.pid
log-error = /var/log/mysql/mysql08.log

-SourceRGName RG01

图片 5

分离的数据中心有好几种方式来配置,能想到的有以下几种:

MySQL多实例的作用与问题

MySQL多实例作用:

  1. 有效利用服务器资源;
  2. 节约服务器资源;

MySQL多实例有它的好处,也有其弊端。比如,会存在资源互相抢占的问题

事实上,存储复制其实是工作在Windows Storage Stack ,Partition Manager之上,Volume Manager之下的一个磁盘过滤器驱动程序,我们都知道,分区是指存储设备上连续的存储区域,卷是指扇区的逻辑集合,一个卷的内部扇区可能来一个分区,或多个分区,或不同的磁盘,而存储复制在分区到卷之间于又插入了一层逻辑,再公开给卷,对于上层的卷和application来说,是不知道底层做了这件事的,您依然可以使用VSS技术,卷级别的Bitlocker 技术

选择容器

批处理——在升级-升级的模式下,生产量会问题多多。企业得决定哪一方进行批处理,如果批处理两方都得进行就更头疼了。还得考虑对带宽的需求,用以从I/O相关批处理事务中挤出空间升级,通过复制链接。

概述

容器可以帮助解决与高可用性系统相关的一些重要问题。例如,假设您的数据完全镜像到辅助站点。现在,假设主站点遇到问题。您有对您的数据有完全访问权限,但应用程序呢?即使您可以故障切换到镜像数据,没有应用程序也是毫无办法的。现在,您必须等待您在镜像站点上提供应用程序,或者支付可能很高的金额才能在该站点上运行应用程序的实时版本——只是以防万一。

升级-升级

启动从库同步开关,测试主从复制配置

1. 启动从库主从复制,并查看状态

mysql -uroot -ppasswd -S /path/mysql.sock -e "start slave;"
#等同于 mysql> start slave;

主从复制是否成功的3项关键参数:

  • Slave_IO_Running:Yes,这个是I/O线程状态。I/O线程复制从从库到主库读取binlog日志,并写入从库的中继日志;
  • Slave_SQL_Running:Yes,这个是SQL线程状态。SQL线程负责读取中继日志(relay-log)中的数据并转换为SQL语句应用到从数据库中;
  • Seconds_Behind_Master:0,这个是复制过程中从库比主库延迟的秒数,这个参数很重要。

测试主从复制:
在主库上随便新建数据,然后观察从库的数据状况。

16Server1

当您在公共云中选择辅助站点时,云存储的成本非常低,低到在此示例中容器存储的成本将是微不足道的。当您实际需要启动容器时,成本会变得明显,但是与停机时间的全部业务成本相比,使用工作系统的成本仍然会降低。

漂移——没有异步复制技术在逻辑I/O层面是完美的,企业会发现分叉数据存储变慢。整理这些不同需要周期性的调和进程。

安装MySQL多实例

安装MySQL依赖包
yum install -y ncurses-devel libaio-devel

安装MySQL

  1. 源码安装:
useradd -s /sbin/nologin -M mysql
wget  mysql源码包
tar mysql压缩包
cd mysql-xxx
./configure
make&&make install
  1. rpm包安装:
wget http://repo.mysql.com/xxx 选择匹配的版本
rpm -ivh mysql.xxx.rpm
yum install mysql-server

延伸群集即是指,实现了存储双活的群集,避免了存储在单一站点,站点宕机存储失联的问题,之前老王在多站点与灾难恢复篇曾经提到这点,在之前我们仅能用第三方软件或设备实现群集存储的复制,现在原生自带存储复制和WSFC完美融合,实现高可用+灾难恢复。

在上面的示例中,IT团队可以用较低成本在辅助站点上存储容器集合。随后,如果主站点遇到问题,他们可以在几分钟内启动应用程序容器以访问镜像的数据。

注意当两个数据中心都升级时,数据在逻辑上可能会分离。比如说对用户的初级数据库在密西西比河西边的“A数据中心”,第二个只读的数据在“B数据中心”。用户在哪一边都可能是反向的。最终,这意味着网络必须足够智能,知道客户的初级数据在哪。

主从复制实践

MySQL主从复制实践对环境要求较简单,可以是单机单数据库多实例(3306,3307,3308)的环境;也可以是多台服务器,每个服务器一个独立数据库的环境。
建议使用多服务器实现数据库主从功能!

图片 6

来自数据镜像的挑战

升级-查询

什么是MySQL多实例

MySQL多实例就是在一台服务器上同时开启多个不同的服务器端口(如3306, 3307),同时运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务器端口来提供服务。

这些MySQL多实例公用一套MySQL安装程序,使用不同的 my.cnf(也可以相同)和数据文件。在提供服务时,多实例MySQL在逻辑上看起来是各自独立的,他们根据配置文件的对应设定值,获得服务器相应数量的硬件资源。

其实很多网络服务都是可以配置多实例的,如 Nginx,Apache,Mongodb,Redis等。

16Server2

【编辑推荐】

企业中一个数据中心被指派成为所有网络流量的目标。在第一个数据中心的升级会被复制到第二个数据中心站点,第二个会接收并把这些改变用在本地的DASD场所。一旦第一个数据中心故障,若第二个站点在线,混乱会降至最低。

MySQL多实例介绍

#挂载当前备复制节点16server2的数据磁盘至K盘

图片 7 
图1:地理性分离数据中心的示意图

MySQL主从复制原理介绍

MySQL的主从复制是一个异步的复制过程,虽然一般情况下感觉是实时的。数据将从一个MySQL数据库(Master)复制到另一个MySQL数据库(Slave)。
在Master与Slave之间实现整个主从复制的过程是由三个线程参与完成的。其中有两个线程(SQL线程和I/O线程)在Slave端,另外一个线程(I/O线程)在Master端。

要实现MySQL的主从复制,首先必须打开Master端的 binlog 记录功能,否则就无法实现。因为整个复制过程实际上就是Slave从Master端获取 binlog 日志,然后再在Slave上以相同顺序执行获取的 binlog 日志中所记录的各种 SQL 操作。

 打开MySQL的binlog功能
vim /etc/my.cnf
[ mysqld ]
log-bin = /path/mysql-bin

注意是放在 [mysqld]里,不要放错位置了!

MGMT: 10.0.0.3 255.0.0.0 DNS 10.0.0.2

死亡——对于数据中心来说,什么算死?数据中心通过复制流量和heartbeat来保持联系。但是复制流量的减慢可能预示着一个数据中心工作做的少了。同样地,一些遗落的heartbeat也暗示着网络故障或减慢,而不是数据中心故障。

MariaDB介绍

自从甲骨文公司收购了MySQL之后,为了避免Oracle将MySQL闭源,MySQL社区采用分支的方式来避开这个风险。MariaDB就这样诞生了。
MariaDB是一个向后兼容,可能在以后替代MySQL的数据库产品。

这是个实实在在的事。每个数据中心支持所有数据的所有升级。两种方式的复制流经通信连接,保持数据库的同步。一旦发生故障,没有出问题的数据中心承担所有即将到来的流量。

配置MySQL多实例文件权限

建议权限:700

分别联机为GPT磁盘,格式化卷为NTFS

图中两个数据中心是分离的,这对于进行同步磁盘输入输出来说,实在太远了,这导致了很多需求。首先每个数据中心必须得有自己的直接存取存储设备Direct Access Storage Device,简称DASD)场所来进行管理。第二是同步硬件复制会因为网络延迟而无法工作。最后,距离也意味着,每个数据中心的逻辑分区logical partition,简称LPAR)不能处于同一个SysplexSystems Complex,系统联合体)里面。

工作中MySQL从库停止复制故障

模拟重现故障的能力是运维人员最重要的能力。
先在从库创建一个库,然后去主库创建一个同名的库来模拟数据冲突。
然后运行 show slave status 查看报错信息。

Invoke-Command -Computername 16server1,16server2 -ScriptBlock{Install-WindowsFeature -Name Storage-Replica,FS-FileServer -IncludeManagementTools -restart}

其他的问题


业务和管理需求使得数据中心管理和灾难恢复的缺陷更加明显。二十年前,用货车运输磁带进行存储就能满足需求了。十年前,两个数据中心的距离只要能进行I/O,就能满足需求。现在,随着电子商务成为首要的负载,恢复计划还得考虑数据中心的地理距离,这一点限制了恢复时间。

MySQL介绍

MySQL属于传统关系型数据库产品,它开放式的架构使得用户选择性很强,同时社区开发与维护人数众多。
MySQL是一种关系型数据库管理系统,关系型数据库的特点是将数据保存在不同的表中,再将这些表放入不同的数据库中,而不是将所有数据统一放在一个大仓库里,这样的设计增加了MySQL的读取速度,而且灵活性和可管理型也得到了很大提高。
访问和管理MySQL数据库的最常用标准化语言为SQL结构化查询语言。

命令查看

探查和遵照这些察觉到的故障来行事,要求精心策划的政策、高度自动化和仔细的管理。好消息是数据中心的地理分离逐渐变得平常,解决这些问题的政策也变得更加便于学习。

MySQL主从复制延迟问题的原因及解决方案

1. 主库的从库太多,导致复制延迟

从库数量尽量不要超过五个,要复制的节点数量过多,会导致复制延迟;

2. 从库硬件比主库差,导致复制延迟

查看主从系统配置,可能是因为配置不当;

3. 慢SQL语句过多

加入一条SQL语句执行时间是20s,那么从执行完毕到从库上能查到数据至少需要20s,这样就延迟了20s;
一般要把SQL语句的优化作为常规工作,不断地进行监控和优化。如果单个SQL的写入时间长,可以修改后分多次写入;
通过查看慢查询日志或 show full processlist 命令,找出执行时间长的慢查询语句或大的事务。

4. 主从复制的设计问题
如,主从复制单线程,如果主库写并发太大,来不及传送到从库,就会导致延迟;

5. 主从库之间的网络问题
主从库之间的网卡、线路、连接设备等都有可能称为复制的瓶颈,导致延迟;

6. 主库读写压力大,导致复制延迟
主机硬件搞好一点,增加buffer。

两个复制节点已经加入到域,可以正常利用Kerberos验证

控制改变——基础设施、应用和数据库设计的改变一定得认真管理,避免破坏在不同数据中心复制的一致性。

MySQL主从复制实践

存储复制规划建议

复制的延迟——现代通信连接又快有可靠,但还会有问题。就算是最快最完美的通信线也不能和DASD I/O一样同步和快速。因此,系统基础架构和一部分应用必须准备好应对延迟和“过时”的数据。

安装并配置多实例MySQL数据库

...

MySQL相关命令加入全局路径的配置

配置MySQL全局路径

which mysql
echo 'export PATH=/path/xxx/mysql/bin:$PATH' >> /etc/profile
echo $PATH 查看

或者使用软连接的方法

ln -s /path/xxx/mysql/bin/* /usr/local/sbin/

务必把MySQL命令路径放在PATH路径中其他路径的前面,否则,可能会导致使用的 mysql 命令不是同一个,进而产生错误。

-ReplicationMode Asynchronous  #设置同步模式为异步,默认为同步

网络在进行这种安装时,起决定性作用,它必须能问信息内容,来区分询问和升级事务。工作站可能也会使用网络来平衡负载,使每个数据中心能够带上属于自己的只读流量。

创建MySQL多实例的数据文件目录

mkdir -p /var/mysql/{3306,3307,3308}/db

地理距离与数据中心管理

MySQL主从复制介绍

MySQL的主从复制并不是数据库磁盘上的文件直接拷贝,而是通过逻辑的 binlog 日志复制到要同步的服务器本地,然后由本地的线程读取日志里面的 SQL 语句,重新应用到MySQL数据库汇总。

MySQL数据库支持单向、双向、链式级联、环状等不同业务场景的复制。
在复制过程中,一台服务器充当 主服务器(Master), 接收来自用户的内容更新;
而一个或多个的其他服务器充当从服务器(Slave),接收来自主服务器 binlog 文件的日志内容,解析出SQL,重新更新到从服务器,使得主从服务器数据达到一致;
如果设置了链式级联,那么,从服务器(Slave)本身除了充当从服务器外,也会同时充当其下面从服务器的主服务器。链式级联复制类似 A-->B-->C 的复制形式。

图片 8

一主一从逻辑图

图片 9

一主多从逻辑图

图片 10

双向主主复制逻辑图

图片 11

线性级联单向双主复制逻辑图

图片 12

环状级联单向多主同步逻辑图

图片 13

MySQL常见复制架构图

MySQL主从复制都是异步的复制方式,既不是严格实时的数据同步,但是正常情况下给用户的体验是实时的。

默认情况下存储复制服务器本地管理员具备管理存储复制权限,可以通过委派普通用户,而不需要本地管理员权限

配置及管理MySQL多实例数据库

服务的开机自启动很关键!把MySQL多实例的启动命令加入 /etc/rc.local,实现开机自启动。

echo "/var/mysql/3306/mysql.sh start
echo "/var/mysql/3307/mysql.sh start
echo "/var/mysql/3308/mysql.sh start

socket connect
mysql -S /var/mysql/3306/mysql.sock

MySQL安全配置:

mysqladmin -uroot -S /var/mysql/3306/mysql.sock -ppasswd    #设置密码
mysql -uroot -S /var/mysql/3306/mysql.sock -p

禁止使用 kill -9 等命令强制杀死数据库,这会引起数据库无法启动等故障发生。

MySQL主从复制配置小结

  1. 环境实例准备;
  2. 配置my.cnf文件;
  3. 登录主库并配置;
  4. 导出数据;
  5. 从库配置;
  6. 从库数据恢复;
  7. 从库开启复制;
  8. 检查同步状态。

存储复制技术,可以说是一项广大ITpro一直期待的技术,之前版本的Windows Server中一直没有什么很好的复制技术可以被用于虚拟化,私有云的场景,DFS只能复制关闭的文件,所以很多场景并不能使用它,新的存储复制技术可以说是一大亮点,一个很典型的场景,如果一个企业要实现一套高可用群集架构,这套架构可能是异地的,但是又没有钱实现设备级别的存储复制,只好使用第三方的产品实现存储复制,公开给群集,例如Starwind或者Datakeeper等产品,主机级别实现软件虚拟的存储复制,公开给群集,现在有了存储复制技术,我们直接使用微软原生自带的就可以实现经济实惠的穷人版的存储复制,存储复制技术的两点还在于,它的平台无关性,硬件无关性,存储技术实现为OS层面的一个技术,只要你有Windows Server 2016数据中心版,就可以使用这项技术,那么这就好玩啦,可以是在我们本地机房里面玩,私有云里面玩,公有云里面玩,混合云场景玩,只要有OS可以,还不好说?硬件无关性,存储复制并没有对节点底层存储做限制,可以是本地SCSI/SATA,ISCSI,Share SAS ,SAN,对于单机对单机,以及群集场景,您还可以一方使用ISCSI,一方使用SAN,只要保证数据磁盘大小,日志磁盘大小一致即可

启动MySQL多实例数据库

/var/mysql/3306/mysql.sh start
/var/mysql/3307/mysql.sh start
/var/mysql/3308/mysql.sh start

如果发现没有显示MySQL对应实施的端口,请稍等几秒在检查,MySQL服务的启动比Web服务慢一些;
请查看错误日志

图片 14

单一配置文件、单一启动程序的多实例部署方案

单一配置文件、单一启动程序实施方案。
vim /etc/my.cnf

[mysqld_multi]
mysqld = /bin/mysqld_safe
mysqladmin = /bin/mysqladmin
user = mysql

[mysqld1]
socket = /dir/path/mysql.sock
port = 3306
pid-file = /dir/path/mysql.pid
datedir = /dir/path/mysql
user = mysql

[mysql2]
socket = /path/mysql.sock
port = 3307
pid-file = /path/mysql.pid
datedir = /path/mysql
user = mysql

启动命令:
mysqld_multi --config-file=/path/my.cnf start 1,2

不建议使用单一配置文件和单一启动程序部署多实例方案

这种场景有一定的使用意义,可以帮助两个相同地域或不同地域的节点,在没有群集的情况下实现基于块级别的存储复制

MySQL主从复制原理过程详解

  1. 在Slave服务器上执行 start slave 命令开启主从复制开关,开始,开始进行主从复制;
  2. Slave服务器的I/O线程会通过在Master上已经授权的复制用户权限请求连接Master服务器,并请求从指定 binlog 日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行 change master 命令指定的),之后开始发送 binlog 日志内容。
  3. Master服务器接收到来自Slave服务器的I/O线程请求后,其上负责复制的I/O线程会根据Slave服务器的I/O线程请求的信息分批读取指定 binlog 日志文件指定位置之后的 binlog 日志信息,然后返回给 Slave 端的I/O线程。返回的信息中除了 binlog 日志内容外,还有在Master服务器端记录的新的 binlog 文件名称,以及在新的 binlog 中的下一个指定更新位置。
  4. 当Slave服务器的I/O线程获取到Master服务器上I/O线程发送的日志内容、日志文件及位置点后,会将 binlog 日志内容依次写到Slave端自身的 Relay Log(中继文件)的最末端,并将新的 binlog 文件名和位置记录到 master-info 文件中,以便下一次读取Master端新 binlog 日志时能够告诉Master服务器从新binlog 日志的指定文件及位置开始请求新的 binlog 日志内容;
  5. Slave服务器端的SQL线程会实时监测本地的 Relay Log 中 I/O线程新增加的日志内容,然后及时地把Relay Log文件中的内容解析成SQL语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这些SQL语句,并在relay-log.info中记录当前应用中继日志的文件名和位置点。

图片 15

MySQL主从复制基本原理逻辑图

小结:

  • 主从复制是异步逻辑的SQL语句级的复制;
  • 复制时,主库有一个I/O线程,从库有两个线程,即I/O和SQL线程;
  • 实现主从复制的必要条件是主库要开启记录的 binlog 功能;
  • 作为复制的所有MySQL节点的server-id都不能相同;
  • binlog文件只记录对数据库有更改的SQL语句,不记录任何查询语句。

初始同步性能测试

《老男孩Linux运维》笔记
MySQL-Documentation

图片 16

实现MySQL主从读写分离的方案

1. 通过程序实现读写分离(推荐)
PHP和Java等程序都可以通过设置多个连接文件轻松地实现对数据库的读写分离,即当语句关键字为 select 时,就去连接 读库 的连接文件,若为 update, insert, delete 时,则连接写库的连接文件。

图片 17

MySQL主从复制根据业务拆分从库方案

2. 通过开源软件实现读写分离

3. 大型门户独立开发 DAL 层综合软件
像百度、阿里等大型门户都会自己开发适合自己业务的读写分离、负载均衡、监控报警、自动扩容等一系列功能的DAL层软件。

图片 18

MySQL读写分离的基本逻辑图

图片 19

MySQL主从复制集群架构的数据备份策略

有了主从复制,还需要做定时 全量 + 增量 备份吗?答案是肯定的!
因为,如果主库有误操作(如:drop),从库也会执行,这样主从库都没有了该数据。

把从库作为数据库备份服务器时,备份策略如下:

图片 20

根据业务重要性拆分从库

Set-SRPartnership -NewSourceComputerName 16server2 -SourceRGName RG2 -DestinationComputerName 16server1 -DestinationRGName RG1 

重点

  1. MySQL多实例的实现原理和实战部署;
  2. MySQL主从复制的原理;
  3. MySQL主从复制的实践;
  4. MySQL主从复制故障解决思路;
  5. MySQL主从复制延迟原因及解决思路;
  6. MySQL主从复制集群,从库备份的思想和思路;
  7. MySQL主从复制读写分离授权访问用户方案;

图片 21

MySQL主从复制应用技巧

Set-SmbBandwidthLimit  -Category StorageReplication -BytesPerSecond  50MB

单机数据库多实例

1. 主从复制数据库单机多实例环境准备
使用前面配置的 3306,3307,3308三个实例

2. 定义主从复制需要的服务器角色
主库及从库名称、IP、Port信息:

Master,ip:3306;
Slave1,ip:3307;
Slave2,ip:3308;

3. 在主库Master上执行操作配置
设置server-id并开启binlog功能参数
vim ./3306/my.cnf

[mysqld]
server-id = 1
log-bin = /path/3306/mysql-bin

提示:

  • 这两个参数一定要放置于[mysqld]模块下,否则会出错;
  • server-id建议使用服务器ip最后一个点分十进制数,目的是避免不同机器或实例 ID 重复;
  • 参数不能重复;
  • 修改参数后重启数据库。

4. 在主库上建立用于主从复制的账号
登录主库3306:
mysql -uroot -ppasswd -S /path/3306/mysql.sock
件利用与从库复制的账号:

grant replication slave on *.* to 'rep'@'192.168.0.%' identified by 'passwd';

#登录之后
flush privilege;

#grant 权限1,权限2,…权限n on 数据库名.表名称 to 用户名@用户地址 identified by ‘连接口令’;
# 192.168.0.%代表此网段

select user,host form mysql.user where user='rep';

5. 实现对主数据库锁表只读
对主数据库锁表只读:

flush table with read lock;

在引擎不同的情况下,这个锁表命令的时间会受下面参数的控制。锁表时,如果超过设置时间不操作会自动解锁。

图片 22

默认情况下自动解锁的时长参数

锁表后查看主库状态:
mysql> show master status;

锁表后导出数据库:
mysqldump -uusername -ppasswd -S /path/mysql.sock xxxxx

导出数据完毕后,解锁主库,恢复可写:
mysql> unlock tables;

6. 把主库导出的数据迁移到从库
这里常用的命令有 scprsync等,将备份的数据往异地拷贝。

  1. 使用数据包签名,AES-128-GCM全数据加密等安全技术,存储复制过程使用Kerberos AES256进行节点间的所有身份验证

MySQL主从复制的企业应用场景

MySQL主从复制集群功能使得MySQL数据库支持大规模高并发读写成为可能,同时有效保护了物理服务器宕机场景的数据备份。

应用场景1:从服务器作为主服务器的实时数据备份
主从服务器架构的设置可以大大加强MySQL数据库架构的健壮性。当主服务器出现问题时,可设置自动切换到从服务器继续提供服务,此时从服务器的数据与宕机时的主数据库几乎是一模一样的。
这类似 NFS 储存数据通过 inotify+rsync 同步到备份的 NFS服务器,只不过MySQL的复制方案是其自带的工具。
利用MySQL的复制功能进行数据备份时,在硬件故障、软件故障的场景下,该数据备份是有效的;但是对于人为地执行 drop , delete 等语句删除数据的情况,从库的备份功能就没用了,因为从服务器也会执行删除的语句。

应用场景2:主从服务器实现读写分离,从服务器实现负载均衡
主从服务器架构可通过程序(PHP,Java等)或代理软件实现对用户(客户端)的请求读写分离。即让重复服务器仅仅处理用户的 select 查询请求,降低用户查询响应时间,以及同事读写在主服务器上带来的访问压力; 对于更新的数据,如update, insert, delete等,仍交给主服务器处理。确保主服务器和从服务器保持实时同步。

百度、淘宝等绝大多数网站都是用户浏览页面多余用户发布内容,因此通过在从服务器上接受 只读请求,就可以很好地减轻主库的 读压力,且从服务器可以很容易地扩展为多台,使用LVS做负载均衡效果就非常帮棒了。
这就是传说中的数据库读写分离架构

应用场景3:把多个从服务器根据业务重要性进行拆分访问
可以把几个不同的从服务器,根据公司的业务进行拆分。如:

用来做查询服务的从服务器;
用来做数据备份的从服务器;
为公司人员提供访问的从服务器;
为开发人员使用的从服务器;

这样的拆分减轻了主服务器的压力外,还可以是数据库各个业务互不影响。

在异步复制场景中,应用程序的写入请求会被复制引擎捕获,写入到本地日志磁盘后就立即向应用程序确认写入完成,此模式对于应用程序而言,性能并无消耗,稍后复制引擎会再把数据复制到远程站点,但此过程已经不在应用程序IO路径中,应用程序IO已经结束,所以远程站点的响应性和距离并不重要,但如果源站点忽然宕机,并且数据的副本仍未复制到远程站点,则存在数据丢失的风险。

本文我们将实作单机对单机的复制

默认情况下存储复制会尽可能使用所有可用通信的网卡进行存储复制,我们可以指定使用指定网卡完成存储复制流量

图片 23

存储复制技术部署需求

本文由必威发布于必威-运维,转载请注明出处:存储复制其实是工作在Windows,假设您的数据完全

相关阅读