软件简介:
服务器要求Intel 64位CPU 2G以上内存!本人测试一台INTEL 3.2CPU 2G内存服务器三个国家300人左右不卡!
此端差一个帐号管理程序,希望有能力的朋友研究出来!本版本为1.04完整官方征途服务端!
游戏服务器注意事项
一、硬件的安装
1、保证服务器风扇正常转动。
2、保证服务器各个提示灯是否正常。
3、开机察看服务器有无报警情况。
4、开机察看服务器能否正常启动(不插鼠标键盘的情况下)
二、系统的安装
安装RHEL 4.0
选择自动分区。
分别给2块网卡配置ip,方便以后配置。
不启用防火墙。
增加中文语言包。
选择软件包时,只选择开发包.
三、系统的简单设置
1、防火墙的简单设置:
vi /etc/rc.d/forward
内容:
#!/bin/bash
/sbin/iptables -F
/sbin/iptables -F -t nat
/sbin/depmod -a
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#sshd
/sbin/iptables -A INPUT -s 218.80.198.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.0.0/16 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
#ftp server
#/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -j DROP
保存后退出。
chmod 744 /etc/rc.d/forward
然后运行防火墙脚本,以后根据需求修改脚本。
2、设置系统自动启动防火墙
vi /etc/rc.d/rc.local
增加一行
/etc/rc.d/forward
保存后退出
3、设置文件打开数
1) 修改/etc/security/limits.conf 增加2行:
* soft nofile 4096
* hard nofile 65535
2) 修改/etc/pam.d/login 增加1行
session required pam_limits.so
可用:
echo * soft nofile 4096 /etc/security/limits.conf
echo * hard nofile 65535 /etc/security/limits.conf
echo session required pam_limits.so /etc/pam.d/login
4、修改默认语言
vi /etc/sysconfig/i18n 修改
LANG=zh_CN.GB2312
新建游戏运行用户ztgame,设置密码
useradd ztgame
passwd ztgame
用ztgame用户登录服务器,修改vi /home/ztgame/.bash_profile增加一行
ulimit c unlimited
保存后退出。
四、游戏环境的搭建(按照4台网关服务器,5台场景服务器,1台数据库服务器的构架)
1、服务器IP设置
4台网关服务器配置外网ip和内网ip,5台场景服务器和数据库服务器只配置内网ip,并且服务器默认网关为第一台网关服务器的内网ip。
服务器以服务器应用-序号-机房序号命名(例GWServer01-CHJ01)。
修改/etc/hosts。
例子:
127.0.0.1 GWServer01-CHJ01 localhost.localdomain localhost
192.168.100.101 GWServer02-CHJ01
192.168.100.104 ScenServer01-CHJ01
192.168.100.109DBServer-CHJ01
2、公钥的生成
在ztgame的用户下登陆第一台网关服务器,输入ssh-keygen -t dsa
接受 ~/.ssh/id_dsa 的默认位置。输入一个与你的帐号口令不同的口令句,再输入一次来确认。公钥被写入 ~/.ssh/id_dsa.pub。密钥被写入 ~/.ssh/id_dsa。
使用以下命令改变你的 .ssh 目录的许可权限:
chmod 755 ~/.ssh
把 ~/.ssh/id_dsa.pub用scp命令传到其它剩余9台服务器
scp~/.ssh/id_dsa.pub ztgame@192.168.102.108:~/.ssh/authorized_keys
在其它9台服务器下使用以下命令改变你的 authorized_keys 文件的许可权限:
chmod 755 ~/.ssh
chmod 644 ~/.ssh/authorized_keys
3、数据库服务器的安装
#首先确定你是root用户
获得mysql-4.1.*.tar包,用tar zxvf mysql-4.1.*tar解开压缩包,然后进入mysql-4.1.*目录
#根据体统类型选择编译方式
#i386体系结构的
CFLAGS=-O3 -mcpu=pentiumpro CXX=gcc CXXFLAGS=-O3 -mcpu=pentiumpro -felide-constructors -fno-exceptions -fno-rtti ./configure --with-raid --enable-thread-safe-client --enable-assembler --with-server-suffix = for MySQL Database of Zebra by Yhc --without-debug --with-extra-charsets=none --without-isam --disable-shared --with-mysqld-ldflags=-all-static --prefix=/usr/local/mysql --without-bench
#64位系统,x86_64
CFLAGS=-O3 -m64 CXX=gcc CXXFLAGS=-O3 -m64 -felide-constructors -fno-exceptions -fno-rtti ./configure --with-raid --enable-thread-safe-client --enable-assembler --with-server-suffix = for MySQL Database of Zebra by Yhc --without-debug --with-extra-charsets=none --without-isam --disable-shared --with-mysqld-ldflags=-all-static --prefix=/usr/local/mysql --without-bench
#然后根据CPU数量进行编译
make -j 4 PATH=\/usr/local/mysql/bin:\$PATH\ /etc/profile /usr/local/mysql/bin:$PATH
#strip可执行文件
strip /usr/local/mysql/libexec/mysqld
#添加LIB PATH
echo /usr/local/mysql/lib /etc/ld.so.conf mysql_install_db
#启动服务器
su - mysql -c mysqld_safe --skip-name-resolve --open-files-limit=4096
#创建数据库和用户
GRANT ALL PRIVILEGES ON *.* TO ztgame@'192.168.1.%' IDENTIFIED BY '' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO ztgame@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO ztgame@'222.212.121.119' IDENTIFIED BY '' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO ztgame@'222.212.121.119' IDENTIFIED BY '' WITH GRANT OPTION;
4、数据库配置
用mysql进入,然后用create database dbname创建数据库。分别创建SuperServer、RecordServer、Bill数据库,然后用安装包目录下的*.sql的文件建立相应的表。(SessionServer.sql也导入到RecordServer库中)。
在SuperServer数据库SERVERLIST表内添加服务器配置信息。
例子:
INSERT INTO `SERVERLIST` VALUES (1,1,'SuperServer','192.168.1.130',10000,'192.168.1.130',10000);
INSERT INTO `SERVERLIST` VALUES(20,20,'SessionServer','192.168.1.130',6000,'192.168.1.130',6000);
INSERT INTO `SERVERLIST` VALUES(21,21,'SceneServer','192.168.1.130',6010,'192.168.1.130',6010);
INSERT INTO `SERVERLIST` VALUES(22,21,'SceneServer','192.168.1.130',6011,'192.168.1.130',6011);
INSERT INTO `SERVERLIST` VALUES(23,21,'SceneServer','192.168.1.130',6012,'192.168.1.130',6012);
INSERT INTO `SERVERLIST` VALUES(24,21,'SceneServer','192.168.1.130',6013,'192.168.1.130',6013);
INSERT INTO `SERVERLIST` VALUES(25,21,'SceneServer','192.168.1.130',6014,'192.168.1.130',6014);
INSERT INTO `SERVERLIST` VALUES(2200,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);
INSERT INTO `SERVERLIST` VALUES(2201,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);
INSERT INTO `SERVERLIST` VALUES(2202,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);
INSERT INTO `SERVERLIST` VALUES(2203,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);
INSERT INTO `SERVERLIST` VALUES(11,11,'RecordServer','192.168.1.130',7010,'192.168.1.130',7010);
INSERT INTO `SERVERLIST` VALUES(12,12,'BillServer','192.168.1.130',7020,'192.168.1.130',7020);
数据库服务器上跑SuperServer、SessionServer、RecordServer、BillServer四个服务,4个网关服务器分别跑4个网关服务,5个场景服务器分别跑5个场景服务。场景服务器对应的ID就是国家配置的ID号,这个ID号决定场景服务器上面跑几个国家。
五、服务端的配置和安装
1、获得安装包:
release-version.tar.bz2
map-version.tar.bz2
在/home/ztgame下建立以时间为名字的目录(game20050928),压缩包放入此目录,然后用tar jxvf release-version.tar.bz2 和tar jxvf map-version.tar.bz2解开压缩包
进入release目录,cp rf ../map .
按照config.xml.example格式创建文件config.xml
配置文件主要定义了服务器的各种参数:
[global]这段主要定义了通用参数,如服务器本地网络设备名称,扩展网络设备名称,日志级别,SuperServer的服务器地址,端口等参数。
其他各个段定义了具体的服务参数,主要是指定该服务对应的数据库,数据库的连接地址,端口,用户名,密码等数据库连接字符串。每个服务可以定义日志文件的存放位置,如果没有指定,缺省放置在/tmp/目录下面。
如SuperServer服务
SuperServer
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--
mysqlmysql://test:123456@192.168.2.14:3306/SuperServer/mysql
logfilename/home/test/tmp/superserver.log/logfilename
/SuperServer
上面配置指明SuperServer服务,采用连接串用户名test,密码123456,访问192.168.2.14服务器上3306端口下SuperServer数据库,日志文件存放在/home/test目录下。其他服务配置类似。
例子:
?xml version=1.0 encoding=GB2312?
!--所有各种服务器参数--
Zebra
global
!-- Specify the log level[debug,info,warning,error,fatal,always]. --
logdebug/log
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--
!-- Use the specified local network device. --
ifnameeth0/ifname
!-- Connected to the specified supserserver, property 'port' default value is 10000. --
superserver port=10000192.168.104.109/superserver
/global
SuperServer
!-- 统一用户平台登陆服务器列表文件 --
loginServerListFileloginServerList.xml/loginServerListFile
!-- 角色名称唯一性验证服务器的地址 --
RoleregServer port=9901218.80.198.252/RoleregServer
!-- 服务器信息采集的服务器地址 --
InfoServer port=9903218.80.198.252/InfoServer
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--
mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/SuperServer/mysql
!-- 如果要编码mysql连接字符串请使用工具,配置如下面的例子
mysql encode=yeslmOf.1kySwS0a09j11xyCdI1ySujl1hnCvT0hDitT0hjzv00gzSv00gDSw91tS9fE1/mysql
--
logfilename/log/superserver.log/logfilename
/SuperServer
RecordServer
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--
mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/RecordServer/mysql
logfilename/log/recordserver.log/logfilename
/RecordServer
BillServer
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--
mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/Bill/mysql
logfilename/log/billserver.log/logfilename
/BillServer
BillClient
!-- 交易记录log文件路径 --
tradelogfilename/log/clienttrade.log/tradelogfilename
/BillClient
SessionServer
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--
mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/RecordServer/mysql
logfilename/log/sessionserver.log/logfilename
dare_active_time3600/dare_active_time
offlineMsgPath/log/offlineMessages/offlineMsgPath
/SessionServer
ScenesServer
sceneinfofilescenesinfo.xml/sceneinfofile
npctradefilenpctrade.xml/npctradefile
messageSystemFilemessageSystem.xml/messageSystemFile
charinitinfoFileinitcharinfo.xml/charinitinfoFile
magicrangeFilemagicrangefile.xml/magicrangeFile
questdirquest//questdir
mapdirmap//mapdir
tbldirmap//tbldir
gm_logfile/log/gm_log.log/gm_logfile
!--回写档案平率(单位是秒) --
writebacktimer300/writebacktimer
ossdir/log//ossdir
logfilename/log/scenesserver.log/logfilename
/ScenesServer
GatewayServer
!-- 国家排序方式 0:不排序 , 1:在线人数排序 , 2:注册人数排序 --
countryorder2/countryorder
logfilename/log/gatewayserver.log/logfilename
sceneinfofilescenesinfo.xml/sceneinfofile
rolereg_verify1/rolereg_verify
forbidWordsFileforbidWords/forbidWordsFile
/GatewayServer
/Zebra
注意存放日至的目录是否建立,以及建立session服务所要求的日志存放子目录offlineMessages。
修改loginServerList.xml,填入平台中心的FLServer服务器ip以及端口。
例子:
?xml version=1.0 encoding=GB2312?
LoginServerList
server ip=218.80.198.252 port=7001/
server ip=210.22.188.20 port=7001/
/LoginServerList
然后将修改好的版本传至其它9台服务器。并启动服务
六、服务器的启动,停止和更新
1、将运行脚本传至各个服务器。
2、开启游戏服务
通过ssh使用ztgame用户远程连接至第一台网关服务器,再通过网关服务器连接其他9台服务器,
10个窗口内分别进入最新的服务端存放目录/home/ztgame/game200508**/release/
数据库服务器 启动服务./SuperServer -d 和 ./SessionServer -d 和 ./RecordServer -d 和 ./BillServer -d
场景服务器 启动服务./ScenesServer -d
网关服务器 启动服务./GatewayServer -d
以上操作可以通过/home/ztgame/tools/allstart game200508**来启动(由于程序是后台运行,所以如发现程序运行时间过长,可以CTRL+c中断,并不影响程序的正常运行。)
3、停止游戏服务
通过ssh使用ztgame用户远程连接至第一台网关服务器,运行/home/ztgame/tools/allstop,中止所有服务
,此脚本是并不是强行杀进程,所以如果发现进程无法kill的情况,用/home/ztgame/tools/allstop_9来强行杀死进程。
4、查看游戏服务
通过ssh使用ztgame用户远程连接至第一台网关服务器,运行/home/ztgame/tools/allview,查看所有服务运行状态。
5、更新游戏服务
通过ssh使用ztgame用户远程连接至第一台网关服务器,再通过服务器连接其他9台服务器,
分别在/home/ztgame目录下面建立最新的服务端存放目录game200508**.
然后将服务器端安装包通过scp传到第一台网关服务器,在game200508**下解压。
tar jxvf zebra-release-*****
tar jxvf zebra-release-*****
cp map release/ -rf
然后从上一个版本里拷贝出一些配置文件覆盖源文件
cp /home/ztgame/game_old/release/config.xml /home/ztgame/game_new/release/
cp /home/ztgame/game_old/release/loginServerList.xml /home/ztgame/game_new/release/
cp /home/ztgame/game_old/release/messageSystem.xml /home/ztgame/game_new/release/
以上工作准备好后就可以将网关服务器上的版本传到其他服务器
scp -r /home/ztgame/game_new/* ztgame@192.168.100.111:/home/ztgame/game_new
以上操作可以通过shell脚本来实现
/home/ztgame/tools/installPackage game_new game-old
七、服务器数据的备份
1、数据备份
为了防止意外情况的发生造成数据的丢失,关键数据或整个系统或对有选择的系统部分,在本地和异地进行定时备份,以保证系统全部或部分在灾害出现时也能持续运行。
2、具体方案
1)、数据库每日备份
每天4:00,将RecordServer数据库拷贝至/root/back后进行压缩,然后上传至192.168.1.9服务器上,/root/back留有压缩版本。
运行脚本/root/scripts/back.sh
例子:
#!/bin/bash
rm /root/back/RecordServer/* -rf
/usr/local/mysql/bin/mysqlhotcopy RecordServer /root/back/RecordServer -u ztgame -p yS29wahvCH
sleep 5
cd /root/back
tar zcf `hostname`-RecordServer`date +%Y%m%d`.tar.gz RecordServer
sleep 5
echo tar ok!
/usr/local/bin/ncftpput -u gamebak -p gamebak@ztgame 218.80.198.234 / /root/back/`hostname`-RecordServer`date +%Y%m%d`.tar.gz
sleep 20
echo upload RecordServer ok!
2)、数据库即时备份
每隔半小时,将RecordServer数据库拷贝至/root/back/hour目录进行备份,然后将压缩文件传给特定服务器。
例子:
#!/bin/bash
hottime=`date +%Y%m%d%H%M`
mkdir /root/back/hour/RecordServer$hottime
/usr/local/mysql/bin/mysqlhotcopy RecordServer /root/back/hour/RecordServer$hottime -u ztgame -p yS29wahvCH
sleep 5
cd /root/back/hour
tar zcf `hostname`-RecordServer$hottime.tar.gz RecordServer$hottime
sleep 5
echo tar ok!
/usr/local/bin/ncftpput -u backupdb -p backupdb 192.168.102.119 / /root/back/hour/`hostname`-RecordServer$hottime.tar.gz
sleep 20
echo upload RecordServer ok!
rm `hostname`-RecordServer$hottime.tar.gz -f
3)、日志备份
每天02:00,将/log/下前一天的日志,进行压缩,然后上传至192.168.1.9服务器。
运行脚本/root/scripts//upload_daily
例子:
#!/bin/bash
cd /log/
mkdir log`date --date '1 days ago' +%Y%m%d`
mv *.log.`date --date '1 days ago' +%y%m%d`-* log`date --date '1 days ago' +%Y%m%d`
sleep 10
tar zcvf `hostname`-log`date --date '1 days ago' +%Y%m%d`.tar.gz log`date --date '1 days ago' +%Y%m%d`
/usr/local/bin/ncftpput -u log -p log@ztgame 218.80.198.234 / /log/`hostname`-log`date --date '1 days ago' +%Y%m%d`.tar.gz
rm `hostname`-log`date --date '1 days ago' +%Y%m%d`.tar.gz
注:计划任务通过/etc/crontab e来进行设置
4)、即时日志备份
直接运行/home/ztgame/tools/upload 将最新日志上传至192.168.1.9服务器,方便研发部门查看。
运行脚本/home/ztgame/tools/upload,(如果所有服务器的日志都需要上传,可以运行网关服务器上的/home/ztgame/tools/allupload)
================================外网架设===========================
重起完服务器,先要启动MySQL
su - mysql -c mysqld_safe --skip-name-resolve --open-files-limit=4096
cd /home/ztgame
./SuperServer
./RecordServer
./SessionServer
./BillServer
./MiniServer
./ScenesServer
./ScenesServer
./GatewayServer
./GatewayServer
./GatewayServer
重起服务器命令
reboot
查找进程ID
ps -x
结束进程
kill -9 进程ID
================================内网架设===========================
首先 192装MYSQL 配置文件 config.xml 所有带帐号的都用内网 还有superserver port=10000125.89.63.7/superserver
然后 把数据库内serverlist 全设置成内网192的IP (有可能有几个得设置成另一台机器的内网IP)
然后 把另一台机器装上数据库和服务端,执行:
su - mysql -c mysqld_safe --skip-name-resolve --open-files-limit=4096
cd /home/ztgame
./SuperServer
./RecordServer
./SessionServer
./BillServer
./MiniServer
./ScenesServer
./ScenesServer
./GatewayServer
./GatewayServer
./GatewayServer
这样应该另一台机器就能运行了。
明天进行尝试,同样适用与一个IP架设(估计)
下载地址:
|