Использование MyCat для разделения чтения и записи MySQL

MySQL

иллюстрировать

Прежде чем настраивать классификацию MyCat для чтения и записи, вам необходимо настроить репликацию MySQL master-slave.Обратитесь к моей предыдущей статье, которая была объяснена более подробно.

окружающая обстановка

центрос7, MySQL5.7, mycat1.6

Настройте пароль учетной записи MyCat и имя базы данных (server.xml)

В качестве промежуточного программного обеспечения базы данных MyCat представляет собой базу данных для приложений верхнего уровня. Поэтому вам необходимо настроить имя пользователя базы данных, пароль, имя базы данных и разрешения на чтение и запись.

Вот конфигурация MyCat по умолчанию (частично):

使用MyCat实现MySQL读写分离

server.xml

Пользовательский узел настраивает информацию о пользователе.

узел пользовательской конфигурации пользователя

--name Имя пользователя для входа в систему, то есть имя пользователя для подключения к Mycat.

--password логин пароль, который является паролем для подключения к Mycat

--schemas имя базы данных, которое будет связано с конфигурацией в schema.xml, кратно через запятую, например, если этому пользователю нужно управлять двумя базами данных db1, db2, то настройте db1, dbs

Я изменил его следующим образом (просто нужно изменить информацию о пользовательском узле):

<user name="root">
  <property name="password">123456</property>
  <property name="schemas">db_test</property>
</user>

Настройте разделение чтения и записи в файле schema.xml.

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
 <!-- 数据库配置,与server.xml中的数据库对应 -->
 <schema name="db_test" checkSQLschema="false" sqlMaxLimit="100" dataNode="db_node"></schema>
 <!-- 分片配置 -->
 <dataNode name="db_node" dataHost="db_host" database="db_test" />
 <!-- 物理数据库配置 -->
 <dataHost name="db_host" maxCon="1000" minCon="10" balance="3"
 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
 <!-- can have multi write hosts -->
 <writeHost host="hostM1" url="mysql_master:3306" user="root"
 password="apple">
 <!-- can have multi read hosts -->
 <readHost host="hostS2" url="mysql_slaver:3306" user="root" password="apple" />
 </writeHost>
 </dataHost>
</mycat:schema>

Вот несколько конфигураций, которые необходимо объяснить:

sqlMaxLimit配置默认查询数量
database为真实数据库名
balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。
balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的 writeHost。
writeType="2",没实现。
-1 表示不自动切换
1 默认值,自动切换
2 基于MySQL 主从同步的状态决定是否切换

начать мой кот

Запустите на сервере, где находится mycat

./mycat start
mysql -uroot -p123456 -P8066 -h127.0.0.1
#stop
./mycat stop

После подключения он точно такой же, как обычный MySQL

Подключите mycat к Navicat

Для доступа к mycat во внешней сети (относительно виртуальной машины) необходимо настроить белый список ip.

Файл конфигурации находится в server.xml

<!-- 全局SQL防火墙设置 -->
<firewall>
 <whitehost>
 <host host="192.168.74.1" user="root"/>
 <host host="127.0.0.1" user="root"/>
 </whitehost>
 <blacklist check="false">
 </blacklist>
l</firewall>

Здесь 192.168.74.1 — это ip адрес моей локальной машины относительно виртуальной машины, здесь следует пояснить, что если настроен белый список ip, для локального доступа также необходимо добавить 127.0.0.1, иначе он будет отклонен.

使用MyCat实现MySQL读写分离

Пример

Общим здесь является то, что я установил IP-адрес, сопоставленный с виртуальной машиной, где mycat находится в файле хоста локально.

Здесь вы можете проверить, успешно ли настроена репликация master-slave, вставив данные в mycat, и убедиться, что чтение-запись разделены, изменив данные подчиненной базы данных.

使用MyCat实现MySQL读写分离

результат

Как видите, mycat считывает данные из библиотеки. Это показывает, что реализована функция разделения чтения и записи mycat.