Heim  >  Artikel  >  Datenbank  >  Kurze Einführung in den verteilten MySQL-Cluster MyCAT (1).

Kurze Einführung in den verteilten MySQL-Cluster MyCAT (1).

黄舟
黄舟Original
2017-03-11 14:17:581861Durchsuche

Nach langer Zeit habe ich daran gedacht, meinen Blog zu aktualisieren. Nachdem ich eine Weile studiert habe, habe ich das Gefühl, dass die Community-Version von MySQL Oracle insgesamt unterlegen ist Aspekte. Oracle ist wirklich praktisch!
Okay, kein Unsinn, dieses Mal werde ich etwas über den Aufbau eines verteilten MySQL-Clusters, MyCAT, aufzeichnen, ich verstehe ihn als MySQL-Agenten.
--------------------------------- --- -------------------Wichtige TIPPS--------------------- -- ----------------------------------------
Die MyCAT Das Team hat Version 1.4Alpha veröffentlicht, die viele Fehler behoben und neue Funktionen hinzugefügt hat.
Der Blogger hat Version 1.3 zum Testen verwendet, daher sind die Ergebnisse beim Test mit der neuesten Version möglicherweise inkonsistent!


---------------------------------------------------- --- -----------Hintergrundeinführung------------- -------------------------------------------------- ---

Die Hintergrundeinführung von MyCAT wird einfach übersprungen, was natürlich nutzlos ist. Dies ist natürlich etwas, das von JAVA entwickelt wurde und verstanden werden muss.

---------------- ------ ---------Der Vorgänger von MyCAT---------- -------------- ------------------------------------ -----------

Der Vorgänger von MyCAT ist Alibaba hat die Datenbank-Middleware Cobar am 19. Juni 2012 offiziell als Open Source veröffentlicht. Cobars Der Vorgänger ist Amoeba, das seit langem Open Source ist. Nachdem sein Autor Chen Siru jedoch nach Shanda gegangen war, berücksichtigte Alibaba intern die Stabilität von Amoeba. Leistung und funktionale Unterstützung sowie andere Faktoren stellten ein Projektteam wieder zusammen und ersetzten es. Der Name ist Cobar. Cobar wird hergestellt von Alibabas Open-Source-Middleware für die verteilte MySQL-Verarbeitung kann wie eine herkömmliche Datenbank umfangreiche Datendienste in einer verteilten Umgebung bereitstellen.

Cobar ist seit seiner Geburt bei Programmierern begehrt, aber seit 2013 gab es fast keine weiteren Updates mehr. In dieser Situation ist MyCAT entstanden, wie es die Zeit erfordert. Die Stabilität, Zuverlässigkeit, hervorragende Architektur und Leistung von Alibaba sowie viele ausgereifte Anwendungsfälle machen MyCAT zu einem guten Ausgangspunkt Auf den Schultern von Riesen stehend, kann MyCAT weiter blicken.

-------------------------------- -------------Wichtige Funktionen von MyCAT------------ --- -------------------------------- --- ---
Unterstützt den SQL 92-Standard;
Unterstützt MySQL-Cluster und kann als Proxy verwendet werden; JDBC-Verbindung zu ORACLE und DB2, SQL Server, simuliert es als MySQL-Server; unterstützt Galera für MySQL-Cluster, Percona-Cluster oder Mariadb-Cluster und bietet Hochverfügbarkeits-Daten-Sharding-Cluster; >
Automatisches Failover, hohe Verfügbarkeit;

unterstützt die Lese-/Schreibtrennung, unterstützt den MySQL-Dual-Master- und mehrere Slaves-Modus

unterstützt globale Tabellen. Daten werden für effiziente Tabellenkorrelationsabfragen automatisch auf mehrere Knoten aufgeteilt.

unterstützt eine einzigartige Sharding-Strategie basierend auf E-R-Beziehungen, wodurch effiziente Tabellenkorrelationsabfragen realisiert werden >Unterstützung mehrerer Plattformen, einfache Bereitstellung und Implementierung.

---------------------------------------------------- --- --------MyCAT-Architektur
---------------- -------------------------------------------------- --

Es ist im Allgemeinen in drei Teile unterteilt. Das Front-End ist der Connector, der Ressourcenpools verwendet und standardmäßig AIO verwendet (diese grundlegenden Informationen können angezeigt werden). im Startprotokoll) ; Spüren Sie die Existenz von

SQL Executor, es fühlt sich eher wie ein SQL an Prozessmaterial, DataNode und Heartbeat-Erkennung sind zwei Komponenten, die von der mittleren Schicht
implementiert werden. Eine davon bezieht sich auf die MySQL-Bibliothek (Hinweis: nicht auf die Instanz ) und die andere ist eine allgemeine Überwachung Mechanismus. Funktionsmodul;
Der Speicher auf der niedrigsten Ebene ist der Cluster von MySQ
L~ Wie wir den MySQL-Cluster verwenden, liegt bei uns╰(?? ▽ ??)╯
.

---------------- ------ ------------------So verwenden Sie MyCAT---------------- ------- ----------------------------------
MyCAT verwendet derzeit eine Konfigurationsdateimethode zum Definieren logischer Bibliotheken und zugehöriger Konfigurationen, die hauptsächlich drei Dateien umfasst:
MYCAT_HOME/conf/schema.xml definiert logische Bibliotheken, Tabellen, Shard-Knoten und andere Inhalte
Definieren Sie Sharding-Regeln in MYCAT_HOME/conf/rule.xml; definieren Sie benutzer- und systembezogene Variablen, wie Ports usw., in MYCAT_HOME/conf/server.xml.

Keine Sorge, in diesem Artikel werden die Funktionen dieser Konfigurationsdateien und die Bedeutung einiger Parameter kurz vorgestellt.
Lassen Sie uns nacheinander vorgehen. Schauen Sie sich zunächst
schema.xml an, eine aus dem Internet extrahierte Beispielvorlage     

  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>
  2. Das erste ist Schemaname = "weixin

“, Der Effekt dieser Konfiguration besteht darin, dass Sie, wenn der MySQL-Client über den Befehl „Show DATABASE“ eine Verbindung zu MyCAT herstellt, den Namen der Datenbank sehen können, . Beispielsweise in dieser Konfiguration In der Datei werden zwei Datenbanken konfiguriert, Weixin und Yixin, die jeweils eine Benutzertabelle enthalten.
Hinweis: Die von MyCAT auf der externen Seite angezeigte Datenbank und die Tabellen in der Datenbank sind alle im Schema konfiguriert. Darin sind keine Tabellen oder Bibliotheken geschrieben, auch wenn sie im Hintergrund vorhanden sind -end MySQL können sie nicht über MyCAT darauf zugreifen, aber MyCAT definiert nicht die Struktur der spezifischen Tabelle.
Dann kommt der Datenknoten. Dieses Attribut gibt die Schematabelle und die Datenbank an, in der sie gespeichert ist. In dieser Konfiguration ist beispielsweise angegeben, dass sich der Datenknoten von dn1 bei localhost0 befindet, und der Der Name dieser Datenbankinstanz ist weixi
n Datenbank, das Gleiche gilt für dn2. datahost listet die spezifischen Informationen des eigentlichen Back-End-MySQL-Clusters auf. writehost ist die MySQL-Instanz, die für das Schreiben von Daten verantwortlich ist, und writehost ist die MySQL-Instanz, die für das Lesen der beiden verantwortlich ist Instanzen sind gleich geschrieben, was bedeutet, dass das Backend eine einzelne Instanz verwendet. Wenn es als unterschiedliche Instanzen konfiguriert ist, konfigurieren Sie die Master-Slave-Synchronisierung zwischen den beiden Instanzen und verwenden Sie dann MyCAT, um eine Lese-/Schreibtrennung zu erreichen
zur Datenbank Die vertikale Segmentierung erfolgt hauptsächlich durch schema.xml, das später ausführlich vorgestellt wird.
rule.xml als Beispiel

  1. <?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>
                                                                                                                                                                                 Die Konfiguration in der Regel, user_id modulo 1024, und dann in zwei Slices unterteilt, jedes Slice hat 512.

Weitere Segmentierungsstrategien werden später ausführlich vorgestellt

server.xml als Beispiel

<!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,不过这个需要去看源代码才知晓细节了。



Das obige ist der detaillierte Inhalt vonKurze Einführung in den verteilten MySQL-Cluster MyCAT (1).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn