¿Cuántos hosts se necesitan para implementar la separación de lectura y escritura de MySQL?
Mysql es la base de datos gratuita más utilizada en el mundo. Creo que todos los ingenieros involucrados en la operación y mantenimiento del sistema deben haber entrado en contacto con ella. Sin embargo, en el entorno de producción real, el uso de un solo Mysql como base de datos independiente es completamente incapaz de satisfacer las necesidades reales, ya sea en términos de seguridad, alta disponibilidad y alta concurrencia.
Por lo tanto, en términos generales, sincroniza los datos mediante la replicación maestro-esclavo y luego mejora la capacidad de carga concurrente de la base de datos mediante la separación de lectura y escritura (MySQL-Proxy), implementando e implementando dicho esquema. .
Como se muestra en la siguiente figura:
Las siguientes son las precauciones que el autor recopiló durante el proceso de trabajo real y se comparten con todos como referencia.
Instalación y configuración de I.MySQL
Cabe mencionar que mi proceso de instalación se compila e instala desde el paquete fuente, y se planea que todas las configuraciones y datos estén unificados para/optar Directorio /mysql. Por lo tanto, una vez completada la instalación en un servidor, todo el directorio mysql se puede empaquetar y luego pasar a otros servidores para su descompresión, y se puede usar inmediatamente.
Dos: replicación maestro-esclavo de MySQL
Descripción del programa:
Servidor de base de datos principal: 192.168.10.130, MySQL se ha instalado y no hay datos de la aplicación .
Desde el servidor de base de datos: 192.168.10.131, MySQL instalado, sin datos de la aplicación.
2.1 Operaciones realizadas en el servidor principal
Iniciar el servicio mysql
/opt/mysql/init.d/mysql start
Inicie sesión desde la línea de comando para administrar el servidor MySQL
/opt/mysql/bin/mysql -uroot -p 'new-password'
Autorizar desde el servidor de base de datos 192.168.10.131
mysql> OTORGAR ESCLAVO DE REPLICACIÓN EN *.* a 'rep1'@'192.168.10.131' identificado por 'contraseña';
Consulta el estado de la base de datos maestra
Mysql> muestra el estado del maestro;
+- ---------------+----------+------- --- ----+------------------+
| Archivo | Binlog_Do_DB |
+-- ----- --+----------+--------------+---- ------------+
| mysql-bin.000005| 261 |
+---------- -- ------+----------+---- -+--------------- -- -+
Registre los valores de ARCHIVO y Posición, que serán necesarios más adelante para las operaciones esclavas.
2.2 Configurar el servidor esclavo
Modificar el archivo de configuración del servidor esclavo/opt/mysql/etc/my.cnf
Cambiar server-id = 1 al servidor -id = 10 y asegúrese de que otros servicios MySQL no utilicen este ID.
Iniciar el servicio mysql
/opt/mysql/init.d/mysql start
Iniciar sesión y administrar el servidor MySQL desde la línea de comandos
/ opt/mysql/bin/mysql -uroot -p'new-password'
Ejecutar sentencia SQL sincrónica
mysql> Cambiar maestro a
master_host=' 192.168.10.130',
master_user='rep1',
master_password='contraseña',
master_log_file='mysql -bin.000005 ',
p>master_log_pos=261;
Iniciar el proceso de sincronización del esclavo después de la ejecución correcta
mysql>iniciar esclavo;
Maestro -verificación de sincronización de esclavo
p>
mysql> mostrar estado de esclavo\G
mysql>.mostrar estado de esclavo\G
====== ============ =============================
** ************ ** 1. Línea******************
Slave_ IO_State:
Master_Host: 192.168.10.130
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_ File: mysql-bin .000005
Read_Master_Log_Pos: 415
Relay_Log_File: localhost-relay-bin.000008
Relay_Log_Pos: 561
Relay_Master_Log_File: mysql-bin .000005
Slave_IO_Running: Sí
Slave_SQL_Running: Sí
Replicate_Do_DB:
............ . Ignorado algunos.... ........ ...
Master_Server_Id: 1
1 fila en el conjunto (0,01 segundos)
======== ======================================== p>
Entre ellos, esclavo_IO_Running y esclavo_SQL_Running deben ser YES para indicar el estado normal.
Si los datos de la aplicación ya existen en el servidor primario, se debe realizar el siguiente procesamiento al realizar la replicación maestro-esclavo:
(1) La base de datos primaria realiza operaciones de bloqueo de tablas para evitar que los datos continúen con la operación de escritura
mysql> FLUSH TABLAS CON READ LOCK;
(2) Verifique el estado de la base de datos maestra
mysql> mostrar el estado del maestro. ;
(3) Registre los valores de ARCHIVO y Posición.
Copie el archivo de datos (el directorio /opt/mysql/data completo) del servidor maestro al servidor esclavo. Se recomienda comprimir el archivo con tar primero y luego transferirlo al servidor esclavo. para descompresión.
(4) Desbloquear la base de datos maestra
mysql> DESBLOQUEAR TABLAS;
2.3 Verificar el efecto de la replicación maestro-esclavo
En Ejecutar operaciones en el servidor principal
Crear base de datos first_db en el servidor principal;
mysql> crear base de datos first_db;
Consulta Ok, 1 fila afectada (0,01 segundos )
Crear tabla first_tb en el servidor principal
mysql> Crear tabla first_tb(id int(3),name char (10));
La consulta es normal, 1 fila afectada (0.00 segundos)
Insertar registros en la tabla first_tb en el servidor principal
mysql> insertar en valores first_tb (001,'yo mismo');
La consulta es normal, 1 fila está afectada (0,00 segundos)
Ver en el servidor esclavo
mysql> Mostrar base de datos;
== == ================= ========
+--------------- -- ---+
Base de datos|
+--------------------+
| esquema_información |
| primera_db |
| mysql |
| esquema_rendimiento |
| >+ -----------+
5 registros (0, 01 segundos).
01 seg)
================= ===========
La base de datos first_db ha sido automáticamente Generar
mysql> usar first_db
Base de datos cambiada
mysql> mostrar tablas;
========== == ==================
+--------------------+ p>
| Tablas_en_primera_db |
+--------------------------+
| first_tb |
+--------------------+
Tabla_en_first_db |
+- ------ -------------+
| primer_tb |
+--- --------- ------ --+
1 fila en conjunto (0,02 segundos)
==================== ======= ====
La tabla de base de datos first_tb también se ha creado automáticamente
mysql> select * from first_tb;
== ========== ==================
+------+------+
| identificación | nombre |
+------+------+
|
+------ +------+
Hay 1 fila en la colección (0,00 segundos)
======= ============= ==========
El registro también existe
Por lo tanto, toda la replicación maestro-esclavo de MySQL El proceso se ha completado. A continuación, realizaremos la instalación y configuración de la separación de lectura y escritura de MySQL.
Tres: separación de lectura y escritura de MySQL
Descripción del escenario:
Estación maestra de base de datos: 192.168.10.130
Esclava de base de datos: 192.168. 10.131
Servidor de programación MySQL-Proxy: 192.168.10.132
Realice las siguientes operaciones en el servidor de programación MySQL-Proxy 192.168.10.132.
3.1 Instalación y configuración de MySQL
El proceso de instalación es el mismo que el anterior.
3.2 Verificar los paquetes de software requeridos
Utilice rpm -qa | grep name para verificar si los siguientes paquetes de software están instalados.
gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*
libevent* glib*
Si falta un paquete de software, utilice yum -qa | nombre gris para instalarlo. Puede instalarlo en línea mediante yum -y install, o buscarlo directamente desde el CD de instalación del sistema e instalarlo mediante rpm -ivh.
3.3 Compilar e instalar lua
La separación de lectura y escritura en MySQL-Proxy se implementa a través del script rw-splitting.lua, por lo que es necesario instalar lua.
Lua se puede obtener de las siguientes maneras
Descargar el paquete de código fuente
Buscar paquetes rpm relevantes en rpm.pbone.net. Buscar paquetes rpm relacionados
download.fedora.redhat.com/pub/fedora/epel/5/i386/lua-5.1.4-4.el5.i386.rpm
descargar .fedora.redhat.com/pub/fedora/epel/5/x86_64/lua-5.1.4-4.el5.x86_64.rpm
Aquí recomendamos usar el paquete fuente para instalar
cd /opt/install
wget hz
tar zvfx lua-5.1.4.tar .gz
cd lua-5.1.4 p>
vi src/Makefile
Agregue -fPIC en la línea CFLAGS= -O2 -Wall $(MYCFLAGS) y cámbielo a CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS) para evitar errores de compilación.
hacer linux
hacer instalar
cp etc/lua.pc /usr/lib/pkgconfig/
exportar PKG_CONFIG_PATH=$PKG_CONFIG_PATH :/usr/lib/ pkgconfig
3.4 Instalación y configuración de MySQL-Proxy
MySQL-Proxy se puede obtener desde la siguiente URL:
Se recomienda use la versión binaria compilada El método es compilar usando el paquete de código fuente, porque la última versión de MySQL-Proxy admite las versiones automake, glib y libevent en la misma medida. La versión libevent es el paquete de software básico del sistema y no se recomienda forzar su actualización.
Dado que estos archivos binarios compilados están en un directorio después de la descompresión, se recomienda utilizar las siguientes versiones:
La plataforma de prueba es RHEL5 de 32 bits, por lo que se recomienda utilizar Paquete de software de 32 bits
wget
tar xzvf mysql-proxy-0.8.1-linux- rhel5-x86-32bit.tar.gz
mv mysql -proxy-0.8 .1-linux-rhel5-x86-32bit /opt/mysql-proxy
Crear script de administración de servicios mysql-proxy
mkdir /opt/ mysql-proxy/init .d/
vim mysql-proxy
01 #! /bin/sh
02 #
03 # mysql-proxy Este script inicia y detiene el demonio mysql-proxy
04 #
05 # chkconfig: - 78 30
06 # Nombre del proceso: mysql-proxy
07 # Descripción: mysql-proxy es un demonio proxy para mysql
08
09 # Biblioteca de funciones fuente.
10 ./etc/rc.d/init.d/functions
11
12 #PROXY_PATH=/usr/local/bin
13 PROXY_PATH=/opt/mysql-proxy/bin
14
15 prog="mysql-proxy "
16
17 # Configuración de red de origen.
18 ./etc/sysconfig/network
19
20 # Compruebe si la red está iniciada.
21 [ ${NETWORKING} = "no" ] && salida 0
22
23 # Establece el proxy mysql predeterminado. Establezca la configuración predeterminada del proxy MySQL.
24 #PROXY_OPTIONS="--daemon"
25 PROXY_OPTIONS="--admin-username=root --admin-password =contraseña --proxy-read-only-backend -addresses=192.168.10.131:3306 --proxy-backend-addresses=192.168.10.130:3306 --admin-lua-script=/ opt/mysql-proxy/lib/mysql-proxy/lua/admin.lua --proxy -lua-script=/opt/mysql-proxy/scripts/rw-splitting.lua"
26 PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid
27
28 # Configuración de proxy mysql de origen.
29 si [ -f /etc/sysconfig/mysql-proxy ] entonces
30 ./etc/sysconfig/mysql-proxy
31 fi <; /p>
32
33 RUTA=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH
34
35 # Todo funciona bien por defecto
36 RETVAL=0
37
38 # Mira cómo nos llaman.
39 caso "$1" en
40 inicio)
41 # Iniciar el proceso del demonio.
42 echo -n $"Iniciar proceso de demonio. 42 echo -n $"Iniciar $prog:"
43 $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS --daemon - -pid-file=$PROXY_PID --user=mysql --log-level=warning --log-file=/opt/mysql-proxy/log/mysql-proxy.log
44 RETVAL=$
45 echo
46 si [ $RETVAL = 0 ] entonces
47 toque /var/lock/subsys/mysql-proxy
48 fi
49 ;;
50 stop)
51 # Detener el proceso del demonio.
52 echo -n $"Deteniendo $prog: "
53 killproc $prog
54 RETVAL=$
55 echo?
56 si [ $RETVAL = 0 ] entonces
57 rm -f /var/lock/subsys/mysql-proxy
58 rm -f $ PROXY_PID
59 fi
60 ;;
61 reiniciar)
62 $0 detener
63 dormir 3
64 $0 inicio
65
68 ;;
66 condrestart)
67 [ -e /var/lock/subsys/mysql-proxy ] && $0 reiniciar
68 ;;
69 estado)
70 estado mysql-proxy
71 RETVAL=$?
72 ;;
73 *)
74 echo "Uso: $0 {iniciar|detener|reiniciar|estado| condrestart}"
75 RETVAL=$?
75 RETVAL=1
76 ;;
77 esac
78
79 salir $RETVAL
Detalles de los parámetros del script:
=================== ============================
PROXY_PATH=/opt/mysql-proxy/bin // Definir mysql- Ruta al binario del servicio proxy
PROXY_OPTIONS="--admin-username=root // Definir la cuenta del servidor de administración interna
--admin-password=contraseña // Definir la cuenta interna Contraseña del servidor de administración
--proxy-read-only-backend-addresses=192.168.10.131:3306 (//Definir la dirección del servidor esclavo backend de solo lectura
--proxy- backend-addresses =192.168.10.130:3306 (//Definir la dirección del servidor principal backend
--admin-lua-script=/opt/mysql-proxy/lib/mysql-proxy/lua/admin. lua // Definir la ruta del script de administración de Lua
--proxy-lua-script=/opt/mysql --proxy/scripts/rw-splitting.lua" //Definir la ruta del script de división de lectura/escritura de Lua
PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.-pid-file =$PROXY_PID (//Definir la ruta del archivo PID del proxy mysql
-user =mysql (// Iniciar el servicio como usuario mysql
--log-level=warning (//Definir el nivel de registro, de mayor a menor (error|advertencia|información|mensaje|depuración)
- -log-file=/opt/mysql-proxy/lo
g/mysql-proxy.log //Definir la ruta del archivo de registro
============================== === ====== ==========
cp mysql-proxy /opt/mysql-proxy/init.d/
chmod + x /opt /mysql-proxy/init.d/mysql-proxy
mkdir /opt/mysql-proxy/run
mkdir /opt/mysql-proxy/log
mkdir /opt/mysql-proxy/scripts
Configurar y usar rw-splitting.lua para leer/escribir scripts de división
Podemos descargar el último script desde la última Paquete de código fuente mysql-proxy Obtenga el script más reciente de
cd /opt/install
wget
tar xzvf mysql-proxy-0.8.1.tar. gz
cd mysql-proxy-0.8.1
cp lib/rw-spliting.lua/opt/mysql-proxy/scripts
Configurar y usar rw -división.