2. Conceptos relacionados con Mycat2 y separación de lectura y escritura.

Capítulo 3 Conceptos relacionados con Mycat2
3.1 Descripción del concepto
1. Subbase de datos y subtabla
De acuerdo con ciertas reglas, las tablas de la base de datos se dividen en múltiples subtablas con instancia de base de datos, biblioteca física y rutas de acceso a tablas físicas
.
Interpretación: Subbiblioteca: un proyecto de comercio electrónico, dividido en biblioteca de usuario, biblioteca de pedidos, etc.
Subtabla: una tabla de pedidos tiene millones de datos, lo que alcanza el cuello de botella de la tabla única MySQL y se divide en
varias tablas en varias bases de datos
2.
Base de datos lógica La base de datos en el agente de base de datos puede contener varias tablas lógicas.
Interpretación: La biblioteca definida en Mycat existe lógicamente, pero no existe físicamente en MySQL. Es posible que
varias bases de datos MySQL juntas formen una biblioteca lógica. Es similar a cómo muchos niños se ponen sus abrigos y hacen el papel de un adulto
.
3. Tabla lógica
La tabla en el agente de la base de datos puede asignar la tabla (tabla física) en la base de datos conectada por el agente.
Interpretación: La tabla definida en Mycat existe lógicamente y puede asignar la tabla de la base de datos MySQL real. Puede
ser uno a uno o uno a muchos.
4. Biblioteca física
La biblioteca en la base de datos conectada por el proxy de la base de datos.
Interpretación: MySQL es una base de datos real.
5. Tabla física
La tabla en la base de datos conectada por el proxy de la base de datos
Interpretación: la tabla de datos reales en la base de datos real MySQL.
6. Clave dividida La clave dividida
es el campo que describe las reglas de datos para dividir tablas lógicas.
Interpretación: Por ejemplo, la tabla de pedidos se puede dividir según la identificación del usuario al que pertenece, y la identificación del usuario es la clave dividida.
7 .Tabla dividida física
Se refiere a la tabla física en la base de datos que ha sido objeto de división de datos, que es una partición de la tabla fragmentada.
Interpretación: El resumen de datos en múltiples tablas de partición física son todos los datos en la tabla lógica.
8. La partición física
generalmente se refiere a la Biblioteca de división de tablas
Interpretación: la base de datos real que participa en la fragmentación de datos
9. La fragmentación
generalmente se refiere a dividir una tabla de fragmentación en varias bases de datos, cada base de datos tiene una tabla de fragmentación física y los nombres de los fragmentos físicos son los mismos. Interpretación:
fragmentación es una acción que requiere que estén involucradas múltiples bases de datos. Al igual que varias bases de datos son varias placas, la subbase de datos consiste
en dividir un racimo de uvas de datos en cada placa y, al consultar datos, las uvas en todas las placas forman un
racimo completo de uvas a través de Mycat2.
10. Tabla de fragmentación, tabla de fragmentación horizontal
Según ciertas reglas, los datos se dividen en varias tablas particionadas. En el contexto de subbase de datos y subtabla, pertenece a una interpretación de tablas lógicas
: dividir los datos según las reglas y sube El racimo de uvas en este ejemplo.
11. Tabla única
No hay fragmentación, no hay tabla de redundancia de datos,
interpretación: no hay datos divididos, no hay tabla que copie datos a otras bases de datos.
12. Tablas globales y tablas de difusión
Cada instancia de base de datos tiene una tabla lógica con datos redundantes. A través de la redundancia de datos de la tabla, la partición de la tabla fragmentada y los datos de la tabla están en la misma instancia de base de datos, de modo que se puede realizar la
operación Se ejecuta directamente en la instancia de la base de datos. Su coherencia de datos generalmente se logra distribuyendo SQL a través de agentes de base de datos. También existen interpretaciones de implementación basadas en registros de clúster: por ejemplo, la tabla de diccionario
del campo de traducción en el sistema, cada tabla fragmentada requiere una traducción completa. del campo de datos del diccionario.
13. La tabla ER
se refiere estrictamente a la tabla secundaria en la tabla principal-secundaria, su clave de fragmentación apunta a la clave de fragmentación de la tabla principal y el algoritmo de fragmentación de las dos tablas es el mismo.
En un sentido amplio, se refiere a un grupo de tablas con la misma distribución de datos.
Interpretación: subtablas asociadas con otras tablas, por ejemplo: la tabla de detalles del pedido es la tabla ER de la tabla de pedidos
14, un nodo lógico compuesto por múltiples nodos de datos en el clúster.En
mycat2, trata múltiples direcciones de fuente de datos como una
dirección de fuente de datos (nombre) y proporciona recuperación y transferencia automática de fallas, es decir, componentes para lograr alta disponibilidad y equilibrio de carga.
Interpretación: Cluster es sinónimo de alta disponibilidad y equilibrio de carga
15. Fuente de datos El
componente conectado a la base de datos back-end . La biblioteca prototipo es la base de datos detrás de Mycat2, como la biblioteca mysql. Interpretación : La biblioteca prototipo es la base de datos real para almacenar datos. Al configurar la fuente de datos, se debe especificar la biblioteca prototipo . La configuración predeterminada es suficiente 2. El usuario (usuario) configura la información relacionada con el usuario (1) directorio mycat/conf/users (2) método de denominación {nombre de usuario}. contenido de configuración user.json (3)









inserte la descripción de la imagen aquí







vim mycat/conf/users/root.user.json
{
    
    
"ip":null,
"password":"123456",
"transactionType":"xa",
"username":"root",
"isolation":3
}
#字段含义
#ip:客户端访问ip,建议为空,填写后会对客户端的ip进行限制
# username:用户名
# password:密码
# isolation:设置初始化的事务隔离级别
READ_UNCOMMITTED:1
READ_COMMITTED:2
REPEATED_READ:3,默认
SERIALIZABLE:4
# transactionType:事务类型
可选值:
proxy 本地事务,在涉及大于 1 个数据库的事务,commit 阶段失败会导致不一致,但是兼容
性最好
xa 事务,需要确认存储节点集群类型是否支持 XA
可以通过语句实现切换
set transaction_policy = 'xa'
set transaction_policy = 'proxy' 可以通过语句查询
SELECT @@transaction_policy

, Fuente de datos (fuente de datos)
Configure la información de la fuente de datos de la conexión Mycat
(1) El directorio
mycat/conf/datasources
(2) Método de denominación
{nombre de la fuente de datos}.datasource.json
(3) Contenido de configuración

vim mycat/conf/datasources/ prototype. datasources.json
{
    
    
"dbType": "mysql",
"idleTimeout": 60000,
"initSqls": [],
"initSqlsGetConnection": true,
"instanceType": "READ_WRITE",
"maxCon": 1000,
"maxConnectTimeout": 3000,
"maxRetryCount": 5,
"minCon": 1,
"name": "prototype",
"password": "123456",
"type": "JDBC",
"url":
"jdbc:mysql://127.0.0.1:3306/mysql?useUnicode=true&serverTimezone=UTC",
"user": "root",
"weight": 0,
"queryTimeout":30,//mills
}
#字段含义
# dbType:数据库类型,mysql
# name:用户名
# password:密码
# type:数据源类型,默认 JDBC
# url:访问数据库地址
# idleTimeout:空闲连接超时时间
# initSqls:初始化sql
# initSqlsGetConnection:对于 jdbc 每次获取连接是否都执行 initSqls
# instanceType:配置实例只读还是读写
可选值:
READ_WRITE,READ,WRITE
#weight :负载均衡权重
# 连接相关配置
"maxCon": 1000,
"maxConnectTimeout": 3000,
"maxRetryCount": 5,
"minCon": 1,


4. Configuración del clúster (clúster) información del clúster
(4) directorio
mycat/conf/clusters
(5) método de denominación
{nombre del clúster}.cluster.json
(6) contenido de configuración

vim mycat/conf/clusters/prototype.cluster.json
{
    
    
"clusterType":"MASTER_SLAVE",
"heartbeat":{
    
    
"heartbeatTimeout":1000,
"maxRetryCount":3,//2021-6-4前是maxRetry,后更正为
maxRetryCount
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[ //配置多个主节点,在主挂的时候会选一个检测存活的数据源作
为主节点
"prototypeDs"
],
"replicas":[//配置多个从节点
"xxxx"
],
"maxCon":200,
"name":"prototype",
"readBalanceType":"BALANCE_ALL",
"switchType":"SWITCH"
可选
//
,
"timer":{
    
     //MySQL集群心跳周期,配置则开启集群心跳,Mycat主动检测主从延迟以
及高可用主从切换
"initialDelay": 30,
"period":5,
"timeUnit":"SECONDS"
},
//readBalanceName:"BALANCE_ALL",
//writeBalanceName:"BALANCE_ALL",
}
#字段含义
# clusterType:集群类型
可选值:
SINGLE_NODE:单一节点
MASTER_SLAVE:普通主从
GARELA_CLUSTER:garela cluster/PXC 集群
MHAMHA 集群
MGRMGR 集群
# readBalanceType:查询负载均衡策略
可选值:
BALANCE_ALL(默认值)
获取集群中所有数据源
BALANCE_ALL_READ
获取集群中允许读的数据源
BALANCE_READ_WRITE
获取集群中允许读写的数据源,但允许读的数据源优先
BALANCE_NONE
获取集群中允许写数据源,即主节点中选择
# switchType:切换类型
可选值:
NOT_SWITCH:不进行主从切换
SWITCH:进行主从切换

4. Tabla de base de datos lógica (esquema)
Configure la tabla de base de datos lógica para realizar subbiblioteca y subtabla
(7) Directorio
mycat/conf/schemas
(8) Método de denominación
{nombre de biblioteca}.schema.json
(9) Contenido de configuración

vim mycat/conf/schemas/mydb1.schema.json
#库配置
{
    
    
"schemaName": "mydb",
"targetName": "prototype"
}
# schemaName:逻辑库名
# targetName:目的数据源或集群
targetName自动从prototype目标加载test库下的物理表或者视图作为单表,prototype
必须是mysql服务器
#单表配置
{
    
    
"schemaName": "mysql-test",
"normalTables": {
    
    
"role_edges": {
    
    
"createTableSQL":null,//可选
"locality": {
    
    
"schemaName": "mysql",//物理库,可选
"tableName": "role_edges",//物理表,可选
"targetName": "prototype"//指向集群,或者数据源
}
}
......
#详细配置见分库分表

Capítulo 4 Creación de una separación de lectura y escritura
Utilizamos la replicación maestro-esclavo de Mycat y MySQL para crear una separación de lectura y escritura de la base de datos para lograr una
alta disponibilidad de MySQL. Construiremos dos modos de separación de lectura y escritura: un maestro y un esclavo, dos maestros y dos esclavos.
4.1 Construya un maestro y un esclavo.
Un host se utiliza para procesar todas las solicitudes de escritura y un esclavo es responsable de todas las solicitudes de lectura. El diagrama de arquitectura es el siguiente 1.
inserte la descripción de la imagen aquí
Cree la replicación maestro-esclavo de la base de datos MySQL
1 Principio de replicación maestro-esclavo de MySQL Configuración del host
inserte la descripción de la imagen aquí
(atguigu01)

修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT

Tres formatos de configuración esclava de registros binlog
inserte la descripción de la imagen aquí
(atguigu02)

修改配置文件:vim /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

4 Reinicie el servicio MySQL en el maestro y
el esclavo 5 Apague el firewall tanto en el maestro como
en el esclavo 6 Cree una cuenta en el maestro y autorice al esclavo

#在主机MySQL里执行授权命令
CREATE USER 'slave2'@'%' IDENTIFIED BY '123123';
GRANT REPLICATION SLAVE ON *.* TO 'slave2'@'%';
#此语句必须执行。否则见下面。
ALTER USER 'slave2'@'%' IDENTIFIED WITH mysql_native_password BY '123123';
flush privileges;
#查询master的状态
show master status;

inserte la descripción de la imagen aquí
# Registre los valores de Archivo y Posición
# No opere el servidor principal MySQL después de realizar este paso para evitar que cambie el valor de estado del servidor principal

7 Configure el host que se copiará en el esclavo

#复制主机的命令
CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;

inserte la descripción de la imagen aquí
#Iniciar la función de replicación del servidor esclavo
iniciar el esclavo
#Ver el estado del servidor esclavo
mostrar el estado del esclavo\G;
inserte la descripción de la imagen aquí

#下面两个参数都是Yes,则说明主从配置成功!
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

8 El host crea una nueva biblioteca, una nueva tabla, inserta registros y la copia esclava

#建库语句
CREATE DATABASE mydb1;
#建表语句
CREATE TABLE mytbl(id INT,NAME VARCHAR(50));
#插入数据
INSERT INTO mytbl VALUES(1,"zhang3");

inserte la descripción de la imagen aquí
9 Cómo detener la función de replicación del servicio

stop slave;

10 Cómo reconfigurar maestro-esclavo

stop slave;
reset master;

2. Configure Macat para separar lectura y escritura.
Inicie sesión en Mycat, cree una biblioteca lógica y configure fuentes de datos.

#在Mycat里创建数据库mydb1
#创建db2逻辑库
create database mydb1;
#修改mydb1.schema.json 指定数据源 "targetName": "prototype",配置主机数据源
vim /usr/local/mycat/conf/schemas/mydb1.schema.json

inserte la descripción de la imagen aquí
Agregar fuentes de datos mediante anotaciones

#登录Mycat,注解方式添加数据源,指向从机
/*+ mycat:createDataSource{ "name":"rwSepw",
"url":"jdbc:mysql://192.168.140.100:3306/mydb1?useSSL=false&characterEncodi
ng=UTF-8&useJDBCCompliantTimezoneShift=true", "user":"root",
"password":"123123" } */;
/*+ mycat:createDataSource{ "name":"rwSepr",
"url":"jdbc:mysql://192.168.140.99:3306/mydb1?useSSL=false&characterEncodin
g=UTF-8&useJDBCCompliantTimezoneShift=true", "user":"root",
"password":"123123" } */;
#查询配置数据源结果
/*+ mycat:showDataSources{} */;
更新集群信息,添加dr0从节点.实现读写分离
#更新集群信息,添加dr0从节点.
/*!
mycat:createCluster{"name":"prototype","masters":["rwSepw"],"replicas":["rw
Sepr"]} */;
#查看配置集群信息
/*+ mycat:showClusters{} */;
#查看集群配置文件
vim /usr/local/mycat/conf/clusters/prototype.cluster.json

inserte la descripción de la imagen aquí

readBalanceType
查询负载均衡策略
可选值:
BALANCE_ALL(默认值)
获取集群中所有数据源
BALANCE_ALL_READ
获取集群中允许读的数据源
BALANCE_READ_WRITE
获取集群中允许读写的数据源,但允许读的数据源优先
BALANCE_NONE
获取集群中允许写数据源,即主节点中选择
switchType
NOT_SWITCH:不进行主从切换
SWITCH:进行主从切换

3. Reinicie Mycat
4. Verifique la separación de lectura y escritura
#(1) Inserte datos con variables del sistema en la tabla de la base de datos del host mytbl, lo que resultará en datos maestro-esclavo inconsistentes
INSERT INTO mytbl VALUES(2,@@hostname);
inserte la descripción de la imagen aquí
#(2) En Consultar la tabla mytbl en Mycat, puede ver que la declaración de consulta se cambia entre los hosts maestro y esclavo.
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_45817985/article/details/132603451
Recomendado
Clasificación