zoukankan      html  css  js  c++  java
  • igntie实现数据同步

    思路

    tomcat配置两个数据源,一个正常的mysql,一个ignite的server集群

    如sit的数据需要变动,sit的tomcat会在往自身mysql中操作的同时,往ignite server集群中写入变动消息,往内存数据库中写入如本次变更的源环境,执行的语句等。

    而在server集群中发生变动后,sit和uat的client监听端均取得server集群的变动(本次变更的源环境,执行的语句等),sit取到后,发现是变动的源环境就是自己,则不作处理;uat取得变动后,发现是变动的源环境不是是自己,则在自身的mysql进行相同操作,相当于SIT,所执行的语句在UAT同步进行了执行,即达到了数据同步

    架构

    采用独立式igntie集群,实现不同环境数据库同步

     

    FAQ

    1.ignite server集群如何搭建?

    https://www.jianshu.com/p/640a90225923

    配置文件:apache-ignite-fabric-2.2.0-bin/config/default-config.xml

    注1:server端的client mode不用更改,保持默认即可

    注2:集群中的server端的配置基本一致

    2.server集群是否可以直接查询内存数据库?

    可以使用 DBeaver或者直接使用sqlline命令行

    https://www.zybuluo.com/liyuj/note/1023980

    3. tomcat如何连接到ignite server集群?

    在tomcat/conf/context.html中配置数据源即可

    <Resource name="jndi/igniteDS"

    auth="Container"

    type="javax.sql.DataSource"

    driverClassName="org.apache.ignite.IniteJdbcThinDriver"

    url="jdbc:ignite:thin://xx.xx.xx.xx/"

    4.client端如何搭建?如何配置client端与ignite server集群的连接?

    客户端使用jar包形式启动,集成了ignite相关jar,设置了ignite.listen.clientmode=true, igntie.listen.ips=服务端的ip(s),在src/main/java/xx/xx/xx/service/ignite/Application.java的ignite方法中以嵌入式模式的启动方式启动即可

    配置文件:src/main/resource/(config/)application.properties

    5. client端监听到的消息是什么格式?CQL是什么?

    基于Ignite的ContinuousQuery

           https://www.jianshu.com/p/e527af8213d0

    CQL

           持续查询语言(CQL, continuous query language)类似于:内存数据库+视图+触发器 的解决方案。

           简单来说,一有符合条件的对象进入查询结果集,就执行一次回调函数。

    6. 如何配置client端与mysql集群的连接?client端如何修改mysql中的数据?

    使用spring boot框架的配置模式,在配置文件中配置好要连接的mysql后,执行与src/main/resource/mapper/下的xx.xml中的SQL语句即可在对应mysql中执行语句

    配置文件:src/main/resource/(config/)application.properties

    7. Ignite的持久化策略?

    7.1.ignite原生持久化是一个分布式的ACID和兼容SQL的磁盘存储

    7.2.磁盘上存储的数据集是内存中的数据集的超集。

    7.3.和纯内存的使用场景一样,每个独立的节点只会持久化数据的一个子集,不管是主还是备节点,都是只包括节点所属的分区的数据。

    7.4.持久化开启之后,所有的数据和索引都会存储在所有集群节点的内存和磁盘上,以类似的格式存储,避免在内存和磁盘之间移动数据时进行昂贵的转换。

    7.5.如果整个集群宕掉,那么重启时是不需要通过从持久化预加载数据来对内存进行预热的,只要所有的节点都可以互相访问了,集群就具有了完整的功能。

    7.6.开启了Ignite持久化,集群默认是未激活的,无法进行任何的CRUD操作。用户需要手工激活集群。

    8.ignite的ACID实现?

    ignite原生持久化的ACID的保证由2阶段提交协议(准备、提交阶段)、锁(悲观锁、乐观锁)以及ignite的故障恢复策略来保证

    8.1.悲观锁:tx.get()/put()时就申请锁,阻止其他事务对数据的访问;乐观锁:tx.commit()时再申请锁,且不会阻止其他事务对数据的访问。

    8.2执行tx.commit()方法时,先执行准备阶段,准备阶段失败会抛出异常,之后执行提交阶段。

    8.3 ignite原生持久化的恢复策略由WAL(Write-Ahead Log预写日志)、检查点来保证。

    8.3.1WAL的目的是以最快的速度向磁盘传播更新,以及为单个节点或者整个集群故障的场景提供一种恢复机制。值得一提的是,集群可以根据WAL的内容在故障或者重启时随时恢复到最近成功提交的事务。

    8.3.2检查点解决了通过WAL从头到尾地恢复集群会花费大量的时间的问题,有助于通过在磁盘上保持页面的最新状态而高效地利用磁盘空间,并且允许在WAL档案中删除过时的WAL段(文件)。

    注:Ignite没有纯粹的主节点或者备节点,每个节点默认既是主节点,又是备节点,它是一组分区的主节点又是其他分区的备节点。

    参考

    Apache Ignite(六):Ignite的集群部署

    https://my.oschina.net/liyuj/blog/651036

    SQLLine 1.0.2

    http://sqlline.sourceforge.net/#commands

    持久化文档

    https://www.zybuluo.com/liyuj/note/982784

    Apache Ignite事务架构:2阶段提交协议

    https://my.oschina.net/liyuj/blog/1626309

    Apache Ignite事务架构:并发模型和隔离级别

    https://my.oschina.net/liyuj/blog/1627248

    Apache Ignite事务架构:故障和恢复

    https://my.oschina.net/liyuj/blog/1791800

  • 相关阅读:
    在单机Hadoop上面增加Slave
    两台机器添加信任关系
    JS Scoping and Hoisting
    SCSS(SASS、CSS)学习
    程序的内存情况
    delete-node-in-a-bst
    serialize-and-deserialize-bst
    Linux Shell脚本编程--curl命令详解
    iOS文件保存策略
    浅谈spring——spring MVC(十一)
  • 原文地址:https://www.cnblogs.com/yc913344706/p/9175717.html
Copyright © 2011-2022 走看看