Red de conocimiento informático - Aprendizaje de programación - ¿Cuántos hosts se necesitan para implementar la separación de lectura y escritura de MySQL?

¿Cuántos hosts se necesitan para implementar la separación de lectura y escritura de MySQL?

Dos

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)

======== ========================================

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;

========== == ==================

+--------------------+

| 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

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.