Tabla de contenido
- Replicación maestro-esclavo de MySQL
- MyCat implementa la separación de lectura y escritura
-
- Preparación del entorno de un maestro y un esclavo.
- Introducción y preparación del entorno de doble maestro y doble esclavo.
-
- Configuración
-
- 1. Configuración de la biblioteca principal (Master1)
- 2. Configuración de la biblioteca principal (Master2)
- 3. Cree una cuenta para la replicación maestro-esclavo.
- 4. Configuración del esclavo (Esclavo1)
- 5. Configuración del esclavo (Slave2)
- 6. Configure las dos bibliotecas esclavas para asociarlas con la biblioteca principal.
- 7. Cópiese entre sí entre las dos bibliotecas principales.
- 8. Prueba
- Configuración de separación de lectura y escritura de maestro dual y esclavo dual
- Soluciones a problemas menores de red.
Replicación maestro-esclavo de MySQL
Descripción general
La replicación maestro-esclavo consiste en transferir los datos de la base de datos maestra al servidor de la base de datos esclava a través del registro binario (binlog) y luego volver a ejecutar estos registros en la base de datos esclava, de modo que los datos de la base de datos esclava y la base de datos maestra están sincronizados.
principio
para construir
Preparar dos servidores
Maestro: 192.168.40.137
Esclavista: 192.168.40.138
1. Apague el firewall
[root@mysql-master ~]# systemctl stop firewalld
[root@mysql-master ~]# systemctl disable firewalld
[root@mysql-slaver ~]# systemctl stop firewalld
[root@mysql-slaver ~]# systemctl disable firewalld
2.Instalar mysql
Instale mysql en ambos servidores y use ps para verificar si la instalación se realizó correctamente.
[root@mysql-master ~]# ps aux|grep mysqld
[root@mysql-slaver ~]# ps aux|grep mysqld
3. Configuración de la biblioteca principal
Modifique el archivo de configuración de la biblioteca principal /etc/my.cnf
# mysql服务器id,保证整个集群环境中唯一
server-id=1
# 是否只读,1代表只读,0代表读写
read-only=0
Reinicie el servidor MySQL
[root@mysql-master ~]# systemctl restart mysqld
Inicie sesión en MySQL, cree una cuenta de conexión remota y otorgue permisos de replicación maestro-esclavo
# 创建root用户,并设置密码,该用户可以在任意主机连接mysql服务
mysql> create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 为'root'@'%'用户分配主从复制权限
mysql> grant replication slave on *.* to 'root'@'%';
Ver coordenadas binarias
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000004 | 377 | | | |
+---------------+----------+--------------+------------------+-------------------+
4. Configuración desde biblioteca
Modifique el archivo de configuración de la biblioteca esclava /etc/my.cnf
# mysql服务器id,保证整个集群环境中唯一
server-id=2
# 是否只读,1代表只读,0代表读写
read-only=1
Reinicie el servidor MySQL
[root@mysql-master ~]# systemctl restart mysqld
Inicie sesión en MySQL y establezca la configuración de la base de datos principal
mysql> change replication source to source_host="192.168.40.137",source_user="root",source_password='123456',source_log_fike='binlog.000004',source_log_pos=377;
Habilitar sincronización
mysql> start replica;
Ver el estado de replicación maestro-esclavo
mysql> show replica status\G;
5. Prueba
Cree una base de datos, luego cree una tabla, luego inserte datos para ver
mysql> CREATE DATABASE MyDatabase;
Query OK, 1 row affected (0.01 sec)
mysql> USE MyDatabase;
Database changed
mysql> CREATE TABLE MyTable (
-> id INT NOT NULL AUTO_INCREMENT,
-> name VARCHAR(50) NOT NULL,
-> age INT NOT NULL,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO MyTable (name, age) VALUES
-> ('张三', 20),
-> ('李四', 25),
-> ('王五', 30);
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>INSERT INTO MyTable (name, age) VALUES
-> ('张三', 20),
-> ('李四', 25),
-> ('王五', 30);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> update MyTable set age=20;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 6 Changed: 2 Warnings: 0
MyCat implementa la separación de lectura y escritura
Separación de lectura y escritura significa separar las operaciones de lectura y escritura en la base de datos para que correspondan a diferentes servidores de bases de datos. La base de datos principal proporciona operaciones de escritura y la base de datos esclava proporciona operaciones de lectura, lo que puede reducir eficazmente la presión sobre una sola base de datos.
Preparación del entorno de un maestro y un esclavo.
Compruebe si el entorno de replicación maestro-esclavo del maestro y esclavo anterior es normal. Del mismo modo, si ocurre el siguiente efecto, es normal.
Configuración
MyCat controla la separación de lectura y escritura y el equilibrio de carga de la base de datos backend mediante el atributo balance de la etiqueta datahost en el archivo esquema.xml.
valor del saldo
1. Modifique el archivo esquema.xml y especifique la biblioteca lógica y la IP del host de lectura y escritura.
<!-- 新建一个逻辑库 dataNode为dn4-->
<schema name="DB_RW" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn4" >
</schema>
<dataNode name="dn4" dataHost="dhost4" database="db1" />
<!--新建一个主机dhost4 负载均衡策略为1-->
<dataHost name="dhost4" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- 写操作对应的主机-->
<writeHost host="hostM1" url="jdbc:mysql://192.168.40.137:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="123456">
<!-- 读操作对应的主机-->
<readHost host="hostS1" url="jdbc:mysql://192.168.40.138:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="123456">
</readHost>
</writeHost>
</dataHost>
2. Agregue permisos de usuario para acceder a la base de datos en el archivo server.xml
3. Reinicie MyCat
[root@mysql-master mycat]# bin/mycat restart
Vista de prueba
Debido a que la replicación maestro-esclavo está configurada, las modificaciones a los datos en la base de datos esclava no afectarán a la base de datos maestra, por lo tanto, modifique los datos en la base de datos esclava y consulte la base de datos maestra para ver si los datos consultados provienen de la base de datos esclava o de la base de datos esclava. base de datos maestra.
Se puede ver que la base de datos esclava ha modificado los datos, y lo que se recupera son los datos de la base de datos esclava, dándose cuenta de la separación de lectura y escritura.
Introducción y preparación del entorno de doble maestro y doble esclavo.
1. Introducción
Un host Master1 se utiliza para manejar todas las solicitudes de escritura, y su esclavo Slave1 y otro host Master2 y su esclavo Slave2 son responsables de todas las solicitudes de lectura. Cuando el host Master1 deja de funcionar, el host Master2 es responsable de escribir las solicitudes, y Master1 y Master2 sirven como máquinas de respaldo entre sí.
2. Preparación del entorno
servidor | instalar software | ilustrar |
---|---|---|
192.168.40.137 | JDK, MyCat, MySQL | Servidor intermedio MyCat |
192.168.40.138 | mysql | Maestro1 |
192.168.40.139 | mysql | esclavo1 |
192.168.40.170 | mysql | Maestro2 |
192.168.40.171 | mysql | esclavo2 |
Apague todos los cortafuegos
systemctl stop firewalld
systemctl disable firewalld
Configuración
1. Configuración de la biblioteca principal (Master1)
Modificar el archivo de configuración /etc/my.cnf
# 主库配置
# mysql服务器id,保证整个集群环境中唯一
server-id=1
# 指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作为从数据库的时候,有写入操作也要更新二进制文件
log-slave-updates
Reiniciar servicio
systemctl restart mysqld
2. Configuración de la biblioteca principal (Master2)
Modificar el archivo de configuración /etc/my.cnf
# 主库配置
# mysql服务器id,保证整个集群环境中唯一
server-id=3
# 指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作为从数据库的时候,有写入操作也要更新二进制文件
log-slave-updates
Reiniciar servicio
systemctl restart mysqld
3. Cree una cuenta para la replicación maestro-esclavo.
Tanto Master1 como Master2 se ejecutan
# 创建root用户,并设置密码,该用户可以在任意主机连接mysql服务
mysql> create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 为'root'@'%'用户分配主从复制权限
mysql> grant replication slave on *.* to 'root'@'%';
Ver las coordenadas binarias de las dos bibliotecas principales.
mysql> show master status;
Maestro1
mysql> show master status;
+---------------+----------+----------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+----------------+------------------+-------------------+
| binlog.000004 | 659 | db01,db02,db03 | | |
+---------------+----------+----------------+------------------+-------------------+
1 row in set (0.00 sec)
Maestro2
mysql> show master status;
+---------------+----------+----------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+----------------+------------------+-------------------+
| binlog.000002 | 659 | db01,db02,db03 | | |
+---------------+----------+----------------+------------------+-------------------+
1 row in set (0.00 sec)
4. Configuración del esclavo (Esclavo1)
Modifique el archivo de configuración de la biblioteca esclava /etc/my.cnf
# mysql服务器id,保证整个集群环境中唯一
server-id=2
Reinicie el servidor MySQL
systemctl restart mysqld
5. Configuración del esclavo (Slave2)
Modifique el archivo de configuración de la biblioteca esclava /etc/my.cnf
# mysql服务器id,保证整个集群环境中唯一
server-id=4
Reinicie el servidor MySQL
systemctl restart mysqld
6. Configure las dos bibliotecas esclavas para asociarlas con la biblioteca principal.
Ejecutar en Slave1
mysql> change master to master_host="192.168.40.138",master_user="root",master_password='123456',master_log_file='binlog.000004',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.04 sec)
iniciar repositorio
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)
Ver el estado de replicación maestro-esclavo
mysql> show slave status\G;
Ejecutar en Slave2
mysql> change master to master_host="192.168.40.170",master_user="root",master_password='123456',master_log_file='binlog.000002',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.04 sec)
iniciar repositorio
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)
Ver el estado de replicación maestro-esclavo
mysql> show slave status\G;
7. Cópiese entre sí entre las dos bibliotecas principales.
Master1 replica Master2 ,Ejecutado en Master1
mysql> change master to master_host="192.168.40.170",master_user="root",master_password='123456',master_log_file='binlog.000002',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.04 sec)
Inicie la biblioteca esclava y verifique el estado de replicación maestro-esclavo
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> show slave status\G;
Master2 copia Master1 ,Ejecutado en Master2
mysql> change master to master_host="192.168.40.138",master_user="root",master_password='123456',master_log_file='binlog.000004',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.01 sec)
Inicie la biblioteca esclava y verifique el estado de replicación maestro-esclavo
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> show slave status\G;
8. Prueba
Crear base de datos DB01:
CREATE DATABASE db01;
Seleccione la base de datos DB01:
USE db01;
Cree una mytable
tabla nombrada con 3 campos:
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
age INT NOT NULL,
address VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
);
mytable
Inserte 5 datos chinos en la tabla :
INSERT INTO mytable (name, age, address) VALUES
('张三', 20, '北京'),
('李四', 25, '上海'),
('王五', 30, '广州'),
('赵六', 35, '深圳'),
('钱七', 40, '成都');
Después de una prueba sencilla, es posible lograr funciones doble maestro y doble esclavo.
Configuración de separación de lectura y escritura de maestro dual y esclavo dual
La separación de lectura y escritura y el equilibrio de carga de la base de datos de la consola MyCat están controlados por el atributo balance de la etiqueta dataHost en el archivo esquema.xml y el cambio automático se completa en caso de falla a través de writeType y switchType.
Modificar el archivo esquema.xml de MyCat
<!--因为只设置了db01这个库,以它为例-->
<dataNode name="dn4" dataHost="dhost4" database="db01" />
<!--新建一个主机dhost4 负载均衡策略为1-->
<dataHost name="dhost4" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- 写操作对应的主机 Master1 - Slave1-->
<writeHost host="Master1" url="jdbc:mysql://192.168.40.138:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="123456">
<!-- 读操作对应的主机-->
<readHost host="Slave1" url="jdbc:mysql://192.168.40.139:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="123456">
</readHost>
</writeHost>
<!-- Master2 - Slave2 -->
<writeHost host="Master2" url="jdbc:mysql://192.168.40.170:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="123456">
<!-- 读操作对应的主机-->
<readHost host="Slave2" url="jdbc:mysql://192.168.40.171:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="123456">
</readHost>
</writeHost>
</dataHost>
Reiniciar mi gato
[root@mycat mycat]# bin/mycat restart
Inicia sesión para ver
[root@mycat mycat]# mysql -h 192.168.40.137 -P 8066 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.29-mycat-1.6.7.3-release-20210913163959 MyCat Server (OpenCloudDB)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+----------+
| DATABASE |
+----------+
| DB01 |
| DB_RW |
+----------+
2 rows in set (0.00 sec)
mysql> use DB_RW;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_db01 |
+----------------+
| mytable |
+----------------+
1 row in set (0.02 sec)
Vista de prueba
La prueba se puede realizar insertando datos para ver o dejando que Master1 cuelgue, y luego si se puede iniciar Master2 para lograr alta disponibilidad. La prueba es relativamente simple, por lo que no publicaré imágenes.
Soluciones a problemas menores de red.
Cancele que NetworkManager se haga cargo de la configuración de red:
nmcli n off
Configure NetworkManager para que se haga cargo de la configuración de red:
nmcli n on