Ubuntu服务器运维指南:24/7稳定运行MySQL+Ollama的最佳实践

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

Ubuntu服务器运维指南:24/7稳定运行MySQL+Ollama的最佳实践

引言

在当今数据驱动的时代,数据库服务和大语言模型服务的稳定运行至关重要。本文将指导您如何在Ubuntu服务器上配置并维护MySQL数据库和Ollama大语言模型服务,确保它们能够7天24小时不间断稳定运行。

准备工作

环境要求

  • Ubuntu Server 22.04 LTS (推荐)
  • 至少4GB RAM (运行Ollama建议8GB以上)
  • 至少20GB可用磁盘空间
  • sudo权限的用户账户

前置知识

  • 基本的Linux命令行操作
  • MySQL基础概念
  • Docker基础知识(可选,用于Ollama部署)

第一部分:MySQL数据库的安装与优化

1. 安装MySQL服务器

代码片段
# 更新软件包列表
sudo apt update

# 安装MySQL服务器
sudo apt install mysql-server -y

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

注意事项
– 在安全配置向导中,建议禁用远程root登录和移除测试数据库
– 为生产环境设置强密码(至少12个字符,包含大小写字母、数字和特殊符号)

2. MySQL性能优化配置

编辑MySQL配置文件:

代码片段
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

添加或修改以下参数(根据您的服务器配置调整):

代码片段
[mysqld]
# 内存相关配置(假设服务器有8GB内存)
innodb_buffer_pool_size = 4G    # 通常设置为总内存的50-70%
innodb_log_file_size = 256M     # Redo日志大小
innodb_flush_log_at_trx_commit = 1   # ACID合规性保证

# I/O相关配置
innodb_flush_method = O_DIRECT   # Linux系统推荐值
innodb_read_io_threads = 8       # I/O读线程数(通常设置为CPU核心数)
innodb_write_io_threads = 8      # I/O写线程数(通常设置为CPU核心数)

# 连接相关配置
max_connections = 200            # MySQL最大连接数
wait_timeout = 300               # 非交互连接超时时间(秒)
interactive_timeout = 300        # 交互连接超时时间(秒)

# Query缓存(小规模应用可开启)
query_cache_type = ON            # Query缓存类型
query_cache_size = 64M           # Query缓存大小

# Binlog配置(如需主从复制则必须开启)
server-id = 1                    # MySQL实例ID(集群中唯一)
log_bin = /var/log/mysql/mysql-bin.log   # Binlog文件路径
binlog_format = ROW              # Binlog格式(Row模式最安全)
expire_logs_days = -7            # Binlog保留天数

保存后重启MySQL服务:

代码片段
sudo systemctl restart mysql

原理说明
这些参数优化了InnoDB存储引擎的性能,调整了I/O操作方式,并设置了合理的连接管理参数。innodb_buffer_pool_size是最关键的参数之一,它决定了InnoDB可以缓存多少数据和索引。

3. MySQL监控与维护

创建监控用户:

代码片段
CREATE USER 'monitor'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'monitor'@'localhost';
FLUSH PRIVILEGES;

设置定期维护任务(crontab -e):

代码片段
# MySQL每日备份(凌晨2点执行)
0 */2 * * * mysqldump -u root -pYourPassword --all-databases | gzip > /var/backups/mysql/$(date +\%Y-\%m-\%d).sql.gz

# MySQL状态检查每小时执行一次检查并记录到日志文件里(包括慢查询、锁等待等关键指标)
0 * * * * echo "SHOW GLOBAL STATUS LIKE 'Threads_connected'; SHOW PROCESSLIST; SHOW ENGINE INNODB STATUS\G" | mysql -u monitor -pStrongPassword123! > /var/log/mysql/monitor_$(date +\%Y\%m\%d\%H).log

# Binlog定期清理(每周日凌晨3点)
0 */3 * * */0 mysql -u root -pYourPassword -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL ${EXPIRE_LOG_DAYS} DAY);"

Ollama大语言模型的安装与优化

Ollama简介与安装准备

Ollama是一个本地运行大型语言模型的框架。在Ubuntu服务器上部署Ollama需要考虑GPU支持、内存管理和模型存储等因素。

Ollama安装方法一:原生安装(Official)

代码片段
curl -fsSL https://ollama.com/install.sh | sh

注意事项
– Ollama默认会安装在/usr/bin/ollama
– Ollama数据存储在~/.ollama目录下(可通过环境变量OLLAMA_MODELS修改)

Ollama安装方法二:Docker方式(推荐)

代码片段
# Docker安装(如果尚未安装)
sudo apt install docker.io docker-compose -y

# Ollama Docker容器启动(带GPU支持)
docker run -d --gpus=all \
    --name ollama \
    --restart always \
    -v ollama_data:/root/.ollama \
    -p11434:11434 \
    ollama/ollama:latest

    ##查看容器状态:
docker logs ollamadocker stats ollamadocker ps | grep ollamadocker exec -it ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamadocker exec ollamashow logs for the container:
docker logs <container_id>show stats for the container:
docker stats <container_id>show running containers:
docker psstop the container:
docker stop <container_id>start the container:
docker start <container_id>remove the container:
docker rm <container_id>remove the image:
docker rmi <image_id>pull a new image:
docker pull <image_name>run a command inside the container:
docker exec <container_id> <command>

原理说明
Docker方式提供了更好的隔离性和可移植性。--gpus=all参数启用了GPU加速(如果服务器有NVIDIA GPU),--restart always确保容器意外退出时自动重启。

Ollama模型管理

下载并运行Llama2模型示例:

代码片段
ollama pull llama2     #原生安装方式使用此命令 
docker exec -it ollama sh     ##进入容器后执行以下命令: 
ollamamodels list       ##列出可用模型 
ollamamodels download llama2   ##下载Llma2模型 
ollamamodels run llama2 "Hello world"   ##测试模型运行 
exit                   ##退出容器 

对于生产环境,建议下载更专业的商用授权模型如Mistral或CodeLlma等。

Ollama性能优化配置

创建配置文件~/.ollama/config.json(原生安装)或挂载到Docker容器中:

“`jsoncatechin{
“host”: “0.0.0.0”,
“port”:11434,

代码片段
// GPU相关设置(如果有NVIDIA GPU)
"nvidia": {
    "enabled": true,
    "device_ids": ["0"], //多GPU可指定多个设备ID

    // CUDA核心使用限制(百分比)
    "cuda_percent":80,

    //显存限制(MB)
    "memory_limit_mb":4096,

    // Tensor核心使用策略(auto/full/half/none) 
    "tensor_core_policy":"auto"
},

// CPU相关设置(无GPU时使用)
"cpu": {
    "threads":4,       // CPU线程数限制

    // AVX指令集加速(auto/enable/disable) 
    "avx":"auto",

    //内存限制(MB) 
    "memory_limit_mb":4096,

    //量化精度(fp32/fp16/int8/int4) 
    "quantization":"fp16"
},

//网络设置 
"network": {
    "timeout_ms":30000,      //请求超时时间

    //并发请求限制 
    "max_concurrent_requests":5,

    //长连接保持时间(s) 
    "keep_alive_timeout_s":60,

    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)  
    启用HTTP压缩(gzip/deflate/none)"compression":"gzip"
 },

 //日志设置 
 logging:{
      level:"info",       debug/info/warn/error/critical/fatal/silent?
      format:"json",      json/text?
      max_files:10,      最大日志文件数?
      max_size_mb:100     单个日志文件最大大小(MB)?
      path:"/var/log/ollma.log"?
      enable_stacktrace:true?
      enable_timestamp:true?
      enable_colors:false?   
  }

}

代码片段

保存后重启Ollma服务:

原生方式:

systemctl restart olmda.service?

代码片段
Dockr方式:

dockr restart olmdacontainername?

代码片段

##系统级监控与告警?

为确保24/7稳定运行需要建立全面的监控体系?

1.CPU、内存、磁盘I/O监控?

安装Prometheus Node Exporter:

wget https://github.com/prometheus/nodeexporter/releases/download/v*/nodeexporter-.-amd64.tar.gz?
tar xvfz nodeexporter*?
cd node
exporter*?
./node_exporter &?

或者直接apt安装:

sudo apt install prometheus-node-exporter?

然后systemctl enable prometheus-node-exporter && systemctl start prometheus-node-exporter?

代码片段
2.MySQL专用监控?

Percona PMM是一个强大的MySQL监控解决方案:

curl -fsSL https://raw.githubusercontent.com/percona/pmm/main/get-pmm.sh | bash?

或者Dockr方式:

dockr run –name pmm-server –restart always –network host percona/pmm-server:latest?

代码片段
3.Ollma健康检查脚本?

创建定期执行的健康检查脚本/etc/cron.hourly/check_ollma.sh:

!/bin/bash?

response=$(curl –silent –max-time30 http://localhost:11434/api/tags)?

if [[ “$response” == “” ]]; then?
echo “$(date): Ollma service down!” >> /var/log/ollmamonitor.log?
systemctl restart olmda || dockr restart olmda
container_name?
fi?

chmod +x /etc/cron.hourly/check_olma.sh?

代码片段
4.系统日志集中管理?

使用rsyslog将关键日志集中存储:

编辑/etc/rsyslog.conf添加:

$ModLoad imfile?

$InputFileName /var/log/mysql/error.log? $InputFileTag mysql-error:$InputFileStateFile mysql-error-state$InputFileSeverity error$InputFileFacility local7$InputRunFileMonitor?

$InputFileName /var/log/olma.log? $InputFileTag olma:$InputFileStateFile olma-state$InputFileSeverity info$InputFileFacility local6$InputRunFileMonitor?

local7.* @your-log-server:514local6.* @your-log-server:514?

然后重启rsyslog服务:sudo systemctl restart rsyslog.service?

“`

总结关键点回顾?

1.MySQL优化要点?:?-合理配置InnDB缓冲池大小?-优化I/O线程数量?-设置适当的连接超时和最大连接数?-定期维护包括备份和Binog清理?

2.Olma部署选择?:?-原生安装简单但隔离性差?-Dockr方式推荐用于生产环境?-注意GPU资源的合理分配?

3.监控体系?:?-系统级资源监控必不可少?-应用层健康检查不可忽视?-集中式日志管理便于问题排查?

4.高可用考虑?:?-考虑数据库主从复制?-考虑负载均衡多个Olma实例?-实施自动化故障转移机制?

通过以上实践您的Ubuntu服务器将能够24小时稳定运行MySL和Olma服务为业务提供可靠支持!

原创 高质量