Maison >base de données >tutoriel mysql >Une brève introduction au cluster distribué MySQL MyCAT (1)

Une brève introduction au cluster distribué MySQL MyCAT (1)

黄舟
黄舟original
2017-03-11 14:17:581917parcourir

Après un long moment, j'ai pensé à mettre à jour mon blog. Récemment, j'ai changé la base de données d'Oracle en MySQL Après l'avoir étudiée pendant un moment, j'ai l'impression que la version communautaire de MySQL est inférieure à Oracle en tout. aspects. Oracle est vraiment pratique !
D'accord, pas de bêtises, cette fois je vais enregistrer quelque chose sur la construction d'un cluster distribué MySQL, MyCAT, je le comprends comme un agent MySQL.
-------------------------------------------------------------- -- ------------------CONSEILS importants---------------------- - ----------------------------------------
L'équipe MyCAT a publié la version 1.4Alpha, qui a corrigé de nombreux bugs et ajouté de nouvelles fonctionnalités
Le blogueur a utilisé la version 1.3 pour les tests, le test est donc avec la dernière version. Les résultats peuvent être incohérents !


-------------------------------------- --- ----------------Présentation générale------------- -------------------------------------------------- ---

L'introduction en arrière-plan de MyCAT est simplement ignorée, ce qui est inutile. Bien sûr, c'est quelque chose développé par JAVA, qui doit être compris ~.

------------------------------------------------------ ------ --------------Le prédécesseur de MyCAT-------------- --------------- ------------------------------------ -----------

Le prédécesseur de MyCAT est Alibaba a officiellement open source le middleware de base de données Cobar le 19 juin 2012. Cobar Le prédécesseur est Amoeba, qui est depuis longtemps open source. Cependant, après le départ de son auteur Chen Siru pour se rendre à Shanda, Alibaba a pris en compte en interne la stabilité d'Amoeba, les performances et le support fonctionnel, ainsi que d'autres facteurs, ont rétabli une équipe de projet et remplacé le nom est Cobar. Cobar est fabriqué par Le middleware de traitement distribué MySQL open source d'Alibaba peut fournir des services de données massifs dans un environnement distribué, tout comme une base de données traditionnelle.

Cobar est recherché par les programmeurs depuis sa naissance, mais depuis 2013, il n'y a eu quasiment plus de mises à jour ultérieures. Dans cette situation, MyCAT a vu le jour. Il a été développé sur la base du produit open source Cobar d'Alibaba, la stabilité, la fiabilité, l'excellente architecture et les performances, ainsi que de nombreux cas d'utilisation matures, ont fait de MyCAT un bon produit dès le début. , debout sur les épaules de géants, MyCAT peut voir plus loin.

-------------------------------- ----------------------------Fonctionnalités importantes de MyCAT------------ --- ----------------------------------------------- --- ---
Prend en charge la norme SQL 92
Prend en charge le cluster MySQL et peut être utilisé comme proxy
Prend en charge Connexion JDBC à ORACLE et DB2, SQL Server, simulez-le en tant que serveur MySQL ;
Prend en charge Galera pour le cluster mysql, le cluster percona ou le cluster mariadb, fournissant un cluster de partage de données haute disponibilité
Basculement automatique, haute disponibilité ;
prend en charge la séparation en lecture-écriture, prend en charge le mode MySQL double maître et plusieurs esclaves, ainsi que le mode un maître et plusieurs esclaves ; prend en charge les tables globales, les données sont automatiquement partagées sur plusieurs nœuds pour des requêtes de corrélation de tables efficaces
prend en charge une stratégie de partitionnement unique basée sur les relations E-R, réalisant des requêtes de corrélation de tables efficaces
Support multiplateforme, déploiement et mise en œuvre simples.

-------------------------------------- --- -----------------------L'architecture de MyCAT
---------------- -- ------------------------------------------------ --
Il est généralement divisé en trois parties. Le front-end est le connecteur. La gestion des threads utilise les pools de ressources et utilise AIO par défaut (ces informations de base sont visibles). dans le journal de démarrage) ; Avec la présence de
SQL Executor, cela ressemble plus à un SQL Les éléments de processus, DataNode et la détection du rythme cardiaque sont deux composants implémentés par la couche intermédiaire
L'un est lié à la bibliothèque MySQL (notez, pas l'instance
), et l'autre est une surveillance commune. mécanisme.Module de fonction ;
Le niveau de stockage le plus bas est le cluster de MySQL~ Comment utiliser le cluster MySQL dépend de nous╰(?? ▽ ??)╯ .

------------------------------------------------------ ------ ------------------Comment utiliser MyCAT---------------- ------- ----------------------------------
MyCAT utilise actuellement des fichiers de configuration Méthode pour définir les bibliothèques logiques et les configurations associées, comprenant principalement trois fichiers :
MYCAT_HOME/conf/schema.xml définit les bibliothèques logiques, les tables, les nœuds de partition, etc. ;
Définissez les règles de partitionnement dans MYCAT_HOME/conf/rule.xml ; définissez les variables liées à l'utilisateur et au système, telles que les ports, etc., dans MYCAT_HOME/conf/server.xml .
Ne vous inquiétez pas, cet article présentera brièvement les fonctions de ces fichiers de configuration et la signification de certains paramètres.

Allons-y un par un, regardons d'abord
schema.xml, qui est un exemple de modèle extrait d'Internet
    

  1. <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://org.opencloudb/">
        <schema name="weixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="weixin" >
            
        
        <schema name="yixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="yixin" />
            
        
        <dataNode name="dn1" dataHost="localhost0" database="weixin" />
        <dataNode name="dn2" dataHost="localhost0" database="yixin" />
        <dataHost name="localhost0" maxCon="450" minCon="10" balance="1"
           writeType="0" dbType="mysql" dbDriver="native">
           <heartbeat>select user()</heartbeat>
           <!-- can have multi write hosts -->
           <writeHost host="hostM1" url="localhost:3306" user="root" password="123456" />
               <readHost host="hostS1" url="localhost:3307" user="test" password="123456" />
        </dataHost>
    </mycat:schema>
    Le premier est le nom du schéma = "weixin
", L'effet de cette configuration est que lorsque le client MySQL se connecte à MyCAT, via la commande Show DATABASE, vous pouvez voir le nom de la base de données,

. Par exemple, dans cette configuration fichier, il est configuré Deux bases de données, weixin et yixin, contiennent chacune une table utilisateur.
Remarque : La base de données affichée par MyCAT à l'extrémité externe et les tables de la base de données sont toutes configurées dans le schéma. Il n'y a aucune table ou bibliothèque écrite dans celui-ci, même si elles existent à l'arrière. -fin MySQL, ils ne peuvent pas accéder via MyCAT, mais MyCAT ne définira pas la structure de la table spécifique.
Vient ensuite le datanode. Cet attribut spécifie la table de schéma et la base de données dans laquelle il est stocké. Par exemple, dans cette configuration, le nœud de données de dn1 est spécifié pour être situé sur localhost0, et le le nom de cette instance de base de données est la base de données weixin, il en va de même pour dn2.
datahost répertorie les informations spécifiques du cluster MySQL back-end réel. writehost est l'instance MySQL responsable de l'écriture des données, et writehost est l'instance MySQL responsable de la lecture des informations spécifiques des deux. les instances sont écrites de la même manière, ce qui signifie que le backend utilise une seule instance. S'il est configuré comme des instances différentes, configurez la synchronisation maître-esclave entre les deux instances, puis utilisez MyCAT pour obtenir une séparation en lecture-écriture
vers la base de données La segmentation verticale se fait principalement par schema.xml, qui sera présenté en détail plus tard.
rule.xml comme exemple

  1.                                                                                                                                                    La configuration dans la règle, user_id modulo 1024, puis divisée en deux tranches, chaque tranche en contient 512.
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mycat:rule SYSTEM "rule.dtd">
    <mycat:rule xmlns:mycat="http://org.opencloudb/"> 
     <tableRule name="rule">
        <rule>
          <columns>user_id</columns>
          <algorithm>func1</algorithm>
        </rule>
     </tableRule>
     <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
        <property name="partitionCount">2</property>
        <property name="partitionLength">512</property>
     </function>
    </mycat:rule>
D'autres stratégies de segmentation seront présentées en détail ultérieurement



server.xml à titre d'exemple

<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
    <system>
        <property name="sequnceHandlerType">0</property> 
    </system>
    <user name="test">
       <property name="password">test</property>
       <property name="schemas">weixin,yixin</property>
    </user>
</mycat:server>


server.xml里面配置MyCAT的逻辑库参数,如示例,配置的就是逻辑库weixin和yixin的登录用户名和密码
这个XML里面其实还有一些有关于MyCAT性能调整的参数,不过略去了,东西太多,以后再详细介绍

----------------------------------------------------------------------华丽的分割线-------------------------------------------------------------

简单的MyCAT搭建大致上就包括这些内容,现在讲讲使用一段时间以后,对MyCAT的一些总结;
1.MyCAT的性能表现还是不错的,这几天一直对MyCAT的各方面进行测试,发现MyCAT作为一个代理,虽然是在JAVA虚拟机上面运行,但是面对接近9K的QPS的峰值的时候,本身并没有出现无响应或者丢失连接的问题
2.MyCAT对前端显示的所有的库,表,全部由schema来配置,但是本身不定义表结构,这使得后端的表结构如果出现不一致,MyCAT前端是察觉不到的,不太方便吧;
3.第二点的不方便,也反映了一点,没有配置到schema的表,完全无法通过MyCAT去操作,这也算是安全性良好的一个表现吧;
4.之前说SQL Executor没感觉到,也是因为在一些测试中,发现MyCAT更像一个提供转发和结果合并功能的代理,只是对SQL和结果进行了process,不过这个需要去看源代码才知晓细节了。



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn