一、硬件的安装
1、保证服务器风扇正常转动。
2、保证服务器各个提示灯是否正常。
3、开机察看服务器有无报警情况。
4、开机察看服务器能否正常启动(不插鼠标键盘的情况下)
二、系统的安装
1、 安装RHEL 4.1
2、 选择自动分区。
3、 分别给2块网卡配置ip,方便以后配置,其中eth0配内网ip,eth1配外网ip。
4、 不启用防火墙。
5、 增加中文语言包。
6、 选择软件包时,只选择开发包.
7、 征途私服服务器端
游戏服务器注意事项一、硬件的安装
1、保证服务器风扇正常转动。
2、保证服务器各个提示灯是否正常。
3、开机察看服务器有无报警情况。
4、开机察看服务器能否正常启动(不插鼠标键盘的情况下)
二、系统的安装
安装RHEL 4.1
选择自动分区。
分别给2块网卡配置ip,方便以后配置,其中eth0配内网ip,eth1配外网ip。
不启用防火墙。
增加中文语言包。
选择软件包时,只选择开发包.
三、系统的简单设置
1、防火墙的简单设置:
vi /etc/rc.d/forward
内容:(例子)
#!/bin/bash
echo 1 >/proc/sys/net/ipv4/ip_forward
if [ -e /proc/sys/net/ipv4/tcp_ecn ]
then
echo 0 >/proc/sys/net/ipv4/tcp_ecn
fi
/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 -i lo -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#/sbin/iptables -A INPUT -i eth0 -p tcp -j REJECT --reject-with tcp-reset
/sbin/iptables -A INPUT -i eth0 -p udp -j REJECT --reject-with icmp-port-unreachable
#sshd
/sbin/iptables -A INPUT -s 218.80.198.234 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -s 218.80.198.250 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -s 210.22.188.21 -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
#game server
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 6020 -j ACCEPT
#db server
/sbin/iptables -t nat -A PREROUTING -s 218.80.198.234 -d 203.110.165.30 -p tcp --dport 3306 -j DNAT --to 192.168.102.158:3306
/sbin/iptables -t nat -A PREROUTING -s 218.80.198.234 -d 203.110.165.30 -p tcp --dport 3307 -j DNAT --to 192.168.102.159:3306
/sbin/iptables -P INPUT DROP
/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 192.168.102.0/24 -j MASQUERADE
保存后退出。
chmod 744 /etc/rc.d/forward
然后运行防火墙脚本,以后根据需求修改脚本。
再vi /etc/rc.d/only_forward
#!/bin/bash
echo 1 >/proc/sys/net/ipv4/ip_forward
if [ -e /proc/sys/net/ipv4/tcp_ecn ]
then
echo 0 >/proc/sys/net/ipv4/tcp_ecn
fi
/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 -i lo -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#/sbin/iptables -A INPUT -i eth0 -p tcp -j REJECT --reject-with tcp-reset
/sbin/iptables -A INPUT -i eth0 -p udp -j REJECT --reject-with icmp-port-unreachable
#sshd
/sbin/iptables -A INPUT -s 218.80.198.234 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -s 218.80.198.250 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -s 210.22.188.21 -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
#game server
/sbin/iptables -A INPUT -s 218.80.198.234 -p tcp -m state --state NEW -m tcp --dport 6020 -j ACCEPT
#db server
/sbin/iptables -t nat -A PREROUTING -s 218.80.198.234 -d 203.110.165.30 -p tcp --dport 3306 -j DNAT --to 192.168.102.158
/sbin/iptables -t nat -A PREROUTING -s 218.80.198.234 -d 203.110.165.30 -p tcp --dport 3307 -j DNAT --to 192.168.102.159:3306
/sbin/iptables -P INPUT DROP
/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 192.168.102.0/24 -j MASQUERADE
此防火墙只允许公司的电脑可以登录游戏。
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.109 DBServer-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用户
#确定你有以下包
perl-DBD-MySQL-2.9004-3.1
perl-DBI-1.40-5
mysql-4.1.7-4.RHEL4.1
获得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 2 &&make install
#添加用户
groupadd mysql &&useradd -g mysql mysql
#创建目录
mkdir /usr/local/mysql/data &&mkdir /usr/local/mysql/run &&mkdir /usr/local/mysql/log &&mkdir /usr/local/mysql/var
#更改mysql目录所有者
chgrp mysql -R /usr/local/mysql &&chown mysql -R /usr/local/mysql
#增加打开文件数量
ulimit -n 4096
#添加PATH
echo "PATH=\"/usr/local/mysql/bin:\$PATH\"" >>/etc/profile &&export PATH="/usr/local/mysql/bin:$PATH"
#strip可执行文件
strip /usr/local/mysql/libexec/mysqld
#添加LIB PATH
echo "/usr/local/mysql/lib" >>/etc/ld.so.conf &&ldconfig
#将my.cnf文件cp到/etc目录下
cp support-files/my-huge.cnf /etc/my.cnf
#修改my.cnf
datadir=/db/mysql
#创建数据库存放路径
mkdir /db
chown mysql.mysql /db -R
#初始化Mysql表
su - mysql -c "mysql_install_db"
#启动服务器
su - mysql -c "mysqld_safe --skip-name-resolve --open-files-limit=4096&"
#创建数据库和用户
GRANT ALL PRIVILEGES ON *.* TO ztgame@192.168.104.% IDENTIFIED BY WITH GRANT OPTION
GRANT ALL PRIVILEGES ON *.* TO ztgame@localhost IDENTIFIED BY WITH GRANT OPTION
GRANT ALL PRIVILEGES ON *.* TO ztgame@218.80.198.234 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.104.109,10000,192.168.104.109,10000)
INSERT INTO `SERVERLIST` VALUES(20,20,SessionServer,192.168.104.109,6000,192.168.104.109,6000)
INSERT INTO `SERVERLIST` VALUES(21,21,SceneServer,192.168.104.104,6010,192.168.104.104,6010)
INSERT INTO `SERVERLIST` VALUES(22,21,SceneServer,192.168.104.105,6011,192.168.104.105,6011)
INSERT INTO `SERVERLIST` VALUES(23,21,SceneServer,192.168.104.106,6012,192.168.104.106,6012)
INSERT INTO `SERVERLIST` VALUES(24,21,SceneServer,192.168.104.107,6013,192.168.104.107,6013)
INSERT INTO `SERVERLIST` VALUES(25,21,SceneServer,192.168.104.108,6014,192.168.104.108,6014)
INSERT INTO `SERVERLIST` VALUES(2200,22,GatewayServer,192.168.104.100,6020,210.51.23.132,6020)
INSERT INTO `SERVERLIST` VALUES(2201,22,GatewayServer,192.168.104.101,6020,210.51.23.133,6020)
INSERT INTO `SERVERLIST` VALUES(2202,22,GatewayServer,192.168.104.102,6020,210.51.23.134,6020)
INSERT INTO `SERVERLIST` VALUES(2203,22,GatewayServer,192.168.104.103,6020,210.51.23.135,6020)
INSERT INTO `SERVERLIST` VALUES(11,11,RecordServer,192.168.104.109,7010,192.168.104.109,7010)
INSERT INTO `SERVERLIST` VALUES(12,12,BillServer,192.168.104.109,7020,192.168.104.109,7020)
在RecordServer数据库上初始化某些表格,目前有ANSWER,TECH,COUNTRY,NPCDARE,ACCPRIV。
数据库服务器上跑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]-->
<mysql>mysql://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]. -->
<log>debug</log>
<!--MySQL database connection[mysql://user:passwd@host:port/dbName]-->
<!-- Use the specified local network device. -->
<ifname>eth0</ifname>
<!-- Connected to the specified supserserver, property port default value is 10000. -->
<superserver port="10000">192.168.104.109</superserver>
</global>
<SuperServer>
<!-- 统一用户平台登陆服务器列表文件 -->
<loginServerListFile>loginServerList.xml</loginServerListFile>
<!-- 角色名称唯一性验证服务器的地址 -->
<RoleregServer port="9901">218.80.198.252</RoleregServer>
<!-- 服务器信息采集的服务器地址 -->
<InfoServer port="9903">218.80.198.252</InfoServer>
<!--MySQL database connection[mysql://user:passwd@host:port/dbName]-->
<mysql>mysql://ztgame:yS29wahvCH@192.168.104.109:3306/SuperServer</mysql>
<!-- 如果要编码mysql连接字符串请使用工具,配置如下面的例子
<mysql encode="yes">lmOf.1kySwS0a09j11xyCdI1ySujl1hnCvT0hDitT0hjzv00gzSv00gDSw91tS9fE1
</mysql>-->
<logfilename>/log/superserver.log</logfilename>
</SuperServer>
<RecordServer>
<!--MySQL database connection[mysql://user:passwd@host:port/dbName]-->
<mysql>mysql://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]-->
<mysql>mysql://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]-->
<mysql>mysql://ztgame:yS29wahvCH@192.168.104.109:3306/RecordServer</mysql>
<logfilename>/log/sessionserver.log</logfilename>
<dare_active_time>3600</dare_active_time>
<offlineMsgPath>/log/offlineMessages</offlineMsgPath>
</SessionServer>
<ScenesServer>
<sceneinfofile>scenesinfo.xml</sceneinfofile>
<npctradefile>npctrade.xml</npctradefile>
<messageSystemFile>messageSystem.xml</messageSystemFile>
<charinitinfoFile>initcharinfo.xml</charinitinfoFile>
<magicrangeFile>magicrangefile.xml</magicrangeFile>
<questdir>quest/</questdir>
<mapdir>map/</mapdir>
<tbldir>map/</tbldir>
<gm_logfile>/log/gm_log.log</gm_logfile>
<!--回写档案平率(单位是秒) -->
<writebacktimer>300</writebacktimer>
<ossdir>/log/</ossdir>
<logfilename>/log/scenesserver.log</logfilename>
</ScenesServer>
<GatewayServer>
<!-- 国家排序方式 0:不排序 , 1:在线人数排序 , 2:注册人数排序 -->
<countryorder>2</countryorder>
<logfilename>/log/gatewayserver.log</logfilename>
<sceneinfofile>scenesinfo.xml</sceneinfofile>
<rolereg_verify>1</rolereg_verify>
<forbidWordsFile>forbidWords</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)、数据库即时备份
每隔1小时,将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,(
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)