Compilación e Instalación de MariaDB 10.0 en CentOS 7 con Optimización de Memoria mediante jemalloc

Para optimizar la gestión de memoria en entornos de bases de datos de alto rendimiento, compilar MariaDB desde el código fuente integrando jemalloc es una práctica altamente recomendada. A continuación, se detalla el proceso completo en un sistema CentOS 7 de 64 bits, utilizando MariaDB 10.0.

Compilación e instalación de jemalloc

Primero, descargue y compile la biblioteca de asignación de memoria jemalloc. En este ejemplo, la instalaremos en un directorio personalizado.

cd /usr/src
curl -LO https://github.com/jemalloc/jemalloc/releases/download/4.5.0/jemalloc-4.5.0.tar.bz2
tar -xjf jemalloc-4.5.0.tar.bz2
cd jemalloc-4.5.0
./configure --prefix=/opt/jemalloc
make -j$(nproc) && make install

# Configurar las bibliotecas dinámicas
echo "/opt/jemalloc/lib" > /etc/ld.so.conf.d/jemalloc.conf
ldconfig
ln -sf /opt/jemalloc/lib/libjemalloc.so.2 /usr/lib64/libjemalloc.so

Preparación del entorno para MariaDB

Instale las dependencias necesarias y configure los directorios y usuarios del sistema.

yum install -y cmake gcc gcc-c++ openssl-devel zlib-devel ncurses-devel bison

# Crear directorios personalizados
mkdir -p /srv/mariadb/{data,logs,tmp,run}

# Crear usuario y grupo del sistema
groupadd -r -g 3307 mysql
useradd -r -u 3307 -g mysql -s /sbin/nologin -d /srv/mariadb mysql
chown -R mysql:mysql /srv/mariadb

Configuración y compilación de MariaDB

Decsargue el código fuente de MariaDB 10.0 y ejecute CMake con parámetros optimizados. Se ha actualizado el conjunto de caracteres predeterminado a utf8mb4 para un mejor soporte de Unicode.

cd /usr/src
tar -xzf mariadb-10.0.38.tar.gz
cd mariadb-10.0.38

cmake . \
-DCMAKE_INSTALL_PREFIX=/opt/mariadb \
-DMYSQL_DATADIR=/srv/mariadb/data \
-DTMPDIR=/srv/mariadb/tmp \
-DMYSQL_UNIX_ADDR=/srv/mariadb/run/mysql.sock \
-DSYSCONFDIR=/etc/mariadb \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3306 \
-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" \
-DWITH_SAFEMALLOC=OFF \
-DWITH_SSL=system \
-DWITH_ZLIB=system

make -j$(nproc) && make install

Configuración del servidor

Cree el archivo de configuración principal en /etc/mariadb/my.cnf con parámetros ajustados para un rendimiento óptimo.

[client]
port = 3306
socket = /srv/mariadb/run/mysql.sock
default-character-set = utf8mb4

[mysqld]
port = 3306
socket = /srv/mariadb/run/mysql.sock
datadir = /srv/mariadb/data
tmpdir = /srv/mariadb/tmp

# Configuración de red y conexiones
back_log = 100
max_connections = 500
max_connect_errors = 100
max_allowed_packet = 32M

# Buffers y cachés
table_open_cache = 4096
thread_cache_size = 16
query_cache_size = 0
query_cache_type = 0

# Configuración de InnoDB
default_storage_engine = InnoDB
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_io_capacity = 2000
innodb_read_io_threads = 8
innodb_write_io_threads = 8

# Registros
log_error = /srv/mariadb/logs/error.log
slow_query_log = 1
slow_query_log_file = /srv/mariadb/logs/slow.log
long_query_time = 2

[mysqld_safe]
open_files_limit = 65535
pid_file = /srv/mariadb/run/mysql.pid

Inicialización y configuración del servicio

En CentOS 7, es preferible utilizar systemd para gestionar los servicios. Inicialice la base de datos y cree el archivo de unidad.

# Inicializar el directorio de datos
cd /opt/mariadb
./scripts/mysql_install_db --user=mysql --datadir=/srv/mariadb/data --defaults-file=/etc/mariadb/my.cnf

# Crear archivo de servicio systemd
cat << 'EOF' > /etc/systemd/system/mariadb-custom.service
[Unit]
Description=MariaDB Custom Database Server
After=network.target

[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/opt/mariadb/bin/mysqld_safe --defaults-file=/etc/mariadb/my.cnf &
ExecStop=/opt/mariadb/bin/mysqladmin -u root shutdown
LimitNOFILE=65535
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# Habilitar e iniciar el servicio
systemctl daemon-reload
systemctl enable mariadb-custom
systemctl start mariadb-custom

Configuración de variables de entorno

Añada los binarios de MariaDB al PATH del sistema para facilitar su administración.

echo 'export PATH=/opt/mariadb/bin:$PATH' > /etc/profile.d/mariadb.sh
source /etc/profile.d/mariadb.sh

Verificación de la integración de jemalloc

Para confirmar que el servidor está utilizando correctamente el asignador de memoria alternativo, inspeccione los procesos en ejecución.

# Obtener el PID del proceso mysqld y verificar las bibliotecas cargadas
MARIADB_PID=$(pgrep -x mysqld)
lsof -p $MARIADB_PID | grep jemalloc

La salida debería mostrar que libjemalloc.so está mapeada en la memoria del proceso, confirmando que la optimización está activa.

Etiquetas: MariaDB centos jemalloc cmake systemd

Publicado el 7-1 03:38