线上系统架构设计 之 【数据库篇-主主从】

双主一从架构,从服务器在本地,用于备份和研发测试。两台线上服务器进行数据库相互同步,保证数据一致性,采用xtrabackup备份数据库+脚本每天1点异地备份到从服务器。

一、对线上的一台主服务器数据进行备份,并恢复到另外两台服务器上。

innobackupex --defaults-file=/wqdata/mysql/my.cnf --user=bkuser --password=‘123456‘ /wqdata/mofidbbak/fullbackup/    备份

scp -P 8022 modb0909.tar.gz 223.100.98.83:/wqdata/   传送

从服务器恢复数据库步骤:

service mysqld stop
  951  rm -rf /mydata/data/*
  953  innobackupex --defaults-file=/wqdata/mysql/my.cnf --copy-back /wqdata/2015-09-09_13-06-43/
  955  chown -R mysql.mysql /wqdata/mydata/data/
  956  service mysqld start

二、配置主主从:

主服务器 show master status;

从服务器 change master to master_host=‘223.10.11.124‘,master_user=‘1123wq‘,master_password=‘1112011‘,master_log_file=‘mysql-bin.000018‘,master_log_pos=24418754;

start slave;

show slave status\G;

主主就是反着做一遍

三、xtrabackup备份脚本,见之前文章。

提供几个mysql的高可用方案,各有用途,仅供参考:

A.普通的主从复制————客户端通过master对数据库进行读/写操作,Slave端作为备机,可用来进行一些查询,备份等操作。

优点:部署简单,易于扩展,能提供一定的数据保护。

缺点:如果master主机硬件故障且无法恢复,则可能造成部分未传送到Slave端的数据丢失;如果master端需要进行某些维护操作,将slave临时作为master提供服务之后,又需要重新搭建主从环境,会对master造成一定的性能影响。

B.双主复制————两个 mysql server互相将对方作为自己的master,自己作为对方的Slave来进行复制,一端提供写服务,另一端读服务或者仅仅作为备机不用提供任何服务,而且其还能够跟一个或者多个Slave专门提供读服务。

优点:最大的好处就是既可以避免主Master的写入操作不会受到Slave集群的复制所带来的影响,同时主Master需要切换的时候也基本上不会出现重搭Replication的情况。

缺点:这个架构也有一个弊端,那就是备用的Master有可能成为瓶颈,因为如果后面的Slave集群比较大的话,备用Master可能会因为过多的SlaveIO线程请求而成为瓶颈。

C.主从复制扩展:读写分离————由一个master复制到一个或者多个Slave的架构模式,客户端通过master对数据库进行写操作,通过Slave端进行读操作,并可进行备份,master出现问题后,可以后动将应用切换到Slave端。该方案主要用于读压力比较大的应用系统中。

优点:结构灵活,数据库端廉价扩展,能够解决很多中小型网站的数据库压力瓶颈问题。

缺点:需要程序来实现读写分离,增加了程序的复杂度,如果服务器架构调整或者有主机发生故障,还需要调整程序。

D.HearBeat+双主复制————
hearbeat最核心包括的两个部分是心跳监测和资源接管。使用hearbeat+mysql主主同步来实现mysql数据库的
高可用,当master的主机或hearbeat宕机以后会自动切换到备用机上,当恢复以后可以自动切换回来,master继续提供服务。

优点:配置简单,能在一定的程度上避免单点故障。

缺点:如果master上的mysql挂掉,则无法检测到并进行切换,需要一些脚本来协助监控。默认切换到备用机后,不会自动启动mysql,需要手动或者脚本启动,不方便扩展,可能会出现脑裂的问题。

E.Hearbeat+DRBD+Mysql————
本方案采用Hearbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性有DRBD这个工具来保证。默认情况下只有一台mysql在工作,
当主mysql服务器出现问题后,系统将自动切换到备机上继续提供服务,当主数据库修复完毕,又将服务切回继续由主mysql提供服务。

适用场景:适用于数据库访问量不太大,短期内访问量增长不会太快,对数据库可用性要求非常高的场景。

优点:安全性高,稳定性高,可用性高,出现故障自动切换。

缺点:只有一台服务器提供服务,成本相对较高,不方便扩展,可能会出现数据库脑裂。

F.LVS+Keepalive+双主复制————lvs提供负载均衡,keepalive作为故障转移。服务器单点写入,读实现负载很横和故障切换。当网络、mysql服务、服务器、keepalive服务出现故障后,服务器能自动跳转到备用机,当主服务器服务启动起来后会自动切换回来。

适用场景:适用于对数据库可用性要求比较高,读压力比较大的场景(后端可跟一个或多个Slave服务器,让lvs实现读的负载均衡)。这个方案也能够很方便地进行单台数据库的管理维护以及切换工作,比如进行大表的表结构更改,数据库的升级等。

优点:高可用效率好,可以根据服务与系统的可用性多方面进行切换。可以将写vip和读vip分别进行设置,为读写分离做准备。扩展很方便。可以在后面添加多个从服务器,并做到读的负载均衡。

缺点:在启动或者恢复后如果要实现指定条件替换或者不替换需要通过其他方式实现,比如:临时更改mysql的端口等。安装配置比单写入稍微复杂,需要另外一个vip。管理比单写入复杂。主切换后,从需要手工切换。主备切换需要1s左右的时间。

G.MMM+mysqlproxy+双主复制————
MMM(mysql主主复制管理器)是一套灵活的脚本程序,用来对mysql replication进行监控和故障迁移?并能管理mysql
Master-Master复制的配置 。附带的工具套件可以实现多个slaves的read负载均衡.两个mysql
server服务器互为主从,MMM提供浮动IP的功能,如果当前的主服务器挂掉后,客户端的读写请求会通过漂移的虚拟IP自动转移到另一台服务器上,从
而自动实现服务器的故障转移,mysqlproxy实现了读写分离。

适用场景:这个方案是目前比较成熟的解决方案,适用于数据库访问量大,业务增长快的场景。适用于读/写比较高的web2.0应用中。

优点:安全性、稳定性高,可扩展性好,高可用好,当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。

缺点:至少三个节点,对主机的数量有要求,对于实时性很高的场合可能需要做一些处理。

mysqlprox与mysql MMM集成的必要性:实现mysql数据库层的负载均衡;数据库节点实现HA动态切换;读写分离,降低主数据库负载

2种方法解决mysql主从不同步 .

先上Master库:

mysql>show
processlist;   查看下进程是否Sleep太多。发现很正常。

show
master status; 也正常。

mysql>
show master status;

+-------------------+----------+--------------+-------------------------------+

|
File              | Position | Binlog_Do_DB | Binlog_Ignore_DB            
 |

+-------------------+----------+--------------+-------------------------------+

|
mysqld-bin.000001 |     3260 |              | mysql,test,information_schema
|

+-------------------+----------+--------------+-------------------------------+

1
row in set (0.00 sec)

再到Slave上查看

mysql>
show slave status\G

Slave_IO_Running:
Yes

Slave_SQL_Running:
No

可见是Slave不同步

下面介绍两种解决方法:

方法一:忽略错误后,继续同步

该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况

解决:

stop
slave;

#表示跳过一步错误,后面的数字可变

set
global sql_slave_skip_counter =1;

start
slave;

之后再用mysql>
show slave status\G  查看:

Slave_IO_Running:
Yes

Slave_SQL_Running:
Yes

ok,现在主从同步状态正常了。。。

方式二:重新做主从,完全同步

该方法适用于主从库数据相差较大,或者要求数据完全统一的情况

解决步骤如下:

1.先进入主库,进行锁表,防止数据写入

使用命令:

mysql> flush tables with read lock;

注意:该处是锁定为只读状态,语句不区分大小写

2.进行数据备份

#把数据备份到mysql.bak.sql文件

[[email protected]
mysql]#mysqldump -uroot -p -hlocalhost > mysql.bak.sql

这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失

3.查看master
状态

mysql>
show master status;

+-------------------+----------+--------------+-------------------------------+

|
File              | Position | Binlog_Do_DB | Binlog_Ignore_DB            
 |

+-------------------+----------+--------------+-------------------------------+

|
mysqld-bin.000001 |     3260 |              | mysql,test,information_schema
|

+-------------------+----------+--------------+-------------------------------+

1
row in set (0.00 sec)

4.把mysql备份文件传到从库机器,进行数据恢复

#使用scp命令

[[email protected]
mysql]# scp mysql.bak.sql [email protected]:/tmp/

5.停止从库的状态

mysql> stop slave;

6.然后到从库执行mysql命令,导入数据备份

mysql> source /tmp/mysql.bak.sql

7.设置从库同步,注意该处的同步点,就是主库show
master status信息里的| File| Position两项

change
master to master_host = ‘192.168.128.100‘, master_user = ‘rsync‘,
master_port=3306, master_password=‘‘, master_log_file = ‘mysqld-bin.000001‘,
master_log_pos=3260;

8.重新开启从同步

mysql> start slave;

9.查看同步状态

mysql>
show slave status\G  查看:

Slave_IO_Running:
Yes

Slave_SQL_Running:
Yes

10、解锁主库表

mysql> UNLOCK TABLES;

时间: 2024-12-08 21:30:18

线上系统架构设计 之 【数据库篇-主主从】的相关文章

线上系统架构设计之 【文件系统同步篇】

此项目是一个中小型APP类应用,服务器是运营商分配的两台公网IP的虚拟机,后面无共用存储等设备.由于前端要采用负载均衡技术,为了保证数据一致性和安全性,采用两台服务器网站文件之间实时同步,外加一台远程备份用服务器,共三台.所以选择Rsync+sersync 负责主服务器到远程服务器单向(参考之前文章),UNISON+inotify实现主备服务器之间实时相互同步. 一.安装过程:yum -y install ocaml wget http://www.seas.upenn.edu/~bcpierc

NET ERP系统架构设计

解析大型.NET ERP系统架构设计 Framework+ Application 设计模式 我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协作良好的系统,搭建开发人员基础平台,一直是我研究的方向. SouceCounter(版本3.3.91.79)对源代码的统计信息如下: 下面来详细解析一下这个系统的设计架构,纯.NET技术架构方案,C/S W

IM系统架构设计之浅见

背景:除去大名鼎鼎的QQ这款即时聊天工具,还有许多细分行业的IM,比如淘宝阿里旺旺.网易泡泡.YY语音.......恰巧公司产品也要开发一款基于我们自己行业的类IM系统,很有幸我担当了这个产品的架构师,核心代码编写.实现者.下面我近年来从技术上我对IM系统(即时消息的传输,不包括语音,视频,文件的传输)的理解和设计分享出来,浅薄之见,望大家别见笑,欢迎给出批评意见. 一.网络传输协议的选择 目前我知晓的所有IM系统传输即时消息无外乎使用UDP.TCP.基于TCP的http这几种协议中的一种或几种

电商峰值系统架构设计--转载

1.1 系统架构设计目录 摘要:双11来临之际,<程序员>以“电商峰值系统架构设计”为主题,力邀京东.当当.小米.1号店.海尔商城.唯品会.蘑菇街.麦包包等电商企业,及商派.基调网络等服务公司,分享电商峰值系统架构设计的最佳技术实践. 自2009年11月11日,淘宝商城(现名天猫)拉开网购狂欢节的序幕,各大电商的促销浪潮此起彼伏.此时的电商大战不仅是价格之争,更是技术的较量.如何设计电商峰值系统来更好地满足用户蜂拥而至的访问,如何在海量数据处理中实时发现有效信息并转化为商机,成为众多电商企业密

京东虚拟业务多维订单系统架构设计读后感

阅读文章:京东虚拟业务多维订单系统架构设计 文章网址:https://mp.weixin.qq.com/s?__biz=MzU1MzE2NzIzMg==&mid=2247486428&idx=1&sn=382f9d307073839f7900df7168916cf1&chksm=fbf7bb33cc80322599a586248c4bf92880374dcb8c48249c91b03170230112492b3ec628206e&scene=21#wechat_re

线上界面和设计原稿

线上界面和设计原稿的巨大差异 在互联网产品的研发流程中,页面的视觉还原是很重要的一个步骤,也往往是问题最多的一个环节.如果一些细节问题在这个环节没有被有效地发现并解决,那么后续流程中再去解决这些问题的成本就会呈指数上升. 那么今天我们就来梳理一下,看看前端工程师本身以及上下游的角色之间,都会容易遇到哪些常见的问题. 设计师 设计师是最贴近产品体验的人,但是术业有专攻,设计师往往更加注重视觉的表现,而容易犯一些美丽的错误: 1,以原生 APP 的体验类比 H5 页面设计 我们都知道,原生 APP

秒杀系统架构设计

秒杀活动的用户量可能是网站平时正常访问量的数百甚至上千倍,网站如果为了秒杀时的最高并发量而设计部署,就需要比正常运营多的多的服务器,而这些服务器在绝大部分时候都是用不着的,浪费惊人.所以秒杀业务不能使用正常网站的业务流程,也不能与正常网站业务共用服务器,必须设计部署专门的秒杀系统. 秒杀系统所面对的技术挑战: 1.对现有业务造成冲击 2.高并发下的应用.数据库负载 3.突然增加的网络及服务器带宽 4.直接下单 秒杀规则是到点了才能下单,而下单页面也只是一个普通的url,如果得到这个url则不用等

petshop4.0 具体解释之中的一个(系统架构设计)

前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有很多.Net与J2EE之争,很多数据是从微软的PetShop和Sun的PetStore而来.这样的争论不可避免带有浓厚的商业色彩,对于我们开发者而言,没有必要过多关注.然而PetShop随着版本号的不断更新,至如今基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,却又非常多能够借鉴之处.PetShop是一个小型的项目,系统架构与代码都比較简单,却也凸现了很多颇有价值的设计与开发理念.本系列试

高可用、高扩展、低延迟交易处理系统架构设计

为实现一个高TPS.高可靠性.高扩展性.低响应延迟的交易处理系统,在系统架构设计上,需要有诸多考虑.  1. 交易处理系统的功能 交易系统是用于连接多个不同的交易请求系统(上游系统)与交易受理系统(下游系统),在这些交易上下游系统之间传递不同格式的交易报文.同时一个交易请求可能需要发送多个不同的子交易请求到不同的交易受理系统,交易处理系统还负责子交易的拆分.交易完整性与一致性保证. 一个典型的交易处理系统,往往需要支持多种不同的通信协议(TCP长连接.TCP短链接.CTG.CICS.MQ等),支