一、为什么需要“高可用性”?
玩家流失率高?服务器频繁崩溃?本文将教你打造一个24小时不宕机、抗攻击、易扩展的奇迹MU,适合已掌握基础架设的玩家进阶学习。
二、高可用性服务器的核心要素
硬件冗余
双机热备:准备两台服务器,主服务器故障时自动切换备用机(需使用Keepalived或云服务负载均衡)。
分布式存储:将数据库和游戏数据同步到多台服务器(推荐使用rsync或云存储)。
网络优化
BGP多线接入:使用多运营商线路(电信+网通+移动),减少玩家延迟。
CDN加速:静态资源(如地图文件、客户端)通过CDN分发,降低服务器带宽压力。
安全防护
DDoS防御:部署Cloudflare或阿里云高防IP,过滤恶意流量。
数据库加密:对MySQL用户密码进行SHA-256加密,防止拖库攻击。
三、实战:搭建双机热备服务端
步骤1:配置主从服务器
主服务器(IP: 192.168.1.100)
安装MySQL并开启二进制日志(修改my.cnf):
server-id=1
log-bin=mysql-bin
导出初始数据库:mysqldump -u root -p mirdb > mirdb.sql
从服务器(IP: 192.168.1.101)
同步主服务器数据:
mysql -u root -p mirdb < mirdb.sql
配置从库监听:
server-id=2
relay-log=mysql-relay-bin
read-only=1
步骤2:自动故障切换(使用Keepalived)
在两台服务器安装Keepalived:
apt-get install keepalived # Debian/Ubuntu
yum install keepalived # CentOS
编辑配置文件/etc/keepalived/keepalived.conf:
vrrp_instance VI_1 {
virtual_router_id 51
interface eth0
virtual_ipaddress {
192.168.1.1000/24 # 虚拟IP(VIP)
priority 100 # 主服务器优先级更高
启动服务:systemctl start keepalived
效果:当主服务器宕机时,VIP自动漂移到从服务器,玩家无感知切换。
四、防御常见攻击实战
抵御CC攻击(刷怪脚本滥用)
方案:限制同一IP的请求频率
使用iptables拦截高频连接:
iptables -A INPUT -p tcp --dport 7100 -m connlimit --connlimit-above 50 -j DROP
在登录器代码中加入验证码(如Google reCAPTCHA)。
防止数据库被爆破
方案:强制复杂密码 + 登录失败锁定
修改MySQL配置my.cnf:
plugin-load-add = auth_socket.so
password_history = 6 # 强制密码包含大小写、数字、符号
使用Fail2ban自动封禁多次登录失败的IP:
fail2ban-client set sshd banip 192.168.1.200
五、性能优化:从单机到集群
数据库读写分离
工具:MySQL Proxy或ProxySQL
配置示例:
-- 将读操作分流到从库
SELECT * FROM player_data --> 从库IP:3306
UPDATE player_data SET hp=100 --> 主库IP:3306
游戏服务端负载均衡
工具:Nginx反向代理(TCP层转发)
stream {
upstream mir_servers {
server 192.168.1.100:7100;
server 192.168.1.101:7100;
server {
listen 7100;
proxy_pass mir_servers;
}
六、法律与运维风险提示
数据备份强制要求
每日全量备份 + 每小时增量备份(使用cron定时任务):
mysqldump -u root -p mirdb | gzip > /backup/mirdb_$(date +%F).sql.gz
应急预案
准备备用域名和服务器,防止主域名被封禁。
定期测试灾备流程(模拟服务器断电、数据库崩溃场景)。
