1.
概述:为什么要在日本VPS做专门调优
- 说明:日本VPS相对延迟低,但多数为低配或共享 IO,合理配置数据库与缓存可以显著提升响应速度和并发能力。
- 要点:IO、内存分配、持久化策略与连接池优先级最高。
2.
步骤总览:先规划再动手
- 步骤:1) 确认VPS规格(CPU、内存、磁盘类型/IOPS、网络带宽);2) 选择数据库类型(MySQL/MariaDB或Postgres);3) 预留内存用于缓存(Redis/memcached);4) 配置监控与备份。
- 工具:ssh、htop、iostat、fio、sysbench、pgbench、redis-benchmark。
3.
文件系统与内核优化(实际命令)
- 挂载建议:如果是SSD,/etc/fstab 使用 noatime 并禁用数据写入同步(视场景):例如 UUID=xxx / ext4 defaults,noatime,discard 0 1。
- 内核参数(执行为root):
sysctl -w vm.swappiness=10
sysctl -w vm.dirty_ratio=15
sysctl -w vm.dirty_background_ratio=5
echo "vm.swappiness=10" >> /etc/sysctl.conf
- I/O 调度器(在旧内核可设置):echo noop > /sys/block/sda/queue/scheduler。
4.
MySQL/MariaDB 实际配置示例
- 安装(Ubuntu/Debian):apt update && apt install -y mysql-server 或 mariadb-server。
- 编辑 /etc/mysql/my.cnf 或 /etc/mysql/conf.d/custom.cnf,关键配置示例:
innodb_buffer_pool_size=70%RAM(例如4GB内存则设置3G)
innodb_flush_method=O_DIRECT
innodb_log_file_size=512M
innodb_file_per_table=1
max_connections=200(根据应用设定)
skip-name-resolve=1
query_cache_type=0(MySQL5.7+ 建议关闭)
- 重启:systemctl restart mysql && tail -n50 /var/log/mysql/error.log。
5.
PostgreSQL 实际配置示例
- 安装:apt install -y postgresql。
- 编辑 postgresql.conf 重点:
shared_buffers = 25%RAM(例如16GB则可设置4GB)
effective_cache_size = 50%-75%RAM
work_mem = 根据并发查询调整(例如 16MB)
maintenance_work_mem = 256MB
checkpoint_completion_target = 0.7
wal_buffers = 16MB
synchronous_commit = off(对容错有要求时慎用)
- 重启并使用 pg_stat_statements 扩展观察慢查询。
6.
Redis 缓存配置与持久化策略
- 安装:apt install -y redis-server。编辑 /etc/redis/redis.conf:
maxmemory <根据需求,例如 1G>
maxmemory-policy volatile-lru 或 allkeys-lru
appendonly no(需要持久化则设置 yes 并调整 appendfsync everysec)
vm.overcommit_memory=1(sysctl -w vm.overcommit_memory=1)
tcp-backlog 511
supervised systemd
- 启动并测试:redis-benchmark -q -n 100000 -c 50 set。
7.
连接池与中间件(ProxySQL、PgBouncer)
- MySQL/ProxySQL:安装 ProxySQL,配置后端 MySQL host、用户映射、Query rules,用于连接复用与故障转移。示例命令见 ProxySQL 文档。
- PostgreSQL/PgBouncer:安装 pgbouncer,配置 pgbouncer.ini 指定 pool_mode = transaction,设置 max_client_conn 与 default_pool_size,重启并把应用指向 pgbouncer 端口。
8.
HTTP 层缓存:Varnish 与 Nginx FastCGI 缓存实践
- Varnish:apt install varnish,编辑 default.vcl 定义后端与缓存策略(缓存静态资源、设置 TTL、处理 Cookie)。后端为本地 Nginx。
- Nginx FastCGI 缓存:在 server/location 中使用 fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYCACHE:100m inactive=60m max_size=1g; 并在 location 中 fastcgi_cache MYCACHE; fastcgi_cache_valid 200 302 10m;
9.
基准测试与验证(命令与流程)
- 磁盘IO:fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60 --group_reporting。
- MySQL:sysbench oltp_read_write --threads=50 --time=60 --mysql-db=test --mysql-user=root prepare/run/cleanup。
- PostgreSQL:pgbench -c 50 -T 60 -U postgres test。
- Redis:redis-benchmark -t get,set -n 100000 -c 50。
10.
监控与日志:推荐工具与配置
- 推荐:Percona Monitoring and Management (PMM)、Netdata、Prometheus + Grafana。
- 配置采集重要指标:CPU、IOPS、queue、innodb metrics、pg_stat、redis info。设置告警阈值如长时间 IO 等待或内存耗尽。
11.
备份与高可用基本操作
- MySQL:使用 mysqldump 快照或 Percona XtraBackup 做物理备份,定时 cron 执行并上传到对象存储(如 AWS S3)。
- PostgreSQL:pg_basebackup 或 WAL 推送配置到备库。Redis:若启用 AOF,定期复制 AOF/RDB 文件到远端。
12.
安全与生产上线前检查清单
- 关闭不必要端口(ufw allow 22,80,443,3306/5432/6379 仅白名单IP),禁止 root 远程登录,启用 fail2ban,设置数据库用户最小权限,启用 TLS(如果需要)。
13.
Q1:在日本VPS上用低内存(1GB)能否同时跑 MySQL 和 Redis?
- 回答:理论可行但需严格内存分配。建议将 MySQL 调整为小型配置(innodb_buffer_pool_size 256-384M,max_connections 降至50),Redis 使用最大内存 256-384M 并启用 LRU。更优策略是把 Redis 放在独立实例或使用托管缓存。
14.
Q2:如何判断应该使用 Varnish 还是 Nginx FastCGI 缓存?
- 回答:若主要是 HTTP 静态/缓存 HTML 页面且需要高吞吐,Varnish 在缓存效率与速度上更优;若需要与 PHP-FPM 等紧密集成或同一台服务器资源受限,Nginx FastCGI 缓存配置更简单且更节省资源。
15.
Q3:调优后如何验证真实用户响应速度提升?
- 回答:结合基准测试(wrk/ab)和真实流量下的 APM/日志对比。先记录基线(平均响应时间、95/99 百分位、错误率),调优并部署后在相同时间窗口对比,同时观察 DB 慢查询与 cache hit rate(Redis/Varnish)。
来源:8日本VPS适合的数据库与缓存配置建议提升响应速度