Mycat实现分布式postgreSQL集群

1、mycat 简介

         Mycat 是一个开源的分布式数据库系统,是由阿里开源Cobar演化而来,解决之前cobar存在的问题。比如:假死(cobar的前端使用NIO,后端采用阻塞模式并未实现NIO,一旦数据库当前线程池占用后,即便再简单的SQL,或者试图建立新链接,数据库都会无法响应。)、数据一致性?(一旦cobar假死之后,如果实现了cobar高可用,并配置了心跳检测。心跳检测失败后cobar会进行主从切换 ,这就导致cobar,认为数据库宕机了,切换其他节点进行数据库操作,但实际上只是因为数据库阻塞。这就可能多个节点数据库都在进行写操作,从而严重影响数据库的数据的一致性。)等等一系列的问题。 mycat实现了 MySQL 协议的的Server,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用MySQL 原生(Native)协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分表分库。

          目前采用mycat作为分布式数据库架构的企业案例

简单的说,MyCAT就是:

        1、一个彻底开源的,面向企业应用开发的“大数据库集群”

        2、支持事务、ACID、可以替代Mysql的加强版数据库

        3、一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server

        4、结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

        5、一个新颖的数据库中间件产品

 

2、原理      

        Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

        更多原理请参看官网

        mycat源码地址

        监控系统

3、准备

        本次测试在ubuntu环境下,打算使用四个数据库,做两个分片,并且每个分片上实现读写分离,所有需要四个数据库。

        我们本机启动一个postgresql数据库,推荐大家使用docker官方安装三个postgresql的镜像,比较简单,也不怕出错。安装 docker。并执行一下两条命令:

         1、docker pull postgres

         2、docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 54321:5432 \ -v /etc/data/pgdata:/var/lib/postgresql/data-d postgres

         3、 启动以上的四个数据库。

         到此准备工作已经ok。注意在步骤2中修改密码,主机映射地址。          

4|、开始

        1、在mycat的conf目录下修改server.xml; 这里是配置访问分布式数据库统一的数据库、用户名、密码。当然也可以配置权限。步骤4里面所有的配置的意义以及更多意义更多配置方式请参考mycat 官网权威指南

                   
                             postgresmycat
                            postgresmycats
                  
                                

        2、在mycat的从conf目录下修改schema.xml;这里主要是进行分片,暂时不考虑主从复制,只是做了分布式和读写分离。这一块很庞杂,比如全局表、E-R关系分片等。都是围绕分片展开。另外本次测试数据库id并不是自增的。修改至如下:其中配置细节请参考官网权威指南




       
       


       

       
       
       

   
    
   
     


     dbDriver="jdbc" slaveThreshold="100" switchType="1">
        select user
       
           
       

   

   

 slaveThreshold="100" switchType="1">
        select user
       
           
       

   

         3、设置分片规则,修改mycat的conf目录下的rule.xml,添加如下内容:

   
       
            id
            mod-long
       

   

   
       
            user_id
            mod-long
       

   

          4、启动mycat,进行测试,mycat配置后的完整实例。测试代码springboot做的简单测试代码,下载,运行,其实就是给数据库insert,之后我们分别在配置的各个数据库中查看,会发现数据取余分散在这些数据库中。

         5、  也可以省略4步骤,使用命令插入数据,根据1步骤中配置的mycat连接方式:mysql -upostgresmycat -ppostgresmycat -h127.0.0.1 -P8066

你可能感兴趣的:(postgresXL)