Implemente la alta disponibilidad de MySQL autoconstruida de ECS basada en Alibaba Cloud SLB (prueba de función SLB)

Tabla de contenido

 

Introducción de antecedentes  

Introducción a Alibaba Cloud SLB

Introducción al medio ambiente 

Crear tabla de prueba

Preparación del guión de prueba

Simular la conmutación por error


Introducción de antecedentes  

Recientemente, es necesario implementar la arquitectura de alta disponibilidad de MySQL en Alibaba Cloud ECS, porque Keepalived no se puede usar para proporcionar VIP (IP virtual) en Alibaba Cloud, y la conmutación por error no se puede completar automáticamente sin VIP. Después de la investigación, se encuentra que Alibaba El producto en la nube SLB puede satisfacer aproximadamente la demanda. SLB La distribución del tráfico se puede realizar para eliminar puntos únicos de falla y lograr una alta disponibilidad del servicio. Así que planeo usar el producto SLB (equilibrio de carga) de Alibaba Cloud en lugar de VIP. Este blog es principalmente para verificar si las solicitudes de escritura y consulta de la base de datos se pueden transferir automáticamente a la base de datos en espera si el servicio de la base de datos principal está inactivo en el modo SLB activo / en espera. Si es posible, la siguiente solución de alta disponibilidad autoconstruida de ECS es utilizar SLB + MHA para lograr la alta disponibilidad de la biblioteca principal.

Introducción oficial de SLB Alibaba Cloud

Introducción a Alibaba Cloud SLB

Server Load Balancer es un servicio de equilibrio de carga que distribuye el tráfico a varios servidores en la nube. El equilibrio de carga puede expandir las capacidades de servicio externo del sistema de la aplicación a través de la distribución del tráfico y mejorar la disponibilidad del sistema de la aplicación al eliminar los puntos únicos de falla.

Nota:

Al crear un SLB, debe utilizar un grupo de servidores activos y en espera. El servidor primario corresponde al servidor de base de datos primario en el MHA, y el servidor en espera corresponde al maestro en espera en el MHA, por lo que el tráfico habitual será enviado a la base de datos primaria, y cuando ocurre una falla, el tráfico será enviado al maestro en espera. Por lo demás, puede consultar a los compañeros de operaciones de la empresa o al personal técnico de Alibaba Cloud.

Introducción al medio ambiente 

IP Rol en SLB Roles en la arquitectura de la base de datos (MHA) Abreviatura
10.96.0.202 Dirección SLB VIP 202
10.96.1.114   Servidor principal Servidor de biblioteca principal 4
10.96.1.115 Servidor en espera Servidor maestro en espera 5
10.96.1.116 No agregado a SLB Servidor de biblioteca esclavo 6

Crear tabla de prueba

Descripción de la estructura de la tabla: agregue una columna de marca de tiempo a la tabla de prueba, que es conveniente para registrar el tiempo de inserción y cambiar el registro para comparar. El otro campo es de tipo num, y puede usar el bucle for para insertar continuamente datos en la tabla .

create database test;
use test;

CREATE TABLE `hatest` (
`ID` BIGINT (20) NOT NULL AUTO_INCREMENT,
num BIGINT (20) NOT NULL,
`CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`UPDATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`ID`)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 ROW_FORMAT = DYNAMIC COMMENT = '用户表';

Preparación del guión de prueba

Instale paquetes dependientes:

pip instalar PyMySQL

# Author admin
# DATE  2020/9/10
# -*- coding:UTF-8 -*-
import pymysql
import time,datetime
import logging
import os


logging.basicConfig(filename=os.path.join(os.getcwd(),'ha.log'),level=logging.DEBUG)


def insert():
    while True:
        try:
            conn = pymysql.connect(host='10.96.0.202',port=3306,user='dba',password='dba',database='test',charset='utf8')
            cursor = conn.cursor()
            for num in range(0,10000000):
                data_time = time.strftime("%Y-%m-%d %H:%M:%S")
                sql1="insert into hatest(num) values(%d);"%num
                sql2 = "show variables like 'server_id';"


                cursor.execute(sql1)
                data_time = datetime.datetime.now()
                cursor.execute(sql2)
                server_id = cursor.fetchone()
                logging.warning('%s server_id is %s'%(datetime.datetime.now(),server_id[1]))
                conn.commit()
            cursor.close()
        except Exception as e:
            logger_info = "%s %s" %(datetime.datetime.now(),e)
            logging.warning(logger_info)


insert()

Descripción del script: use la dirección de SLB 10.96.0.202 para insertar 10 millones de datos en la base de datos, detenga manualmente el servicio de base de datos en el servidor 4 durante la inserción y verifique que 5 pueda continuar insertando datos después del cambio de SLB. Cada vez que se insertan datos, el server_Id de la base de datos se registrará en el registro para identificar qué base de datos se está escribiendo, y el error durante el cambio se registrará en el registro.

Simular la conmutación por error

Script de inicio

Detenga manualmente el servicio mysql en 4

Observe el registro y los datos de la tabla.

prueba

 

22:17 Inicio de la escritura continua del guión

22:18:11 4上 停止数据库 /etc/init.d/mysqld stop  日志和数据库的表中都显示在18分11秒停止写入

ha.log

Tabla en la base de datos

22:18:11 continúa hasta 22:18:20, la base de datos no se puede escribir 
22:18:20 SLB完成主备切换 5数据库开始写入 ,日志数据库表中显示在18分20秒开始写入5环境


22:19 4上启动 /etc/init.d/mysqld start

22:19:10 segundos Se inició el servicio de base de datos de 4 entornos, 5 entornos dejaron de escribir, pero 4 entornos no comenzaron a escribir

 Verificación completa

 

Supongo que te gusta

Origin blog.csdn.net/weixin_48154829/article/details/108537882
Recomendado
Clasificación