CentOS 8环境下部署MySQL集群与大模型服务(Ollama)的性能调优指南

云信安装大师
90
AI 质量分
11 5 月, 2025
3 分钟阅读
0 阅读

CentOS 8环境下部署MySQL集群与大模型服务(Ollama)的性能调优指南

引言

在现代AI应用开发中,数据库集群和大模型服务的协同部署已成为常见需求。本文将指导您在CentOS 8系统上部署高可用的MySQL集群,并集成Ollama大模型服务,同时提供关键的性能调优策略。

准备工作

环境要求

  • CentOS 8服务器(建议至少2台用于集群)
  • root或sudo权限
  • 最小硬件配置:
    • CPU: 4核以上
    • 内存: 16GB以上(大模型需要更多)
    • 存储: SSD硬盘50GB以上

前置知识

  • Linux基础命令操作
  • MySQL基本概念
  • Docker基础(用于Ollama部署)

Part 1: MySQL集群部署与调优

1.1 安装MySQL服务器

代码片段
# 添加MySQL官方仓库
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm

# 禁用默认的MySQL模块(CentOS8特有步骤)
sudo dnf module disable mysql

# 安装MySQL服务器
sudo dnf install -y mysql-server mysql-shell mysql-router

1.2 配置InnoDB集群

首先在主节点上初始化集群:

代码片段
# 启动MySQL服务
sudo systemctl enable --now mysqld

# 获取临时密码
sudo grep 'temporary password' /var/log/mysqld.log

# 安全设置(设置root密码等)
sudo mysql_secure_installation

# 登录MySQL Shell
mysqlsh

# InnoDB集群配置脚本(在MySQL Shell中执行)
\connect root@localhost
dba.configureInstance('root@localhost')
var cluster = dba.createCluster('ai_cluster')
cluster.addInstance('root@node2:3306') # 添加从节点
cluster.status() # 检查集群状态

关键参数调优:编辑/etc/my.cnf

代码片段
[mysqld]
# InnoDB缓冲池大小(建议物理内存的50-70%)
innodb_buffer_pool_size = 8G

# IO性能优化(SSD适用)
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_flush_neighbors = 0

# CPU多线程优化
innodb_read_io_threads = 16
innodb_write_io_threads = 16

# Group Replication参数调整(集群专用)
group_replication_flow_control_mode = "DISABLED"
group_replication_transaction_size_limit = 209715200

Part 2: Ollama大模型服务部署

2.1 Docker环境准备

代码片段
# 安装Docker CE
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io

# Docker权限和启动设置
sudo systemctl enable --now docker
sudo usermod -aG docker $USER && newgrp docker

# NVIDIA驱动检查(GPU加速需要)
nvidia-smi # GPU用户执行此命令检查驱动状态

# NVIDIA容器工具包安装(可选,GPU用户需要)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
sudo dnf install -y nvidia-container-toolkit nvidia-docker2 

2.2 Ollama服务部署与模型加载

代码片段
# Ollama官方容器部署(CPU版本):
docker run -d --name ollama \
    -p11434:11434 \
    --restart always \
    ollama/ollama

# GPU版本使用此命令:
docker run -d --gpus all --name ollama \
    -p11434:11434 \
    --restart always \
    ollama/ollama

# Pull常用模型(以Llama3为例):
docker exec ollama ollama pull llama3:8b-instruct-q4_K_M

# API测试:
curl http://localhost:11434/api/generate -d '{
    "model": "llama3:8b-instruct-q4_K_M",
    "prompt": "为什么天空是蓝色的?",
    "stream": false,
    "options": {
        "temperature":0.7,
        "num_predict":128,
        "top_k":40,
        "top_p":0.9,
        "repeat_penalty":1.1,
        "seed":42,
        "num_threads":8 # CPU线程数调整点!
    }
}'

Ollama性能调优参数说明:

参数 推荐值 作用说明
num_threads CPU核心数 CPU并行计算线程数
temperature [0.7,1.0] 控制生成随机性
top_k [20,60] 候选词筛选范围
num_predict [128,512] 最大预测token数

Part3:系统级性能优化

CPU调度策略优化:

代码片段
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor >/dev/null 

#持久化设置:
sudo dnf install tuned-profiles-cpu-partitioning -y 
echo 'isolated_cores=2-'$(($(nproc)-1)) | sudo tee /etc/tuned/cpu-partitioning-variables.conf >/dev/null 
sudo tuned-adm profile cpu-partitioning 

NUMA内存分配优化:

代码片段
numactl --hardware #查看NUMA节点分布 

# MySQL启动脚本修改示例: 
ExecStart=/usr/bin/numactl --interleave=all /usr/sbin/mysqld $MYSQLD_OPTS 

# Ollama容器启动参数增加: 
--cpuset-cpus="0-7" \ 
--cpuset-mems="0" \ 
--ulimit memlock=-1:-1 \ 

Part4:集成测试与监控方案

Prometheus监控配置示例:

代码片段
scrape_configs:

- job_name: 'mysql'
static_configs:
targets:
['node1:9104', 'node2:9104'] # mysqld_exporter端口

- job_name: 'ollama'
metrics_path: '/metrics'
static_configs:
targets:
['ollama-host:11434']

Grafana看板关键指标:

  • 数据库层:QPS、连接数、复制延迟、缓冲池命中率
  • Ollama层:推理延迟、显存占用、Token生成速率
  • 系统层:CPU利用率(尤其是用户态)、内存交换情况

Part5:常见问题解决方案

Q1:MySQL组复制出现脑裂怎么办?

A:优先使用cluster.forceQuorumUsingPartitionOf()恢复多数派

Q2:Ollama加载大模型时OOM?

A:尝试以下方案:

代码片段
docker update ollama --memory-swap=-1 --memory=12g #限制内存用量  
ollama pull llama3:8b-instruct-q4_K_S #换用量化级别更高的模型  

Q3:CentOS8特有的SELinux导致问题?

A:审计日志分析+针对性策略调整:

代码片段
ausearch -m avc -ts recent | audit2allow -M mypolicy  
semodule -i mypolicy.pp  

Final总结

本文完整实现了以下技术栈的集成与调优:

高可用数据库层:InnoDB Cluster + Router实现读写分离
高效推理服务:Ollama容器化部署+量化模型加载
全链路监控:Prometheus+Grafana可视化监控

关键性能杠杆点回顾:
🔧 innodb_buffer_pool_size : DB性能第一参数
🔧 num_threads : CPU推理的核心调节项
🔧 tuned-adm profile : Linux内核调度优化利器

建议后续扩展方向:
🛠️ MySQL Router中间件实现自动故障转移
🛠️ vLLM等高性能推理框架的对比测试

原创 高质量