扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
灾备双活如何实现数据同步?
成都创新互联是专业的松岭网站建设公司,松岭接单;提供成都做网站、成都网站建设、成都外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行松岭网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
问题1:金融系统中同城灾备如何实现数据实时同步(两地是异构存储),请软件推荐和方法?
问题2:如果是远距离(1000KM)异地灾备双活,如何较好的实现数据同步?
希望获得:具体解决, 注意事项, 实例参考
问题1:金融系统中同城灾备如何实现数据实时同步(两地是异构存储),请软件推荐和方法
问题2:如果是远距离(1000KM)异地灾备双活,如何较好的实现数据同步?
A1:数据实时同步复制有两种大的分类:
1)存储复制 - 即使异构存储也能,只不过效果差点。利用虚拟化网关集群设备(比如VPLEX)。但是有一个缺点,存储层面的块儿复制,解决不了逻辑校验的问题,有可能同步过去的块儿数据,数据库无法识别。
2)数据库层面的复制,Oracle、db2都有。是基于日志的复制,数据复制量很小。很安全。但是灾难时刻拉起数据库的时间也不是很理想。有条件的做一下自动化开发。
wangj0923技术经理 , 工行
存储复制最大的问题是,复制过去的磁盘对数据库来讲突然下宕后挂上的,有可能不识别,即便识别了,也要进行一致性校验,那个时间是无法忍受的。
数据库复制的问题是同步模式对主库的影响较大,备库出问题容易hang主库,而异步模式无法确保RPO为零。
需要各种技术组合起来用。
shenxzh系统工程师 , Nanjing Securities
同城灾备,如果是ORACLE数据库,可以使用远距离RAC,实现同城双活数据中心(通过ORACLE ASM实现异构存储双活,或者存储虚拟设备VPLEX,SVC等)
远距离异地灾备,最好使用主备模式,采用dataguard利用异步模式(或采用12C的far sync功能),保证数据安全
else_xie系统运维工程师 , PICC
cz_doctor、xk2008赞同了此回答
首先要确定,实现要异地实时同步,生产环境答应吗?
另外带宽,速度的压力,成本投入能答应吗?
每一个数据的修改交互,都需要问1000KM外的,是否OK了。然后才下一步?那多累的,估计某些应用可以,同步数据少的,对业务性能不敏感的。
现在很多存储的复制技术,异步效果也趋于同步效果,只要业务压力在可接受范围内,就能及时传送数据过去,只要自己明白,如果遇到业务高峰时,是要承受数据传输滞后比较明显的结果而已。
另外,对复制同步的数据,如果不是在线进行使用的,要定期的验证检查,反正数据已经是“带病”的,还一直在同步,哪天真的要用,才发现,那就迟了。
zhoujia8218(提问者)
你的这些反问点,都是我要关注的和不明确的地方,谢谢提醒
nitkey系统架构师 , ECT
xiaoyaozi赞同了此回答
问题1:异构存储要实现同城实时同步有几种实现方式:1.存储前面加一层虚拟网关,通过虚拟网关来实现两个存储的数据同步;2.操作系统层面,通过LVM或者veritas的卷管理软件实现;3.通过应用层自己实现数据同步,比如ORACLE的DG,DB2的HADR。同城实时同步一般对架构环境的要求都较高,如果再加上是异构存储,要特别注意两个存储的性能是否匹配,否则会出现短板
问题2:1000KM以上我认为基本上只有靠存储的异步复制,通过数据库的复制方式在远距离的案例上不是太多。
孔再华数据库运维工程师 , 中国民生银行
同城灾备可以做到对等双活。相当于双中心不差别提供服务。数据库技术有DB2 GDPC和Oracle Extended RAC。DB2 GDPC集群底层通过GPFS集群文件系统完成数据同步,支持异构的存储。
远距离灾备如果需要双活肯定是有很大限制的。首先数据不可能实时同步,代价太大。因此对一致性要求高的系统几乎不可能。但是如果使用异步的方式,例如DB2的HADR技术,或者是CDC等数据逻辑同步技术,能够做到同步数据,但是灾备服务器只能用来做查询分析等作用。
zhoujia8218(提问者)
CDC远距离复制时有没有需要注意的吗?我们只用过同城的,远距离的没有尝试过
【DataGuard高可用性】
DataGuard确保企业数据的高可用性,数据保护以及灾难恢复。在主数据库故障无法修复时启动DataGuard的备份库,可以像主库一样继续对外提供服务而不影响业务的持续运行。
主备数据库之间通过日志传输实现数据库数据同步。
日志传输过程
1、在主系统中利用LNS进程(日志传输进程)将日志传输到备用系统
2、备用系统利用RFS(日志接收进程)接收主库传输过来的日志并利用MRP(日志恢复进程)同步数据
3、DataGuard环境中必须保证3个进程正常工作,否则此DataGuard环境将不能满足灾备需要。
【DG可以解决的问题】
1、在主库停机维护时,备份库顶上,使业务应用影响最小
(1)主库安装OS补丁或Oracle补丁
(2)主库进行数据整理
2、一个新的数据迁移项目,将数据迁移同型号更高端IBM服务器与存储中,主库数据2T,并且此迁移操作必须停机时间控制在30分钟以内(此次时间远远适于迁移数据库文件所需时间),怎么办?
(1)把备份库顶上去
3、由于主库(仓库)数据量非常巨大(50T),所以没有常规备份,但此系统存在DataGuard灾备系统,如果主库某数据文件由于某种原因导致介质故障,你将如何对其进行恢复。
4、异地归档日志
------------------------------------------------------------------------------
主库:18.150 备库:18.160
1、主库和备库:开启归档模式
archive log list;-----------查看归档启动否
shutdown immediate;---------开启归档前要正常关库
startup mount;-------------启动Mount状态
alter database archivelog;-------开启归档模式
alter database open;--------开启数据库
2、确认主库强制写日志
select force_logging from v$database;
(所有sql语句nologging操作时 也会强制写日志)
SQL alter database force logging;
3、修改主备数据库的参数文件
【主】
SQLcreate pfile from spfile;
cd /oracle/app/oracle/product/10.2.0/db_1/dbs/
vi initTEST.ora
DB_UNIQUE_NAME=TEST
LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB150,DB160)'
LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TEST'
LOG_ARCHIVE_DEST_2='SERVICE=DB160 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TEST'
FAL_SERVER=DB150
FAL_CLIENT=DB160
STANDBY_FILE_MANAGEMENT=AUTO
【备】
SQLcreate pfile from spfile;
cd /oracle/app/oracle/product/10.2.0/db_1/dbs/
vi initTEST.ora
DB_UNIQUE_NAME=TEST
LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB150,DB160)'
LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TEST'
LOG_ARCHIVE_DEST_2='SERVICE=DB150 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TEST'
FAL_SERVER=DB160
FAL_CLIENT=DB150
STANDBY_FILE_MANAGEMENT=AUTO
4、主库和备库
都配置“监听”、“传输文件”,并开启监听
5、主库和备库
都创建“归档日志”目录:mkdir /home/oracle/archive
6、主库和备库
cd /oracle/app/oracle/product/10.2.0/db_1/dbs/
rm -rf spfileTEST.ora
sqlplus / as sysdba
SQL startup force;
SQLcreate spfile from pfile;
7、备库
SQL shutdown immediate
[oracle@sq18 admin]$ sqlplus sys/lipengfei as sysdba
(连接成功)
SQL startup nomount force;
8、主库
SQL show parameter ARCHIVE(查看到刚才配置的值生效了)
9、备库
(报错没有相应目录)
[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/adump
[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/bdump
[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/cdump
[oracle@sq18 admin]$ mkdir -p /oracle/app/flash_recovery_area
[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/udum
保证数据库两边的密码文件中的密码一致(主备数据库sys用户密码必须相同,如果备库中没有orapwTEST,从主库中拷贝到来)
10、主库
mkdir /home/oracle/db_bak/
rman target /
RMAN backup full database format='/home/oracle/db_bak/%U' include current controlfile for standby;
(别退出RMAN,第12步用)
11、备库
mkdir /home/oracle/db_bak/
12、主库(把全库备份的文件拷贝到备库)
cd /home/oracle/db_bak/
scp 备份文件 oracle@192.168.18.160:/home/oracle/db_bak/
RMANconnect auxiliary sys/lipengfei@DB160
RMAN duplicate target database for standby nofilenamecheck;----异机(备库)恢复,保证主备库的数据和状态一样
13、备库
cd /oracle/app/oradata/TEST
ls --------查看有没有文件
sqlplus / as sysdba
SQLselect open_mode from v$database;----------mount状态
14、主库
SQL select process from v$managed_standby;
(没有灾备的进程)
SQL alter system switch logfile;
SQL select process from v$managed_standby;
PROCESS
---------
ARCH
ARCH
LNS
已经有了进程,lns传输进程)
15、备库
SQL select process from v$managed_standby;
PROCESS
---------
ARCH
ARCH
RFS
RFS
(已经有了进程,rfs接收进程)
SQL alter database recover managed standby database disconnect from session;
SQL select process from v$managed_standby;
PROCESS
---------
ARCH
ARCH
RFS
RFS
MRP0
16、主库
SQLcreate table haha as select * from dba_objects;
SQLinsert into haha select * from haha;
SQLalter system switch logfile;
17、备库
SQL alter database recover managed standby database cancel;
(备库上,只有把恢复日志进程MRP0取消,才可以打开数据库)
SQL alter database open;
SQL select count(*) from haha
【注意】
(1)备用数据库在日志恢复过程中(MRP进程存在期间)数据库处于MOUNTED状态,此时备用数据库无法打开供读取使用
(2)打开备用数据库
停止备用库的日志恢复进程MRP
alter database recover managed standby database cancel;
open备用数据库,备用数据库默认打开为只读方式
alter database open;
(3)重新启动备用数据库的MRP进程,数据库自动从OPEN状态转换到MOUNT 状态
alter database recover managed standby database disconnect from session;
(4)mrp进程停止期间,只要RFS进程存在,那么不影响日志的接收
兄弟,以上就是关于oracle DG构架的实验材料,希望可以帮到你!
异地多活(异地双活)是最近业界讨论比较多的话题,特别是前一阵子支付宝机房光纤故障和携程网数据库丢失之后,更加唤起了技术人员们对异地容灾的考虑。
而异地多活比异地容灾更高一级,因为异地容灾仅仅是一个冷备的概念,而异地多活却是指有两个或者多个可以同时对外服务的节点,任意一个点挂了,也可以迅速切换到其他节点对外服务,节点之间的数据做到准实时同步。
网上看了很多技术分享,总结了以下实践经验:
1 如果业务量不大,没必要做异地多活,因为异地多活需要的运维资源成本、开发成本都非常高;
2 注意机房间的延时问题,延时大的可能达到100ms以上,如果业务需要多次跨机房请求应用的话,延迟的问题会彻底放大;
3 跨机房的专线很大概率会出问题,要做好运维或者程序层面的容错;
4 不能依赖MySQL双写,必须有适应自身业务的跨机房消息同步方案;
5 MySQL或者其他存储的数据同步问题,在高延时和较差的网络质量的情况下,考虑如何保证同步质量;
6 核心业务和次要业务需要分而治之,异地多活的业务形式越简单越好,甚至可以只做核心业务;
7 异地多活的监控、部署、测试等流程也要跟上;
8 在业务允许的情况下,考虑用户分区,特别是游戏、邮箱业务比较容易做到;
9 控制跨机房消息体大小,越小越好;
10 考虑使用docker等容器虚拟化技术,提高动态调度能力
双活数据中心指的是热备份数据中心和冷备份中心。
1、在热备份的情况下,只有主数据中心承担用户的业务,此时备数据中心对主数据中心进行实时的备份,备数据中心可以自动接管主数据中心的业务,用户的业务不会中断,所以也感觉不到数据中心的切换。
2、在冷备份的情况下,也是只有主数据中心承担业务,但是备用数据中心不会对主数据中心进行实时备份,这时可能是周期性的进行备份或者干脆不进行备份,如果主数据中心挂掉了,用户的业务就会中断。
扩展资料:
双活数据中心的优点:
能够充分利用资源,避免了一个数据中心常年处于闲置状态而造成浪费。通过资源整合,“双活”数据中心的服务能力是双倍的。双活数据中心如果断了一个数据中心,另外一个数据中心还在运行,对用户来说是不可感知的。
双活数据中心的建设三个条件:
双活数据中心的建设首先要满足三个条件,第一个是应用双活,也就是说数据库一定要实现双活,第二个是网络要双活,业务网络要保证能够同时联通两个数据中心,第三个是数据要双活,两边的数据要能够实现被独立使用。
参考资料来源:百度百科:数据中心
1、数据量不大的话,比如整体小于10G,你可以在主机访问量小时或者shutdown时将oracle打包。例如:tar zcf /opt/u02.gz /u02,然后将u02.gz文件scp到备机。
2、如果数据量很大,你可以用rsync同步到备机
3、配置主备无密码互访
4、添加计划任务
crontab -e
0 4 * * * /opt/rsync_ora.sh;
rsync_ora.sh内容:
#!/bin/sh
rsync -av '-e ssh -p 22' /u02/oracle oracle@172.16.1.2:/u02
rsync -av '-e ssh -p 22' /data1/oracle oracle@172.16.1.2:/data1
oracle 级别的除了RAC以外的双击热备,datagurd,goldendate,strem.....都做不到真正意义上的双活,但是操作系统级别的负载均衡等可以实现应用级别的双活。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流