Notas de combate reales de MyCat de middleware de base de datos (primer paso): Introducción a MyCat (construcción del entorno, conceptos básicos de MyCat, prueba de configuración de fragmentos, introducción al principio de MyCat)

1. Construcción ambiental

Mycat es el uso de desarrollo de lenguaje Java de middleware de base de datos de código abierto , soporte para el entorno operativo Windows y Linux, aquí MyCat en el entorno Linux para construir .

A. MySQL
B. JDK
C. MyCat

1. Instale y configure MySQL

1) Instalar MySQL

A). 卸载 centos 中预安装的 mysql 

	rpm -qa | grep -i mysql 
	
	rpm -e mysql-libs-5.1.71-1.el6.x86_64 --nodeps 

B). 上传 mysql 的安装包 

	alt + p -------> put E:/test/MySQL-5.6.22-1.el6.i686.rpm-bundle.tar 

C). 解压 mysql 的安装包 

	mkdir mysql 
	
	tar -xvf MySQL-5.6.22-1.el6.i686.rpm-bundle.tar -C /root/mysql 

D). 安装依赖包 

	yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6 libncurses.so.5 -- setopt=protected_multilib=false

	yum update libstdc++-4.4.7-4.el6.x86_64 

E). 安装 mysql-client 

	rpm -ivh MySQL-client-5.6.22-1.el6.i686.rpm 

F). 安装 mysql-server 

	rpm -ivh MySQL-server-5.6.22-1.el6.i686.rpm

2) Iniciar y detener MySQL

service mysql start 

service mysql stop 

service mysql status 

service mysql restart

3) Inicie sesión en MySQL

mysql 安装完成之后, 会自动生成一个随机的密码, 并且保存在一个密码文件中 : 
	/root/.mysql_secret 
	
	mysql -u root -p 
	
	登录之后, 修改密码 : 
	
	set password = password('itcast'); 
	
	授权远程访问 : 

	grant all privileges on *.* to 'root' @'%' identified by 'itcast'; 
	flush privileges;

Después de que el acceso remoto autorizado, se puede sqlYogconectar Linuxen MySQL, pero recuerde que debe apagar el servidor de seguridad en un sistema Linux (o configurar un servidor de seguridad):

2. Instale JDK1.8

A. 上传JDK的安装包到Linux的root目录下 

	alt + p -----------> put D:/jdk-8u181-linux-x64.tar.gz 

B. 解压压缩包 ,/usr/share 目录下 
	tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/share/ 

C. 配置PATH环境变量 , 在该配置文件(/etc/profile)的最后加入如下配置 
	export JAVA_HOME=/usr/share/jdk1.8.0_181 
	export PATH=$PATH:$JAVA_HOME/bin

3. Instale MyCat

  1. Sube el paquete comprimido de MyCat alt + p --------> put D:/Mycat-server-1.6.7.3- release-20190927161129-linux.tar.gz
  2. Descomprime el paquete comprimido de MyCat tar -zxvf Mycat-server-1.6.7.3-release-20190927161129- linux.tar.gz -C /usr/local
  3. Introducción a la estructura de directorios de MyCat


Materiales de referencia: 《深入理解JVM & G1 GC》
Estudiantes que quieran obtener información rápidamente: Por favor agregue el asistente VX: C18173184271,备注一下CSDN+工作年限!¡Consígalo gratis
para que pueda comprender y aprender completamente!

Dos, el concepto central de MyCat

1. Fragmentación

En términos simples, se refiere a ciertas condiciones, seremos almacenados en una base de datos con los datos almacenados en una pluralidad de bases de datos dispersas (host) anteriores, para lograr el efecto de dispersar la carga en un solo dispositivo. La segmentación deSharding datos ( ) según el tipo de reglas de segmentación se puede dividir en dos modos divididos.

  1. Una es Schemasegmentar a diferentes bases de datos (hosts) de acuerdo con diferentes tablas (o ). Esta segmentación se puede llamar segmentación vertical (vertical) de datos.

  2. La otra es dividir los datos en la misma tabla en múltiples bases de datos (hosts) de acuerdo con ciertas condiciones de acuerdo con la relación lógica de los datos en la tabla. Esta segmentación se llama corte de datos horizontal (horizontal) Minuto.


Estrategia de fragmentación de MyCat:


Encima de la línea de puntos está el diagrama de estructura lógica y debajo de la línea de puntos está el diagrama de estructura física;

2. Biblioteca lógica (esquema)

MyCat es un middleware de base de datos . Por lo general, para aplicaciones prácticas, no es necesario conocer la existencia de middleware. Los desarrolladores comerciales solo necesitan conocer el concepto de base de datos, por lo que el middleware de base de datos se puede considerar como uno o más clústeres de base de datos. Biblioteca lógica .

3. Tabla lógica (tabla)

Dado que existe una biblioteca lógica, habrá tablas lógicas En las bases de datos distribuidas, para las aplicaciones, las tablas que leen y escriben datos son tablas lógicas. Las tablas lógicas se pueden distribuir en una o más bibliotecas de fragmentación después de la segmentación de datos, o pueden estar compuestas por una sola tabla sin segmentación o fragmentación de datos.

  1. Las tablas fragmentadas se
    refieren a las tablas de datos grandes originales que deben dividirse en varias tablas de base de datos . De esta manera, cada fragmento tiene una parte de los datos y todos los fragmentos constituyen datos completos. Con todo, es la tabla la que debe fragmentarse. Por ejemplo, la tb_ordertabla es una tabla fragmentada y los datos se dividen en dos nodos dn1 y dn2 según las reglas.
  2. Tablas
    no fragmentadas No todas las tablas de una base de datos son muy grandes. Algunas tablas se pueden particionar. Las tablas no fragmentadas son relativas a tablas fragmentadas, es decir, tablas que no requieren particionamiento de datos. Por ejemplo: tb_cityuna tabla no fragmentada , los datos solo se almacenan en un nodo dn1 de la misma.
  3. La
    base de datos relacional de la tabla ER se basa en el modelo entidad-relación (Modelo de relación entre entidades) , y MyCatla tabla ER vendrá de este. MyCat presenta una estrategia de partición de datos basada en la relación entre ER, registrando la tabla principal de su tabla de subpalabras asociada almacenada en un solo segmento de datos, por tablas de grupo (Grupo de tablas) para garantizar que los datos no estén asociados con consultas entre bases de datos.
  4. Tabla global
    en un proyecto grande, habrá una parte de la tabla del diccionario (tabla de códigos) , en la que los datos almacenados son la base para algunos de los proyectos, que son la base de los datos, la cantidad de datos no es grande, probablemente en toda la mesa de negocios hay conexiones. Cuando la tabla de negocios está fragmentada debido a la gran cantidad de datos, la consulta asociada entre la tabla de negocios y la tabla de diccionario de datos adjunta se vuelve un problema más difícil. En MyCat, la consulta asociada de este tipo de tabla se puede resolver mediante la redundancia de datos. ., Es decir, todos los fragmentos copian este dato ( tabla de diccionario de datos ), por lo que estas tablas de datos redundantes se pueden definir como tablas globales.

4. Nodo de fragmentos (dataNode)

Después de la segmentación de datos, una tabla grande se divide en diferentes partes de las bases de datos anteriores, las tablas de la base de datos para cada segmento se ubican en el nodo de segmento (Datanode) .

5. Host de nodo (dataHost)

Después de la segmentación de datos, cada nodo de fragmento (Datanode) no es necesariamente una máquina son exclusivos, la misma máquina puede tener una pluralidad de segmentos por encima de las bases de datos, uno o más de dichos nodos de fragmentos (Datanode) la máquina se encuentra en el host del nodo (DataHost) , Para evitar limitar el número de nodo maestro único concurrente, intente escribir la ecualización del nodo de segmento de alta presión (Datanode) en un nodo host diferente (DataHost) .

6. Reglas de fragmentación (regla)

Hablamos de segmentación de datos. Si una tabla grande se divide en varias tablas de fragmentos, se requieren ciertas reglas. De esta manera, las reglas para dividir los datos en un determinado fragmento de acuerdo con una determinada regla de negocio son las reglas de fragmentación y la fragmentación de datos se selecciona adecuadamente Las reglas de fragmentación son muy importantes y evitarán en gran medida la dificultad del procesamiento de datos posterior.

Tres, prueba de configuración de fragmentos

1. Demanda

Dado que TB_TESTuna gran cantidad de datos en la tabla, ahora necesita TB_TESTuna tabla de piezas de datos, se divide en tres nodos de datos, cada nodo ubicado en un servidor host diferente, una configuración específica, con referencia a la siguiente figura:

2. Preparación ambiental

Prepare tres máquinas virtuales, instálelas MySQLy configúrelas:

IP 地址列表 : 
	192.168.192.157 
	192.168.192.158 
	192.168.192.159

3. Placement schema.xml

schema.xmlComo uno de los archivos de configuración importantes en MyCat, administra la biblioteca lógica , la tabla lógica y las reglas de fragmentación correspondientes , DataNode y DataSource de MyCat . Comprender estas configuraciones es un requisito previo para el uso correcto de MyCat. Aquí el archivo se analiza capa por capa.


Cree 3 bases de datos en el servidor, llamadas db1

Modificado schema.xmlcomo sigue:

<?xml version="1.0"?> 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
<mycat:schema xmlns:mycat="http://io.mycat/"> 
	<!-- 逻辑库配置 --> 
	<schema name="ITCAST" checkSQLschema="false" sqlMaxLimit="100"> 
		<!-- 逻辑表配置 --> 
		<table name="TB_TEST" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /> 
	</schema> 
	
	<!-- 数据节点配置 --> 
	<dataNode name="dn1" dataHost="host1" database="db1" /> 
	<dataNode name="dn2" dataHost="host2" database="db1" /> 
	<dataNode name="dn3" dataHost="host3" database="db1" /> 
	
	<!-- 节点主机配置 --> 
	<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 
		<heartbeat>select user()</heartbeat> 
		<writeHost host="hostM1" url="192.168.192.157:3306" user="root" password="itcast"></writeHost>
	</dataHost> 
	
	<dataHost name="host2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 
		<heartbeat>select user()</heartbeat> 
		<writeHost host="hostM1" url="192.168.192.158:3306" user="root" password="itcast"></writeHost> 
	</dataHost> 
	
	<dataHost name="host3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 
		<heartbeat>select user()</heartbeat> 
		<writeHost host="hostM1" url="192.168.192.159:3306" user="root" password="itcast"></writeHost> 
	</dataHost> 

</mycat:schema>

4. Configure server.xml

server.xmlCasi toda la información de configuración del sistema requerida por mycat se guarda. El más utilizado es configurar aquí el nombre de usuario, la contraseña y los permisos. Agregue la configuración del juego de caracteres UTF-8 en el sistema; de lo contrario, aparecerá un signo de interrogación al almacenar chino

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

Modifique la configuración del usuario, estamos aquí para ITCASTconfigurar dos usuarios:

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

<user name="test"> 
	<property name="password">123456</property> 
	<property name="schemas">ITCAST</property> 
</user>

Y necesita reemplazar la configuración de la biblioteca lógica original con la biblioteca lógica de ITCAST ;

5. Inicie MyCat

puesta en marcha:

bin/mycat start 
bin/mycat stop 
bin/mycat status

Ver MyCat:

Número de puerto de conexión 8066

  1. Vía línea de comando
mysql -h 127.0.0.1 -P 8066 -u root -p

  1. Conectarse a través de sqlyog

6. Prueba de fragmentación de MyCat

Ingrese mycat, ejecute la siguiente declaración para crear una tabla

CREATE TABLE TB_TEST ( 
	id BIGINT(20) NOT NULL, 
	title VARCHAR(100) NOT NULL , 
	PRIMARY KEY (id) 
) ENGINE=INNODB DEFAULT CHARSET=utf8 ;

Revisemos las 3 bases de datos de MySQL y veamos que las tablas se crean automáticamente. tan increíble.

A continuación, se inserta en los datos de la tabla, tenga en cuenta que la escritura INSERTdebe escribirse en la lista de campos cuando se escribe la declaración; de lo contrario, aparece el siguiente mensaje de error:

Código de error: 1064error code: 1064

partition table, insert must provide ColumnList

Intentamos insertar algunos datos:

INSERT INTO TB_TEST(ID,TITLE) VALUES(1,'goods1'); 
INSERT INTO TB_TEST(ID,TITLE) VALUES(2,'goods2'); 
INSERT INTO TB_TEST(ID,TITLE) VALUES(3,'goods3');

Encontraremos que los datos se escriben en el primer nodo ¿Cuándo se escribirán los datos en el segundo nodo?

Podemos insertar el segundo nodo insertando los siguientes datos

INSERT INTO TB_TEST(ID,TITLE) VALUES(5000001,'goods5000001');

Debido a que la regla de fragmentación que adoptamos es almacenar 5 millones de datos por nodo, cuando el ID es mayor que 5000000, se almacenará en el segundo nodo.

Actualmente, solo se configuran dos nodos. ¿Qué sucede si los datos superan los 10 millones? Ejecute la siguiente declaración para probar

INSERT INTO TB_TEST(ID,TITLE) VALUES(10000001,'goods10000001');

Cuarto, se introduce el principio de MyCat

El principio más importante de MyCat es un verbo , "interceptación" , que intercepta las sentencias SQL enviadas por el usuario, la primera sentencia SQL que realiza algún análisis específico, como análisis de fragmentación , análisis de ruta , separación y análisis de lectura y escritura , análisis de búfer y así sucesivamente, luego envíe esta declaración SQL a la base de datos real en el back-end, y procese el resultado devuelto apropiadamente, y finalmente devuélvalo al usuario, como se muestra en la figura.

En la figura, la tabla de usuarios se divide en tres nodos de fragmentación dn1, dn2 y dn3. Se distribuyen en tres MySQL Server(dataHost). Por lo tanto, los servidores 1-N se pueden utilizar para la fragmentación. La regla de fragmentación son las reglas de fragmentación de cadenas de enumeración típica, una regla se define campo de fragmento + función de fragmentación . Aquí el campo segmento status, la función segmento era enumerar cadenas .

Cuando MyCat recibe una declaración SQL, primero analiza la tabla involucrada en la declaración SQL y luego mira la definición de esta tabla. Si la tabla tiene una regla de fragmentación, obtendrá el valor del campo de fragmento en la declaración SQL y Haga coincidir la función de fragmentación para obtener La lista de fragmentos correspondiente a la instrucción SQL se envía al fragmento correspondiente para su ejecución y, finalmente, los datos devueltos por todos los fragmentos se procesan y devuelven al cliente. Tome " select * from user where status='0'" como ejemplo, busque status='0', de acuerdo con la función de fragmentación, el valor de '0' se almacena en dn1, por lo que la declaración SQL se envía al primer nodo para su ejecución, y luego el resultado de la consulta se devuelve al usuario.

Si la declaración SQL enviada es "select * from user where status in ('0','1')", entonces la declaración SQL se enviará al host correspondiente a dn1 y dn2 para su ejecución, y luego se recopilarán los resultados y se enviarán al usuario.


Si necesita esta versión completa 《开源数据库中间件MyCat实战笔记》, solo necesita apoyarme en este artículo.

Mucho apoyo, puede obtener información gratis después de tres años consecutivos (promesa: 100% gratis)

Canal de inicio rápido: agregue asistente VX: ¡ C18173184271,备注一下CSDN+工作年限!consígalo gratis! ¡Lleno de sinceridad! ! !
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/Java_Caiyo/article/details/113270001
Recomendado
Clasificación