Heim > Datenbank > MySQL-Tutorial > Ein Beispiel für die Lese- und Schreibtrennung von Mycat basierend auf der MySQL-Master-Slave-Replikation

Ein Beispiel für die Lese- und Schreibtrennung von Mycat basierend auf der MySQL-Master-Slave-Replikation

黄舟
Freigeben: 2017-10-01 07:43:10
Original
3297 Leute haben es durchsucht

Heute präsentiere ich Ihnen einen Artikel darüber, wie Mycat die Lese-/Schreibtrennung basierend auf der MySQL-Master-Slave-Replikation implementiert. Hier müssen Sie beachten, dass die Master-Slave-Replikation von MySQL auf dem eigenen Master-Slave-Replikationsmechanismus basiert Mycat ist nicht dafür verantwortlich. Informationen zur Master-Slave-Replikationskonfiguration von MySQL finden Sie im Blogbeitrag „MySQL – Master-Slave-Replikationskonfiguration“.

1. Umgebung

Betriebssystem: CentOS-6.5-x86_64-bin-DVD1.iso
JDK-Version: jdk1.7.0_80
MyCat-Version: Mycat- server-1.5.1-RELEASE-20170717215510-linux.tar.gz (Laden Sie den Quellcode herunter und kompilieren Sie ihn selbst)
MyCat-Knoten-IP: 192.168.209.133 Hostname: liuyazhuang133 Hostkonfiguration: 4-Kern-CPU, 4G-Speicher
MySQL-Version:mysql-5.6.32.tar.gz
Master-Knoten-IP: 192.168.209.131 Hostname: liuyazhuang131 Host-Konfiguration: 4-Kern-CPU, 4G-Speicher
Slave-Knoten-IP: 192.168.209.132 Hostname : liuyazhuang132 Host-Konfiguration: 4-Kern-CPU, 4G-Speicher

2. Einführung in MyCat (offizielle MyCat-Website: http://mycat.io/)

MyCats Lese-/Schreibzugriff Die Trennung basiert auf dem Back-End-MySQL-Cluster. Sie wird durch Master-Slave-Synchronisation implementiert, und MyCat stellt die Anweisungsverteilungsfunktion bereit. MyCat 1.4 beginnt mit der Unterstützung des Lese-/Schreib-Trennmechanismus der MySQL-Master-Slave-Replikationsstatusbindung, wodurch das Lesen sicherer und zuverlässiger wird.

3. Installation von MyCat

1. Legen Sie den Hostnamen von MyCat und die Zuordnung zwischen IP und Hostname fest

# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=liuyazhuang133
Nach dem Login kopieren
# vi /etc/hosts
127.0.0.1 liuyazhuang133
192.168.209.131 liuyazhuang131
192.168.209.132 liuyazhuang132
192.168.209.133 liuyazhuang133
Nach dem Login kopieren

2. Konfigurieren Sie Java-Umgebungsvariablen

Da MyCat in Java entwickelt wurde, muss JDK installiert sein, um MyCat auszuführen (JRE reicht aus, um genau zu sein) und JDK1.7 oder Die obige Version

# vi /etc/profile
## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_80
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
# source /etc/profile
# java -version
Nach dem Login kopieren

3. Laden Sie das Installationspaket

Laden Sie Mycat-server-1.5.1-RELEASE-20170717215510-linux.tar.gz nach /home hoch das Verzeichnis /mycat des MyCat-Servers, entpacken Sie es und verschieben Sie es in das Verzeichnis /usr/local/mycat

$ tar -zxvf Mycat-server-1.5.1-RELEASE-20170717215510-linux.tar.gz
Nach dem Login kopieren
# mv /home/mycat/mycat  /usr/local/
# cd /usr/local/mycat/
# ll
Nach dem Login kopieren


4. Legen Sie die Umgebungsvariablen von MyCat fest

# vi /etc/profile
## mycat env
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin
# source /etc/profile
Nach dem Login kopieren

4. Konfigurieren Sie MyCat

1. Bestätigen Sie, dass die MySQL-Master-Slave-Replikation normal ist

Bevor Sie MyCat konfigurieren, bestätigen Sie bitte, dass die Die Installationskonfiguration der MySQL-Master-Slave-Replikation ist abgeschlossen und der normale Betrieb erfolgt. Die Synchronisierung von MySQL-Master-Slave-Daten wird in MySQL konfiguriert und MyCat ist nicht für Probleme bei der Datensynchronisierung verantwortlich.
Ergänzung:
(1) Wenn es sich bei der MySQL-Master-Slave-Replikationskonfiguration um eine synchrone Replikation von Funktionen oder gespeicherten Prozeduren handelt, müssen Sie die Konfiguration log_bin_trust_function_creators=true oder im Abschnitt [mysqld] in /etc hinzufügen /my.cnf Set set global log_bin_trust_function_creators = 1 im Client;
(2) Wenn Sie einen Master-Slave-Schalter unter Lese-/Schreibtrennung durchführen möchten, kann der Slave-Knoten auch zu einem Schreibknoten werden, also zum Slave-Knoten kann nicht auf read_only =1 gesetzt werden.
(3) Die Linux-Version von MySQL muss auf MySQL-Groß-/Kleinschreibung eingestellt sein, andernfalls kann das Problem auftreten, dass die Tabelle nicht gefunden wird. Sie können Lower_case_table_names=1 im Abschnitt [mysqld] von /etc/my.cnf hinzufügen.

2. Konfigurieren Sie MyCats schema.xml

schema.xml ist eine der wichtigsten Konfigurationsdateien von MyCat. Sie wird zum Festlegen der logischen Bibliothek, Tabellen, Datenknoten, dataHost und anderen verwendet Inhalt:

[root@liuyazhuang133 conf]$ cd /usr/local/root/conf/
[root@liuyazhuang133 conf]$ vi schema.xml
Nach dem Login kopieren
<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/">

      <!-- 定义MyCat的逻辑库,逻辑库的概念与MySQL中的 database 概念相同 -->

      <!-- schema name="rc_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="rc_dn1"></schema -->

		<!--schema name="pay_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="pay_dn1"></schema-->

      <schema name="lyz_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="lyz_dn1"></schema>

      <schema name="lyz_schema2" checkSQLschema="false" sqlMaxLimit="100" dataNode="lyz_dn2"></schema>

		<!-- 其中checkSQLschema表明是否检查并过滤SQL中包含schema的情况,如逻辑库为 TESTDB,则可能写为select * from TESTDB.edu_user,此时会自动过滤TESTDB,SQL变为select * from edu_user,若不会出现上述写法,则可以关闭属性为false -->

		<!--sqlMaxLimit默认返回的最大记录数限制,MyCat1.4版本里面,用户的Limit参数会覆盖掉MyCat的sqlMaxLimit默认设置-->

      <!-- 定义MyCat的数据节点 -->

      <dataNode name="lyz_dn1" dataHost="dtHost2" database="lyzdb1" />

      <dataNode name="lyz_dn2" dataHost="dtHost2" database="lyzdb2" />

	<!-- dataNode 中的 name 数据表示节点名称, dataHost表示数据主机名称, database表示该节点要路由的数据库的名称 -->

 

      <!-- dataHost配置的是实际的后端数据库集群(当然,也可以是非集群) -->

      <!-- 注意:schema中的每一个dataHost中的host属性值必须唯一,否则会出现主从在所有dataHost中全部切换的现象 -->

      <!-- 定义数据主机dtHost1,只连接到MySQL读写分离集群中的Master节点,不使用MyCat托管MySQL主从切换 -->

      <!--

      <dataHost name="dtHost1" maxCon="500" minCon="20" balance="0"

           writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

           <heartbeat>select user()</heartbeat>

           <writeHost host="hostM1" url="192.168.1.205:3306" user="root" password="lyz" />

      </dataHost>

      -->

      <!-- 使用MyCat托管MySQL主从切换 -->

      <!-- 定义数据主机dtHost2,连接到MySQL读写分离集群,并配置了读写分离和主从切换 -->

      <dataHost name="dtHost2" maxCon="500" minCon="20" balance="1"

           writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">

           <!-- 通过show slave status检测主从状态,当主宕机以后,发生切换,从变为主,原来的主变为从,这时候show slave status就会发生错误,因为原来的主没有开启slave,不建议直接使用switch操作,而是在DB中做主从对调。 -->

           <heartbeat>show slave status</heartbeat>

           <!-- can have multi write hosts -->

           <writeHost host="hostM2" url="192.168.209.131:3306" user="root" password="root" />

           <writeHost host="hostS2" url="192.168.209.132:3306" user="root" password="root" />

      </dataHost>

      <!-- 参数balance决定了哪些MySQL服务器参与到读SQL的负载均衡中 -->

		<!-- balance="0",为不开启读写分离,所有读操作都发送到当前可用的writeHost上-->

      <!-- balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡-->

      <!-- balance="2",所有读操作都随机的在writeHost、readHost上分发-->

      <!-- MyCat1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取数据,则需要在MyCat里配置为两个writeHost并设置balance="1" -->

      <!-- writeType="0",所有写操作都发送到可用的writeHost上 -->

      <!-- writeType="1",仅仅对于galera for mysql集群这种多主多节点都能写入的集群起效,此时Mycat会随机选择一个writeHost并写入数据,对于非galera for mysql集群,请不要配置writeType=1,会导致数据库不一致的严重问题 -->

</mycat:schema>
Nach dem Login kopieren

MyCat 1.4 beginnt mit der Unterstützung des Lese-/Schreib-Trennmechanismus der MySQL-Master-Slave-Replikationsstatusbindung, wodurch das Lesen sicherer und zuverlässiger wird. Die Konfiguration ist wie folgt:
MyCat-Heartbeat-Check-Anweisungskonfiguration Um den Slave-Status anzuzeigen, werden zwei neue Attribute auf dataHost definiert: switchType="2" und SlaveThreshold="100". Dies bedeutet, dass die Lese-/Schreibtrennung und der Umschaltmechanismus der MySQL-Master-Slave-Replikation erfolgen Die Statusbindung ist aktiviert und der MyCat-Heartbeat-Mechanismus besteht die Erkennung. Die drei Felder „Seconds_Behind_Master“, „Slave_IO_Running“ und „Slave_SQL_Running“ im Show-Slave-Status bestimmen den aktuellen Master-Slave-Synchronisationsstatus und Seconds_Behind_Master Master-Slave-Replikationsverzögerung größer als der SlaveThreshold ist, filtert der Lese-/Schreib-Trennfilter diese Slave-Maschine heraus, um zu verhindern, dass alte Daten von vor langer Zeit gelesen werden. Wenn der Master-Knoten ausfällt, prüft die Schaltlogik, ob Seconds_Behind_Master auf dem Slave 0 ist Es ist 0, was bedeutet, dass Master und Slave synchronisiert sind und der Switch sicher sein kann. Andernfalls wird er nicht geschaltet.

3. Konfiguration server.xml

server.xml wird hauptsächlich zum Festlegen von Systemvariablen, zum Verwalten von Benutzern, zum Festlegen von Benutzerberechtigungen usw. verwendet.


[root@liuyazhuang133 conf]$ vi server.xml
Nach dem Login kopieren
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mycat:server SYSTEM "server.dtd">

<mycat:server xmlns:mycat="http://org.opencloudb/">

      <system>

		<property name="defaultSqlParser">druidparser</property>

		<property name="charset">utf8mb4</property>

		  <!-- <property name="useCompression">1</property>-->

		  <!--1为开启mysql压缩协议-->

		  <!-- <property name="processorBufferChunk">40960</property> -->

		  <!--

		  <property name="processors">1</property>

		  <property name="processorExecutor">32</property>

		   -->

			   <!--默认是65535 64K 用于sql解析时最大文本长度 -->

			   <!--<property name="maxStringLiteralLength">65535</property>-->

			   <!--<property name="sequnceHandlerType">0</property>-->

			   <!--<property name="backSocketNoDelay">1</property>-->

			   <!--<property name="frontSocketNoDelay">1</property>-->

			   <!--<property name="processorExecutor">16</property>-->

			   <!-- <property name="mutiNodeLimitType">1</property> 0:开启小数量级(默认) ;1:开启亿级数据排序

					  <property name="mutiNodePatchSize">100</property> 亿级数量排序批量

					 <property name="processors">32</property> <property name="processorExecutor">32</property>

					 <property name="serverPort">8066</property> <property name="managerPort">9066</property>

					 <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>

					 <property name="frontWriteQueueSize">4096</property>

				<property name="processors">32</property>

			   -->

		  </system>

		  <!-- 用户1,对应的MyCat逻辑库连接到的数据节点对应的主机为MySQL主从复制配置中的Master节点,没实现读写分离,读写都在该Master节点中进行  -->

		  <!--

		  <user name="user1">

			   <property name="password">roncoo.1</property>

			   <property name="schemas">rc_schema1,pay_schema1</property>

		  </user>

		  -->

		  <!-- 用户2,对应的MyCat逻辑库连接到的数据节点对应的主机为主从复制集群,并通过MyCat实现了读写分离 -->

		  <user name="lyz">

			   <property name="password">lyz.123</property>

			   <property name="schemas">lyz_schema1,lyz_schema2</property>

		  </user>

		  <!-- 用户3,只读权限-->

		  <user name="userlyz">

			   <property name="password">lyz.123</property>

			   <property name="schemas">lyz_schema1,lyz_schema2</property>

			   <property name="readOnly">true</property>

		  </user>

</mycat:server>
Nach dem Login kopieren
4. Öffnen Sie die Ports 8066 und 9066 in der Firewall

Der Standarddatenport von MyCat ist 8066 und mycat empfängt Zugriffsanfragen von Datenbank-Clients über diesen Port.

Der Verwaltungsport ist 9066, der zum Empfangen von Mycat-Überwachungsbefehlen, zum Abfragen des Mycat-Ausführungsstatus, zum Neuladen von Konfigurationsdateien usw. verwendet wird.

[root@liuyazhuang133 mycat]# vi /etc/sysconfig/iptables
Nach dem Login kopieren
Hinzugefügt:


## MyCat
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8066 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9066 -j ACCEPT
Nach dem Login kopieren
Starten Sie die Firewall neu:


[root@liuyazhuang133 mycat]# service iptables restart
Nach dem Login kopieren
5. Ändern Sie die Protokollebene auf Debug

Ändern Sie die Protokollebene auf Debug, um den Datenoperationsstatus der Lese-/Schreibtrennung des MySQL-Datenbankclusters basierend auf MyCat über das Protokoll zu bestätigen (kann vor der offiziellen Produktion auf die Informationsebene geändert werden)


[root@liuyazhuang133 conf]$ vi /usr/local/mycat/conf/log4j.xml
Nach dem Login kopieren


6、启动root

[root@liuyazhuang133 bin]$ cd /usr/local/root/bin/
Nach dem Login kopieren

(1) 控制台启动,这种启动方式在控制台关闭后,root服务也将关闭,适合调试使用:

[root@liuyazhuang133 bin]$ ./root console
Nach dem Login kopieren

(2) 可以采用以下后台启动的方式:

[root@liuyazhuang133 bin]$ ./root start
Starting root-server...
Nach dem Login kopieren
(对应的,重启: root restart , 关闭: root stop )
Nach dem Login kopieren

7、MyCat连接测试

(1) 如果本地Windows安装有MySQL,可以使用已有的mysql客户端远程操作Mycat


(2) Nativecat连接Mycat




8、读写分离测试

(1) 监听MyCat日志

[root@liuyazhuang133 ~]$ cd /usr/local/mycat/logs/
[root@liuyazhuang133 logs]$ tail -f mycat.log
Nach dem Login kopieren

(2) 读测试

$ mysql -uuserlyz -plyz.123 -h192.168.209.233 -P8066
mysql> show databases;
Nach dem Login kopieren


mysql> use lyz_schema2;
Nach dem Login kopieren


mysql> show tables;
Nach dem Login kopieren


mysql> select * from lyz_user_02;
Nach dem Login kopieren


执行上面的查询语句,此时对应的MyCat日志信息如下:


多次执行 select * from lyz_user_02 语句,Mycat打印出来的日志信息显示读操作请求都是路由到Slave节点(192.168.209.132)

(2) 写测试

mysql> insert into lyz_user_02 (userName, pwd) values(&#39;liuyazhuang&#39;, &#39;lyz。123&#39;);
Nach dem Login kopieren


执行上面的新增插入语句后,此时对应的Mycat日志信息如下:


多次执行以上插入语句,发现新增数据都是从 Master节点(192.168.209.131)插进入的,并且Slave节点通过Binlog同步了Master节点中的数据。


综上,基于MyCat的读写分离集群配置成功。

Das obige ist der detaillierte Inhalt vonEin Beispiel für die Lese- und Schreibtrennung von Mycat basierend auf der MySQL-Master-Slave-Replikation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage