我的世界服务器部署,配置Web监控并在Web页面实现一键启动。

服务端最低配置要求:2U4G 带宽5M

操作环境Centos7.6

以上配置是经过调校测试得出的,并且预计可提供2-8名玩家同时在线。

玩家人数虽服务器的运行时间而逐渐变小,根据观察,游戏地图是根据种子文件即时运算生成的,所以游戏将会越来越大,而且由于物体变多,带宽占用也会越来越高。


部署我的世界服务端:

下载服务器包:https://mcversions.net/

建议在服务器创建目录/mcsr,将服务器包放入目录。

在同级目录创建配置文件:(server.properties)

#Minecraft server properties
#Mon Sep 14 19:41:45 CST 2020
spawn-protection=16
max-tick-time=60000
query.port=25565
generator-settings=
sync-chunk-writes=true
force-gamemode=false
allow-nether=true
enforce-whitelist=false
gamemode=survival
broadcast-console-to-ops=true
enable-query=false
player-idle-timeout=0
difficulty=easy
spawn-monsters=true
broadcast-rcon-to-ops=true
op-permission-level=4
pvp=true
entity-broadcast-range-percentage=100
snooper-enabled=true
level-type=default
hardcore=false
enable-status=true
enable-command-block=true
max-players=20
network-compression-threshold=256
resource-pack-sha1=
max-world-size=29999984
function-permission-level=2
rcon.port=25575
server-port=25565
debug=false
server-ip=
spawn-npcs=true
allow-flight=false
level-name=world
view-distance=10
resource-pack=
spawn-animals=true
white-list=false
rcon.password=
generate-structures=true
online-mode=true
max-build-height=256
level-seed=
prevent-proxy-connections=false
use-native-transport=true
enable-jmx-monitoring=false
motd=A Minecraft Server
enable-rcon=false

配置文件说明参考:

https://aibofan.com/minecraft-fu-wu-duan-mu-lu-jie-gou-pei-zhi-wen-jian-shuo/

中文游戏手册中也有说明:

https://minecraft-zh.gamepedia.com/Minecraft_Wiki


使用如下命令可启动服务器:(此命令按照4G内存修改,不同的服务器性能需要进行相应的修改!)

java -Xms512M -Xmx3500M -XX:+UseG1GC -server -XX:+UseFastAccessorMethods -XX:+OptimizeStringConcat -XX:+AggressiveOpts -XX:MaxGCPauseMillis=10 -XX:+UseStringDeduplication -XX:+UseCompressedOops -jar server.jar -nogui

性能较低的服务器会时不时发生崩溃,建议在同级目录编写脚本:

#!/bin/bash
while :
do
java -Xms512M -Xmx3500M -XX:+UseG1GC -server -XX:+UseFastAccessorMethods -XX:+OptimizeStringConcat -XX:+AggressiveOpts -XX:MaxGCPauseMillis=10 -XX:+UseStringDeduplication -XX:+UseCompressedOops -jar server.jar -nogui
sleep 10
done

启动方式:

cd /mcsr
nohup ./start.sh > ./log.txt &

日志将会输出至当前目录下的log.txt,滚动查看使用tail命令。


部署前台监控页面:

效果图:

image.png

安装Nginx用作前台显示。

Nginx安装参考:https://teddyou.cn/?id=76 (做到编译安装完成即可)

或使用Apache的HTTP也行,但是本文不做演示。


进入html目录/usr/local/nginx/html/

编写监控输出脚本:

#!/bin/bash
cd /usr/local/nginx/html/
#运行状态判断
#if [ `ss -nutlp|grep :25565|wc -l` -eq 1 ] ;then
#echo '正常'
#else
#echo '异常'
#fi

#带宽统计
RX=$(expr `ifconfig eth0 |grep "RX packets"|awk '{print $5}'` - `cat /usr/local/nginx/html/rx.txt`)
TX=$(expr `ifconfig eth0 |grep "TX packets"|awk '{print $5}'` - `cat /usr/local/nginx/html/tx.txt`)
echo `ifconfig eth0 |grep "RX packets"|awk '{print $5}'` > /usr/local/nginx/html/rx.txt
echo `ifconfig eth0 |grep "TX packets"|awk '{print $5}'` > /usr/local/nginx/html/tx.txt

#写入index.hl
echo "<br><b>我的世界服务器状态</b>">/usr/local/nginx/html/index.html
echo "<br>刷新时间:`date`">>/usr/local/nginx/html/index.html
echo "<br>连接数:`netstat -anp | grep ESTABLISHED |grep 172.30.0.9:25565|wc -l`">>/usr/local/nginx/html/index.html
echo "<br>当前连接IP:`netstat -anp | grep ESTABLISHED |grep 172.30.0.9:25565|awk '{print $5}'|awk -F: '{print $1}'`">>/usr/local/nginx/html/index.html
echo "<br>CPU负载情况:`uptime|awk '{print $8,$9,$10,$11,$12}'`(大于1.6则可能出现问题)">>/usr/local/nginx/html/index.html
echo "<br>内存total:`free -m|grep Mem|awk '{print $2}'`">>/usr/local/nginx/html/index.html
echo "<br>内存used:`free -m|grep Mem|awk '{print $3}'`">>/usr/local/nginx/html/index.html
echo "<br>内存free:`free -m|grep Mem|awk '{print $4}'`">>/usr/local/nginx/html/index.html
echo "<br>内存buff/cache:`free -m|grep Mem|awk '{print $6}'`">>/usr/local/nginx/html/index.html
echo "<br>内存available:`free -m|grep Mem|awk '{print $7}'`">>/usr/local/nginx/html/index.html
#echo "<br>服务器程序状态:$(if [ `ss -nutlp|grep :25565|wc -l` -eq 1 ] ;then echo '正常'; else echo '异常';fi)">>/usr/local/nginx/html/index.html
#echo "<br>RX流量:`expr $RX / 1024 / 60`KB/S">>/usr/local/nginx/html/index.html
#echo "<br>TX流量:`expr $TX / 1024 / 60`KB/S">>/usr/local/nginx/html/index.html
echo "<br>此页面每分钟刷新一次<meta http-equiv="refresh" content="60">">>/usr/local/nginx/html/index.html
echo "<br><br><b><a href="http://139.186.4.14:8088/cgi-bin/kill_mc.sh">重启后台程序</a>(请不要反复重启,点击后请等待三分钟,页面提示错误为正常情况)</b>">>/usr/local/nginx/html/index.html
#echo "<br> ">>/usr/local/nginx/html/index.html
#scp /usr/local/nginx/html/index.html root@47.57.77.138:/usr/local/nginx/html/mc/zc.txt

此脚本主要是将内容输出给index.html,以方便查看。

启动Nginx

/usr/local/nginx/sbin/nginx

访问Web已经能看到相关内容的输出。


制作Web页面重启游戏程序链接:

需求场景:由于低性能服务器经常会出现问题,比如内容占满,CPU负载升高等情况,所以需要重启程序,以降低功耗,运维人员少,无法及时处理等情况,所以需要一个傻瓜式启动方法。而这个需要CGI来实现前端到后台的交互。

参考文档:https://blog.csdn.net/weixin_30496751/article/details/99595366

安装httpd:

yum install -y httpd

修改配置:

vim /etc/httpd/conf/httpd.conf

添加内容:

LoadModule cgi_module /usr/lib64/httpd/modules/mod_cgi.so
LoadModule cgid_module /usr/lib64/httpd/modules/mod_cgid.so

修改内容:(注意路径)

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order deny,allow
    Allow from all
</Directory>

取消注释:

    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
    AddHandler cgi-script .cgi .sh         //在其后添加.sh,使其支持此结尾的脚本

修改默认端口,防止与Nginx冲突:

Listen 8088

启动httpd

systemctl start httpd



在CGI目录下编写脚本:

[root@cq html]# cd /var/www/cgi-bin/
[root@cq cgi-bin]# ll
total 8
-rwxrwxrwx 1 root root 69 Sep  7 12:41 kill_mc.sh
[root@cq cgi-bin]# cat kill_mc.sh 
#!/bin/bash
kill -9 `ps -ef|grep java|grep -v grep|awk '{print $2}'`

注意要赋予777权限,或者修改用户以及用户组为apache并且添加x权限。因为是apache用户在执行操作。此脚本需要结合之前编写的循环启动脚本。

由于权限问题,之前循环启动脚本是root用户启动,导致apache用户无法启动,所以需要以apache身份启动mc程序:

[root@cq ~]# su apache
[apache@cq root]$ cd /mcsr/
[apache@cq mcsr]$ nohup ./start.sh > /log.txt &

若无法启动请注意当前目录的权限是否正确。

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。