阿里云2核1.5G内存ECS极限优化:5个高流量WordPress站数据库实战配置

阿里云2核1.5G内存ECS极限优化:5个高流量WordPress站数据库实战配置

本文实测阿里云2核1.5G内存ECS服务器,成功部署MariaDB 10.6+Redis 7.x,稳定支撑5个日IP 5000+的WordPress网站。分享完整配置与优化方案,小内存服务器也能发挥大能量!

 

最近接手一个项目,客户要求在阿里云2核1.5G内存的ECS上部署数据库和缓存服务,支撑5个WordPress网站,每个日IP 5000+。刚开始我也觉得这配置有点悬,但经过一番折腾和优化,居然真的稳定跑起来了!

说实话,这种配置下跑这么多网站,要是按照默认安装肯定秒崩。但经过针对性优化,完全能够稳定运行。下面我就把完整的安装、设置、优化过程分享给大家,避免你们踩我踩过的坑。

一、前期准备与环境配置

首先声明,我的测试环境是阿里云ECS(2核1.5G内存)+ Debian 11.8,关闭了所有防火墙(因为是纯内网环境)。重要提醒:如果是公网环境,千万不要直接关防火墙!

1.1 系统基础配置

先更新系统,安装必要的工具包:

 sudo apt update && sudo apt upgrade -y sudo apt install curl wget vim software-properties-common -y

1.2 关闭防火墙(仅限内网环境)

因为是内网环境,为了节省资源我们关闭防火墙(利用内网掩护和阿里云ECS的安全组完全可以替代常规端口防火墙):

 sudo ufw disable sudo systemctl stop iptables sudo systemctl disable iptables

再次强调:公网环境千万别这么干!不然分分钟被黑!

1.3 添加Swap空间

小内存服务器不加Swap就是自寻死路!特别是数据库服务,内存不够时Swap能救急:

 # 创建1GB的Swap文件 sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab # 调整Swappiness参数 echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf sudo sysctl -p

二、MariaDB 10.6安装与极限优化

MariaDB比MySQL更适合资源受限的环境,性能优化选项更多。但要是配置不当,分分钟吃光你的内存!

2.1 安装MariaDB 10.6

Debian 11默认源的MariaDB版本太老,我们需要添加官方仓库:

 # 安装依赖 sudo apt install apt-transport-https ca-certificates -y # 添加MariaDB官方仓库 sudo curl -o /etc/apt/trusted.gpg.d/mariadb-release-key.asc 'https://mariadb.org/mariadb_release_signing_key.asc' sudo sh -c "echo 'deb https://mirrors.aliyun.com/mariadb/repo/10.6/debian bullseye main' >> /etc/apt/sources.list.d/mariadb.list" # 更新并安装 sudo apt update sudo apt install mariadb-server mariadb-client -y

2.2 安全初始化

安装完成后必须进行安全设置,不然等着被爆破吧:

 sudo mysql_secure_installation

按照提示设置root密码、移除匿名用户、禁止root远程登录、移除测试数据库,一步步来别偷懒!

2.3 性能优化配置(核心内容)

接下来是重点!编辑配置文件 /etc/mysql/mariadb.conf.d/50-server.cnf,加入以下优化设置:

 [mysqld] # 基础设置 user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking # 字符集设置 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # 内存优化(1.5G内存专用配置,实测有效!) innodb_buffer_pool_size = 512M key_buffer_size = 64M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 8 max_connections = 50 table_open_cache = 1024 table_definition_cache = 1024 # 查询缓存优化(直接关闭,这玩意儿在MySQL 5.7后就是坑) query_cache_type = 0 query_cache_size = 0 # 日志配置 slow_query_log = 1 slow_query_log_file = /var/log/mysql/mariadb-slow.log long_query_time = 2 log_error = /var/log/mysql/error.log # 其他优化 innodb_flush_log_at_trx_commit = 2 innodb_log_file_size = 128M innodb_log_buffer_size = 8M innodb_flush_method = O_DIRECT innodb_file_per_table = 1 # 网络绑定(只在内网监听,安全第一!) bind-address = 192.168.1.100 # 你的ECS内网IP [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4

这些配置是我经过多次测试调整出来的,专门针对1.5G内存优化。特别是innodb_buffer_pool_size设置为512M,既能保证性能又不会导致内存耗尽。

2.4 创建数据库和用户

为5个WordPress网站创建专用数据库和用户:

 -- 登录MySQL mysql -u root -p -- 创建数据库 CREATE DATABASE wp_db1; CREATE DATABASE wp_db2; CREATE DATABASE wp_db3; CREATE DATABASE wp_db4; CREATE DATABASE wp_db5; -- 创建用户并授权(使用你的内网服务器IP) CREATE USER 'wp_user'@'192.168.1.101' IDENTIFIED BY 'StrongPassword123!'; -- 授权用户访问所有数据库 GRANT ALL PRIVILEGES ON wp_db1.* TO 'wp_user'@'192.168.1.101'; GRANT ALL PRIVILEGES ON wp_db2.* TO 'wp_user'@'192.168.1.101'; GRANT ALL PRIVILEGES ON wp_db3.* TO 'wp_user'@'192.168.1.101'; GRANT ALL PRIVILEGES ON wp_db4.* TO 'wp_user'@'192.168.1.101'; GRANT ALL PRIVILEGES ON wp_db5.* TO 'wp_user'@'192.168.1.101'; -- 刷新权限 FLUSH PRIVILEGES;

注意:密码不要用简单的,至少12位包含大小写字母、数字和特殊字符!

2.5 启动MariaDB服务

 sudo systemctl restart mariadb sudo systemctl enable mariadb sudo systemctl status mariadb

检查状态确认服务正常运行,如果有错误,查看日志文件 /var/log/mysql/error.log 进行排查。

三、Redis 7.x安装与优化

Redis作为缓存数据库,能极大减轻MySQL压力。但默认配置同样会吃光内存,必须进行优化。

3.1 安装Redis 7.x

Debian 11默认源的Redis版本较低,我们通过官方仓库安装新版:

 # 添加第三方仓库 curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list # 更新并安装 sudo apt update sudo apt install redis-server -y

3.2 Redis性能优化配置

编辑配置文件 /etc/redis/redis.conf,这是关键中的关键:

 # 网络绑定(只在内网监听) bind 192.168.1.100 # 你的ECS内网IP protected-mode yes port 6379 # 内存限制与策略(256MB是黄金值,再大系统就不稳定了) maxmemory 256mb maxmemory-policy allkeys-lru maxmemory-samples 5 # 持久化设置 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /var/lib/redis # 高级配置 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes supervised systemd # 性能优化 lazyfree-lazy-eviction yes lazyfree-lazy-expire yes lazyfree-lazy-server-del yes replica-lazy-flush yes # 日志配置 loglevel notice logfile /var/log/redis/redis-server.log # 数据库数量 databases 16 # 客户端输出缓冲区限制 client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 # 慢日志设置 slowlog-log-slower-than 10000 slowlog-max-len 128

maxmemory 256mb 这个设置很重要!再大了系统内存不够用,再小了缓存效果不好。经过测试,256MB对于5个WordPress网站是甜点值。

3.3 启动Redis服务

 sudo systemctl restart redis sudo systemctl enable redis sudo systemctl status redis

同样检查状态确认服务正常运行,如有问题查看 /var/log/redis/redis-server.log

四、WordPress端配置

在另一台服务器(192.168.1.101)上的WordPress网站,需要修改 wp-config.php 文件来连接我们的数据库和Redis:

 // 数据库连接设置 define('DB_NAME', 'wp_db1'); define('DB_USER', 'wp_user'); define('DB_PASSWORD', 'StrongPassword123!'); define('DB_HOST', '192.168.1.100'); // 你的ECS内网IP define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', ''); // Redis缓存配置(需要安装Redis缓存插件) define('WP_REDIS_HOST', '192.168.1.100'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_TIMEOUT', 1); define('WP_REDIS_READ_TIMEOUT', 1);

5个网站分别对应5个数据库,配置方法相同,只需修改DB_NAME为对应的数据库名。

五、性能监控与维护

部署完成后不是就完事了,必须定期监控和维护:

5.1 安装监控工具

 sudo apt install mytop htop -y

使用htop查看系统资源使用情况,mytop监控MySQL查询。

5.2 设置定期优化任务

创建数据库优化脚本 /usr/local/bin/mysql-optimize.sh

 #!/bin/bash mysql -u root -p你的密码 -e "OPTIMIZE LOCAL TABLE wp_db1.wp_options, wp_db1.wp_posts" >> /var/log/mysql-optimize.log # 添加其他需要优化的表...

设置定时任务,每天凌晨执行:

 # 编辑crontab crontab -e # 添加以下内容 0 3 * * * /usr/local/bin/mysql-optimize.sh 0 4 * * * /usr/local/bin/redis-cleanup.sh

六、常见问题与解决方案

在实际运行过程中,可能会遇到以下问题:

6.1 内存不足错误

如果发现内存不足,可以通过以下命令排查:

 # 查看内存使用情况 free -m # 查看MySQL内存使用 mysql -u root -p -e "SHOW VARIABLES LIKE '%buffer%';" # 查看Redis内存使用 redis-cli info memory

6.2 连接数过多

错误提示:”Too many connections”

临时解决方案:

 SET GLOBAL max_connections=300;

永久解决方案:调整my.cnf中的max_connections参数并重启MySQL。

6.3 Redis连接失败

检查以下几点:

  • Redis服务是否运行:sudo systemctl status redis
  • 配置中的IP地址是否正确
  • 查看Redis日志:tail -f /var/log/redis/redis-server.log

七、总结与建议

经过实测,阿里云2核1.5G内存的ECS确实能够支撑5个日IP 5000+的WordPress网站,但必须进行精细化优化。关键点在于:

  1. MariaDB内存配置要合理,innodb_buffer_pool_size不能太大也不能太小
  2. Redis必须设置内存上限,避免吃光所有内存
  3. 定期监控和维护,及时发现并解决问题
  4. 做好安全设置,特别是内网环境也不能掉以轻心

这种配置下,网站响应时间基本能保持在1-2秒内,数据库服务器负载平均在0.8-1.2之间,完全在可接受范围内。

如果流量继续增长,建议升级到4核4G内存的配置,或者考虑数据库读写分离。但对于中小型网站来说,这套方案已经完全够用了。

最后提醒一句,任何配置优化都需要根据实际业务情况进行调整,建议先在小流量环境下测试,确认稳定后再应用到生产环境。

版权声明:本文由万事屋原创发布,转载请注明出处,并保留指向https://www.rei3.com的链接。

请登录后发表评论

    没有回复内容

万事屋新帖