软件简介:
7 m% E( | _/ ]* Q服务器要求Intel 64位CPU 2G以上内存!本人测试一台INTEL 3.2CPU 2G内存服务器三个国家300人左右不卡!7 E: Q5 _( j% Z3 I, q7 x% L
此端差一个帐号管理程序,希望有能力的朋友研究出来!本版本为1.04完整官方征途服务端!. J# z$ j. e2 \& ]6 Z7 Z/ b
游戏服务器注意事项: B; \7 m8 [% m5 s7 O
一、硬件的安装
2 g }* s U7 d8 F1、保证服务器风扇正常转动。" K. ]5 O( |0 D, w% m! |% w
2、保证服务器各个提示灯是否正常。
9 Y& S3 r1 X3 H1 H8 V7 E! _2 k. `0 I3、开机察看服务器有无报警情况。
$ x0 k6 {( c3 X6 u- C4、开机察看服务器能否正常启动(不插鼠标键盘的情况下)2 w0 L q' `& q4 F6 _* N5 K
二、系统的安装; C$ g9 C3 E; A8 I% _% F" |
安装RHEL 4.0+ S$ y- q( Z$ o% [9 C/ X
选择自动分区。
: u& I5 y# k. T, N' s4 D4 b分别给2块网卡配置ip,方便以后配置。 N _6 c1 j% M2 U' S+ f
不启用防火墙。
: I/ Z) D! H3 r" r% a增加中文语言包。
4 P% k6 Q( W) M选择软件包时,只选择开发包.: a" F R3 Z; n: ] z ^
三、系统的简单设置
& _) p L5 r& S0 p8 J/ b1、防火墙的简单设置:
# H: I) T" ^* G) x0 T( ~ vi /etc/rc.d/forward9 e' I' B. ^2 r4 B2 g
内容:' ?7 O `+ `% \
#!/bin/bash
6 b& q* p6 B3 E( h! T3 S/sbin/iptables -F
3 S5 d/ J6 C2 v. Y; {, h8 P& c9 N/sbin/iptables -F -t nat
9 ^3 `( m& p, e1 D( X; @/sbin/depmod -a! f2 f8 ]% `9 I7 L1 h
/sbin/modprobe ip_tables
4 J9 A. z! }! A) c& z9 G8 k/sbin/modprobe ip_conntrack
1 c: G, _! u: G! K" l# f& q. q$ N/sbin/modprobe ip_nat_ftp- I/ v; @0 i" h R+ L
/sbin/modprobe ip_conntrack_ftp
# N7 a. n" V6 Z) C9 N/ F8 e" o/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT) |$ c4 u' v! c# Z+ ^
#sshd
- w+ z3 O& i! B! {+ N3 q) \! S8 G/sbin/iptables -A INPUT -s 218.80.198.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
/ d n/ J# R: }. a. D! ^+ e8 C/sbin/iptables -A INPUT -s 192.168.0.0/16 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT% [+ A- R, s! O9 C- Z+ r' v3 c
#ftp server
; _! \( S# N" L3 `* `: i/ U#/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
C" A K9 B$ d#/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
) @. ^) c, y0 ~- n8 n7 |7 @* _: `/ d* G
/sbin/iptables -A INPUT -j DROP4 H. q6 y b# e. E( M. I
保存后退出。4 s) @- i* c% K2 u% j- [
chmod 744 /etc/rc.d/forward
8 _, V7 `# n% @. i+ n8 R, l 然后运行防火墙脚本,以后根据需求修改脚本。
6 D4 K; D8 S6 B' ?7 R, U8 i9 G2、设置系统自动启动防火墙
H1 R9 N/ T& e8 z4 s vi /etc/rc.d/rc.local
' R( ?$ c4 ?1 O0 j Z7 ]* P, R0 D增加一行+ l% E; R( W8 G9 u0 C
/etc/rc.d/forward! _' _" Q' `2 X$ K9 Q8 R7 O
保存后退出
h+ Z8 f5 ~8 L% y6 W1 a3、设置文件打开数9 t* ]$ Y0 R; _4 @6 Y% \2 C! ]' K
1) 修改/etc/security/limits.conf 增加2行:
7 h. v$ X) M# @& t9 w+ Y" U* soft nofile 4096/ P1 `4 ^( f4 J$ ^6 y( ]
* hard nofile 65535
: X: D5 P9 e$ x+ v4 @& ^; k" H2) 修改/etc/pam.d/login 增加1行
( W# ?* n L I/ E' ^8 i0 Esession required pam_limits.so
8 D$ M% p) w2 Q; H可用:% r1 }! L1 b: _5 @
echo * soft nofile 4096 /etc/security/limits.conf
4 Z& [5 g v: }, F K) O; xecho * hard nofile 65535 /etc/security/limits.conf) d9 u# p( r' O9 X' O' m
echo session required pam_limits.so /etc/pam.d/login* i+ R, `* S6 `% I; v
4、修改默认语言: e/ a0 S5 D% g
vi /etc/sysconfig/i18n 修改# o; S2 Q+ g6 E
LANG=zh_CN.GB2312+ {& P: }: L5 p; _* K
新建游戏运行用户ztgame,设置密码" b" t# c8 |& s8 i
useradd ztgame
. @+ w' ^5 [" A7 C% b# Zpasswd ztgame
# k+ x8 t6 V7 D用ztgame用户登录服务器,修改vi /home/ztgame/.bash_profile增加一行
( T+ M) k/ E8 |' a# iulimit c unlimited( |3 H$ h0 l9 ?6 X% U2 t
保存后退出。
! {/ B! h. h/ W四、游戏环境的搭建(按照4台网关服务器,5台场景服务器,1台数据库服务器的构架)
) k7 g; v6 c) m$ @5 k5 J1、服务器IP设置2 i6 C: F8 V9 r
4台网关服务器配置外网ip和内网ip,5台场景服务器和数据库服务器只配置内网ip,并且服务器默认网关为第一台网关服务器的内网ip。* c; N7 ^7 C# F) O e# G
服务器以服务器应用-序号-机房序号命名(例GWServer01-CHJ01)。* C7 d1 q+ E& V: k9 [# g& [
修改/etc/hosts。5 f. ?) P; E9 P- {( n4 W* n/ \4 W
例子:
5 _6 b* ]" b; K127.0.0.1 GWServer01-CHJ01 localhost.localdomain localhost
' y) ~0 g4 |/ \, u& q192.168.100.101 GWServer02-CHJ01
" N( B- \! J, [1 X- z
. R3 n; U! b9 S, t w( |4 z( h192.168.100.104 ScenServer01-CHJ014 D" C+ O' `3 w3 k% M/ f
3 h) p1 X+ M- q" o4 B! j192.168.100.109DBServer-CHJ010 y# M" M9 n5 V: `2 z1 B
2、公钥的生成
9 x; r0 I9 T+ Z& V# ~5 e. R, ]6 v _在ztgame的用户下登陆第一台网关服务器,输入ssh-keygen -t dsa
1 x# n5 ^# }; w1 r接受 ~/.ssh/id_dsa 的默认位置。输入一个与你的帐号口令不同的口令句,再输入一次来确认。公钥被写入 ~/.ssh/id_dsa.pub。密钥被写入 ~/.ssh/id_dsa。0 T9 R7 x$ e) _. D; P3 B t* R
使用以下命令改变你的 .ssh 目录的许可权限: 7 C2 K, N. H' q8 v" t
chmod 755 ~/.ssh. O3 i. }+ n* Q f) E
把 ~/.ssh/id_dsa.pub用scp命令传到其它剩余9台服务器5 M# k8 Y) A/ ~# ~$ D+ d& X4 d$ x
scp~/.ssh/id_dsa.pub ztgame@192.168.102.108:~/.ssh/authorized_keys' U) H2 t" c/ j6 | x/ H
在其它9台服务器下使用以下命令改变你的 authorized_keys 文件的许可权限: . @# X) A& I4 L" L
chmod 755 ~/.ssh
, t4 I5 m. [% N Bchmod 644 ~/.ssh/authorized_keys- s, N! i8 }& G* o4 v2 t0 p2 \: b9 Y
3、数据库服务器的安装$ R# k8 H: ~" b
#首先确定你是root用户+ f3 j G5 ~# {1 W+ }; {
获得mysql-4.1.*.tar包,用tar zxvf mysql-4.1.*tar解开压缩包,然后进入mysql-4.1.*目录
( t, m' ~* N4 V8 P4 H2 w#根据体统类型选择编译方式
5 s5 C: ?# E% n$ G- E+ l#i386体系结构的
3 m! U! {9 G, |/ A9 v9 B: i+ PCFLAGS=-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+ |! b, p% |: Q+ A
#64位系统,x86_64
9 w W9 [% M" }/ uCFLAGS=-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
- F$ b3 o( B9 D( y0 s* z1 @! U#然后根据CPU数量进行编译; J" b' Q2 y9 e; \
make -j 4 PATH=\/usr/local/mysql/bin:\$PATH\ /etc/profile /usr/local/mysql/bin:$PATH& Y$ |! U% _2 g/ H
#strip可执行文件- D0 O: x* e/ b
strip /usr/local/mysql/libexec/mysqld: R& |- j( ^4 N1 z" ~$ W5 k
#添加LIB PATH3 H1 o0 k' G. S8 m$ D
echo /usr/local/mysql/lib /etc/ld.so.conf mysql_install_db
/ A# \6 S& F: b7 h- E, r* O* W#启动服务器) Q8 \% @& e# D3 D4 `7 P
su - mysql -c mysqld_safe --skip-name-resolve --open-files-limit=4096
4 Q% H: e8 [0 C3 @$ F/ J& D#创建数据库和用户% Y" X; P/ G O
GRANT ALL PRIVILEGES ON *.* TO ztgame@'192.168.1.%' IDENTIFIED BY '' WITH GRANT OPTION;
0 V- P: a2 c7 K4 O# T; v, tGRANT ALL PRIVILEGES ON *.* TO ztgame@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;
: A2 g. b) J( b' rGRANT ALL PRIVILEGES ON *.* TO ztgame@'222.212.121.119' IDENTIFIED BY '' WITH GRANT OPTION;
, e! n& Q3 a+ XGRANT ALL PRIVILEGES ON *.* TO ztgame@'222.212.121.119' IDENTIFIED BY '' WITH GRANT OPTION;
( I8 H/ M# g" i6 u0 M+ `4、数据库配置
1 w R2 G# U$ L2 f8 @4 T! N9 l8 O用mysql进入,然后用create database dbname创建数据库。分别创建SuperServer、RecordServer、Bill数据库,然后用安装包目录下的*.sql的文件建立相应的表。(SessionServer.sql也导入到RecordServer库中)。
. N& V) H) e. A0 C. D$ d- P* ~在SuperServer数据库SERVERLIST表内添加服务器配置信息。
- D/ S1 T* ~8 w例子:
8 c) `7 M$ y! z* w: R7 F8 QINSERT INTO `SERVERLIST` VALUES (1,1,'SuperServer','192.168.1.130',10000,'192.168.1.130',10000);! I( ?# }: R8 e3 j* ~- d0 \, f
INSERT INTO `SERVERLIST` VALUES(20,20,'SessionServer','192.168.1.130',6000,'192.168.1.130',6000);
! I$ l/ n4 c1 z6 Z& OINSERT INTO `SERVERLIST` VALUES(21,21,'SceneServer','192.168.1.130',6010,'192.168.1.130',6010);
: \6 `+ q! Y9 TINSERT INTO `SERVERLIST` VALUES(22,21,'SceneServer','192.168.1.130',6011,'192.168.1.130',6011);6 G, R; v% g6 H) K! h
INSERT INTO `SERVERLIST` VALUES(23,21,'SceneServer','192.168.1.130',6012,'192.168.1.130',6012);4 N& \: D f% | m) I
INSERT INTO `SERVERLIST` VALUES(24,21,'SceneServer','192.168.1.130',6013,'192.168.1.130',6013);
F5 V0 _) z- {2 e# e4 fINSERT INTO `SERVERLIST` VALUES(25,21,'SceneServer','192.168.1.130',6014,'192.168.1.130',6014);
2 j4 f$ J$ S$ {/ f: B6 U4 U1 q6 fINSERT INTO `SERVERLIST` VALUES(2200,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);
& R K5 N. M) O2 s# eINSERT INTO `SERVERLIST` VALUES(2201,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);3 ^, H3 B. |6 o7 I) i: S: A D
INSERT INTO `SERVERLIST` VALUES(2202,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);
5 S5 b, y; F, j+ l1 Z1 wINSERT INTO `SERVERLIST` VALUES(2203,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);& j) d R; ]; }+ V4 D
INSERT INTO `SERVERLIST` VALUES(11,11,'RecordServer','192.168.1.130',7010,'192.168.1.130',7010);* S/ u' K6 B7 L& W8 |$ B
INSERT INTO `SERVERLIST` VALUES(12,12,'BillServer','192.168.1.130',7020,'192.168.1.130',7020);* h, a3 z$ f" f; J, r
数据库服务器上跑SuperServer、SessionServer、RecordServer、BillServer四个服务,4个网关服务器分别跑4个网关服务,5个场景服务器分别跑5个场景服务。场景服务器对应的ID就是国家配置的ID号,这个ID号决定场景服务器上面跑几个国家。
^- t0 P2 c- {, }6 U4 c五、服务端的配置和安装3 Q8 @& O6 B, T* Y
1、获得安装包:
/ o- t" [* g( `# }3 A$ D: \release-version.tar.bz2- g& q# [5 h" a
map-version.tar.bz2
. C2 e8 E" H! @9 i3 a, @3 X在/home/ztgame下建立以时间为名字的目录(game20050928),压缩包放入此目录,然后用tar jxvf release-version.tar.bz2 和tar jxvf map-version.tar.bz2解开压缩包$ A( }2 b7 o5 `+ _3 |
进入release目录,cp rf ../map ./ L7 D. g- w% [9 n
按照config.xml.example格式创建文件config.xml/ t& o( s" |6 N$ o! {
配置文件主要定义了服务器的各种参数:& L+ C p9 x" ~! K4 L
[global]这段主要定义了通用参数,如服务器本地网络设备名称,扩展网络设备名称,日志级别,SuperServer的服务器地址,端口等参数。; P" t7 r; E) I6 O2 _3 w6 ]9 M( ]
其他各个段定义了具体的服务参数,主要是指定该服务对应的数据库,数据库的连接地址,端口,用户名,密码等数据库连接字符串。每个服务可以定义日志文件的存放位置,如果没有指定,缺省放置在/tmp/目录下面。
- u" ?9 r5 t! ?3 f, D% o% y& D1 v q- V如SuperServer服务
3 z% w# z1 | w4 k; r5 \* M& j0 ZSuperServer5 \; k0 @! e0 v' J5 S& i! q+ M
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--2 H% _* t1 W+ v5 V
mysqlmysql://test:123456@192.168.2.14:3306/SuperServer/mysql, q7 a+ K9 H, O) Y
logfilename/home/test/tmp/superserver.log/logfilename
# x" C+ C0 x- w2 u0 P/SuperServer4 ?# V5 P) ?) D9 [0 Y
上面配置指明SuperServer服务,采用连接串用户名test,密码123456,访问192.168.2.14服务器上3306端口下SuperServer数据库,日志文件存放在/home/test目录下。其他服务配置类似。
/ J: W( |' b8 C* ^( b2 F# a例子:& n1 R$ @! a. m6 C& G& a
?xml version=1.0 encoding=GB2312?
# X9 n9 x- W5 D1 g% f4 L7 U!--所有各种服务器参数--* [7 w; y1 i1 O. Y F& y
Zebra" H8 T* v( @: @5 N. X( f
global
5 }7 A4 i" V( `8 i6 s+ H" n& Q* {' b0 `!-- Specify the log level[debug,info,warning,error,fatal,always]. --
6 s# w: A: H6 ?4 P, W" s( U3 ylogdebug/log+ Y. z+ v: [6 Z$ ~% z9 _2 m
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--; ?- t; [3 L$ Q/ G3 t! ?
!-- Use the specified local network device. --
+ E$ T+ ^. H5 q. L- |- y. M! \1 [ifnameeth0/ifname( ?# ^+ H6 T3 G; P8 U
!-- Connected to the specified supserserver, property 'port' default value is 10000. --
+ m; Z, o' U5 i* j- @superserver port=10000192.168.104.109/superserver6 j: m6 e2 a# _
/global
2 `$ {# e+ o i- W: ?) qSuperServer
$ X: T( [, w/ a5 d+ }5 \, ^3 o$ n !-- 统一用户平台登陆服务器列表文件 --
/ c' p% Y& }1 h1 T1 `+ g loginServerListFileloginServerList.xml/loginServerListFile
# z( f4 {" B$ W: F' u !-- 角色名称唯一性验证服务器的地址 --
1 a# f8 X' K5 E. ^ RoleregServer port=9901218.80.198.252/RoleregServer# U$ ]+ i( S! G
!-- 服务器信息采集的服务器地址 --/ T1 X7 d+ a9 {* M: _9 H4 j' R5 z
InfoServer port=9903218.80.198.252/InfoServer3 I0 }6 Z* g4 M: G
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--
3 m; g4 Y$ V: Rmysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/SuperServer/mysql
( \2 W7 O& N' o2 F7 R3 \2 H8 n !-- 如果要编码mysql连接字符串请使用工具,配置如下面的例子
* C5 [7 J3 }& B) }, h% ~ mysql encode=yeslmOf.1kySwS0a09j11xyCdI1ySujl1hnCvT0hDitT0hjzv00gzSv00gDSw91tS9fE1/mysql
8 }. r- r3 i" p8 A$ c$ y* j7 B --0 P8 d- ?( n/ R. S% Q' ]
logfilename/log/superserver.log/logfilename+ \- }# z$ i/ k7 Z( n' N+ J4 M
/SuperServer- J# C5 Z) ^4 k; M' Q
RecordServer
, {0 O0 e" u5 d. k1 ?9 o) Y5 g: z: n!--MySQL database connection[mysql://user:passwd@host:port/dbName]--( W+ Y3 @/ K7 O) O+ [
mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/RecordServer/mysql
! u+ V& N3 {# O+ [ Ulogfilename/log/recordserver.log/logfilename
' k0 ]# M3 K! M, B9 Q+ M1 B/RecordServer
# m: L% g2 p4 F( JBillServer* `4 R! a1 i7 H+ f
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--/ a$ n# ^1 {1 \0 z
mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/Bill/mysql
. l5 b6 D6 R i% Clogfilename/log/billserver.log/logfilename
. z# j: [# `6 X# F' y/BillServer
, z( G$ d9 E0 k. X6 l( BBillClient* V5 f) N, C8 l# d$ L
!-- 交易记录log文件路径 --
& Y/ B$ T) ?' R0 i# r3 b8 Dtradelogfilename/log/clienttrade.log/tradelogfilename
' I h% B4 {# ~% F/BillClient
4 g4 j- l: S& C4 E cSessionServer& F! t( b0 ?: L ~6 @ }
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--4 W8 v0 ?0 E8 d; [6 x
mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/RecordServer/mysql
/ V" J. s/ X. l4 T: G2 alogfilename/log/sessionserver.log/logfilename
f9 M* D) t& G# |3 _- Bdare_active_time3600/dare_active_time
4 V' f3 R* }. o# G5 O& |" VofflineMsgPath/log/offlineMessages/offlineMsgPath
+ N, n# u! {' o3 u) u; V- A& c" }/SessionServer
! Q0 z, Q( Y `+ `: u- v; VScenesServer
( y1 f f0 b& |# O) s3 Fsceneinfofilescenesinfo.xml/sceneinfofile [( E5 a& d' `7 ~# f/ Z
npctradefilenpctrade.xml/npctradefile9 ]6 S( z S Y$ k
messageSystemFilemessageSystem.xml/messageSystemFile
) ?4 m H, \3 d/ B! ` charinitinfoFileinitcharinfo.xml/charinitinfoFile
) g4 v. d. O" w, tmagicrangeFilemagicrangefile.xml/magicrangeFile# w* Z& v9 z; Y* O4 @
questdirquest//questdir f" M D3 u8 p% L- |
mapdirmap//mapdir
' h4 C' f" L( i7 i: S7 a tbldirmap//tbldir
4 H( v' ?3 m+ @ gm_logfile/log/gm_log.log/gm_logfile7 R0 [# P5 g* ~/ ?" D& q
!--回写档案平率(单位是秒) --
- G2 T1 s h3 Zwritebacktimer300/writebacktimer
# f: Y/ ]5 X8 v J _ossdir/log//ossdir) G# L& C2 ?% _9 r3 y, ^) S) `' p# z
logfilename/log/scenesserver.log/logfilename " m/ d4 l6 |6 m9 B
/ScenesServer
, s# G X4 U3 Q" Q# x8 M9 lGatewayServer
, J( G% {& t" ]5 |: G- s$ ? !-- 国家排序方式 0:不排序 , 1:在线人数排序 , 2:注册人数排序 --0 C+ ]! v: k. h7 s
countryorder2/countryorder
8 _; }5 m" B9 w4 N# ^ logfilename/log/gatewayserver.log/logfilename
; W9 R$ @( t- [ sceneinfofilescenesinfo.xml/sceneinfofile 1 \7 s0 r8 n* L$ e0 ?- Q& A( y1 S3 O
rolereg_verify1/rolereg_verify9 X/ k4 Q# [, v1 [" `9 m
forbidWordsFileforbidWords/forbidWordsFile
5 }! z1 e' [7 D) G5 ~3 c5 h/GatewayServer
6 r1 ]- ?+ Y: n% y/Zebra
# x& z- d: r; C注意存放日至的目录是否建立,以及建立session服务所要求的日志存放子目录offlineMessages。
9 x1 Q8 A7 B9 J! T. @& D& s) |修改loginServerList.xml,填入平台中心的FLServer服务器ip以及端口。% b0 l4 `3 j5 b4 C* ]6 s
例子:
- f* r0 {0 @$ u7 a2 C?xml version=1.0 encoding=GB2312?
5 X: K6 p# q! TLoginServerList
! c/ X7 g; }/ T' r# z: [ server ip=218.80.198.252 port=7001/# m' R! \+ J W- o' Y2 N h
server ip=210.22.188.20 port=7001/ % V3 l$ @ a' g1 v' c! l" O
/LoginServerList6 v% ^* M; z! \$ m
然后将修改好的版本传至其它9台服务器。并启动服务
% m- Y5 w; s0 d# }9 }/ C3 p六、服务器的启动,停止和更新
( L2 r( G& V+ R, f1、将运行脚本传至各个服务器。
* N/ v% I6 J; J: D# w9 Y* c6 W2、开启游戏服务; G, R5 p( |0 F" ?* N4 G9 F
通过ssh使用ztgame用户远程连接至第一台网关服务器,再通过网关服务器连接其他9台服务器,0 Y' {1 `; L& V# v3 [& @0 h8 g
10个窗口内分别进入最新的服务端存放目录/home/ztgame/game200508**/release/- Y* A N$ T( N6 c' D0 G
数据库服务器 启动服务./SuperServer -d 和 ./SessionServer -d 和 ./RecordServer -d 和 ./BillServer -d; z3 z0 n* X5 H+ ~
场景服务器 启动服务./ScenesServer -d
7 H+ ^( q. P7 T* Z5 j网关服务器 启动服务./GatewayServer -d/ G. d- T' J# a
以上操作可以通过/home/ztgame/tools/allstart game200508**来启动(由于程序是后台运行,所以如发现程序运行时间过长,可以CTRL+c中断,并不影响程序的正常运行。)& A- p- C! A6 t) k. y
- E- C7 T+ Z" o. U3、停止游戏服务. n M+ o0 S6 k( V1 l) _1 }
通过ssh使用ztgame用户远程连接至第一台网关服务器,运行/home/ztgame/tools/allstop,中止所有服务% G5 [4 y; j/ r7 i9 y$ V
,此脚本是并不是强行杀进程,所以如果发现进程无法kill的情况,用/home/ztgame/tools/allstop_9来强行杀死进程。( P5 f' m) o, P# \2 D
4、查看游戏服务
5 O9 ^1 G* |% ]( y& L2 n; I6 Z3 @通过ssh使用ztgame用户远程连接至第一台网关服务器,运行/home/ztgame/tools/allview,查看所有服务运行状态。
4 S) }7 m- Y5 \7 J+ g6 x) _# c4 B0 t$ u a( t6 m+ t
5、更新游戏服务
. @; ?2 B. w1 O6 Y1 j; |7 e% p通过ssh使用ztgame用户远程连接至第一台网关服务器,再通过服务器连接其他9台服务器,
5 k4 }5 D+ C2 z, ?: s6 u: q! E; a分别在/home/ztgame目录下面建立最新的服务端存放目录game200508**.* q% N2 X1 S, e* |' X! [6 b. q
然后将服务器端安装包通过scp传到第一台网关服务器,在game200508**下解压。
* A% K7 h2 M% m+ Q+ V" h9 htar jxvf zebra-release-*****
+ i+ L9 R" H1 b" J1 Itar jxvf zebra-release-*****% E+ V' y8 A! Q/ p, q Z/ O# ?5 a
cp map release/ -rf
9 s6 f) A! O% |然后从上一个版本里拷贝出一些配置文件覆盖源文件0 e" l/ n& n0 X( E' E
cp /home/ztgame/game_old/release/config.xml /home/ztgame/game_new/release/3 A1 q! C. x6 N& n9 M
cp /home/ztgame/game_old/release/loginServerList.xml /home/ztgame/game_new/release/5 h+ W( a6 u C4 h
cp /home/ztgame/game_old/release/messageSystem.xml /home/ztgame/game_new/release/
- @5 n8 c6 _, f3 k; J以上工作准备好后就可以将网关服务器上的版本传到其他服务器
0 U. I" y- D4 v9 V( W3 Nscp -r /home/ztgame/game_new/* ztgame@192.168.100.111:/home/ztgame/game_new$ b H! K& b x% {+ G/ ]
以上操作可以通过shell脚本来实现$ G! H, ]' S1 s- ]1 G
/home/ztgame/tools/installPackage game_new game-old! d, A4 L- _' e; s
七、服务器数据的备份8 x: l3 c( `) W0 E4 ?( k7 U+ L
1、数据备份# q$ o8 R" `! z& L, O7 S3 y Y0 i! U
为了防止意外情况的发生造成数据的丢失,关键数据或整个系统或对有选择的系统部分,在本地和异地进行定时备份,以保证系统全部或部分在灾害出现时也能持续运行。
, J# q) S' {& |! ?7 H# U2 c$ T5 ~5 ~2、具体方案
8 N' ^9 A& \: x4 m+ S1)、数据库每日备份
9 p* I" H/ G. N b* _1 J) B7 j 每天4:00,将RecordServer数据库拷贝至/root/back后进行压缩,然后上传至192.168.1.9服务器上,/root/back留有压缩版本。
! k/ t/ l, F+ S 运行脚本/root/scripts/back.sh
- K2 ?3 u! K7 H# Q1 P) D7 H例子:
5 i- }1 W% e6 F+ B4 B! z#!/bin/bash4 U/ p" L$ m& Q& S1 X
rm /root/back/RecordServer/* -rf8 E) t% ]( x9 m5 o& V% N; y l
/usr/local/mysql/bin/mysqlhotcopy RecordServer /root/back/RecordServer -u ztgame -p yS29wahvCH* [ {3 I) @3 T" }9 p u2 u5 K* f# l
sleep 5 _9 a% }+ x) F& V
cd /root/back3 a8 }" L) ]* {7 F- Z
tar zcf `hostname`-RecordServer`date +%Y%m%d`.tar.gz RecordServer- s( F+ e9 M* y d7 L) i& V$ x- Q
sleep 5" e2 y( m1 ~" `+ a
echo tar ok!
" q+ m% x, ?0 U' `/usr/local/bin/ncftpput -u gamebak -p gamebak@ztgame 218.80.198.234 / /root/back/`hostname`-RecordServer`date +%Y%m%d`.tar.gz
6 S- K/ g4 h2 t7 _sleep 20% W& `8 V- T: \" v& X/ Q
echo upload RecordServer ok!, H3 d/ r i+ t
2)、数据库即时备份
# a" U" j1 ` e6 p每隔半小时,将RecordServer数据库拷贝至/root/back/hour目录进行备份,然后将压缩文件传给特定服务器。
: b5 z: Q% ?1 B( P0 E( @2 o例子:
6 z9 H/ B- R4 `#!/bin/bash
6 H, P; A# @" }; i, rhottime=`date +%Y%m%d%H%M`0 C7 V. Z# c4 n+ F1 r
mkdir /root/back/hour/RecordServer$hottime7 L+ U4 }6 G2 m6 C0 H% S4 Q
/usr/local/mysql/bin/mysqlhotcopy RecordServer /root/back/hour/RecordServer$hottime -u ztgame -p yS29wahvCH: k7 T8 U" c, L7 F
sleep 5, T- _. z# w; t
cd /root/back/hour
6 m4 @2 J, S" O0 j/ Y$ X% @tar zcf `hostname`-RecordServer$hottime.tar.gz RecordServer$hottime# |6 q- g0 ~ b4 }* m& ^
sleep 51 k g) _- L2 X
echo tar ok!4 t& K- _! \% N, p
/usr/local/bin/ncftpput -u backupdb -p backupdb 192.168.102.119 / /root/back/hour/`hostname`-RecordServer$hottime.tar.gz
9 c2 `, f& V- B* P. c3 |) \sleep 209 {7 i L( |! d' \- b+ R
echo upload RecordServer ok!
" m6 T. ~# s" b. Z' Erm `hostname`-RecordServer$hottime.tar.gz -f( y6 m3 N7 F4 {& Y* b5 h, C
3)、日志备份" V" H1 P# l F
每天02:00,将/log/下前一天的日志,进行压缩,然后上传至192.168.1.9服务器。
; H, c0 F5 g# G1 `4 ]) i! T) @& l6 l 运行脚本/root/scripts//upload_daily4 X$ M# m8 l; L
例子:: ?# i, L$ U+ O7 c9 z8 ]
#!/bin/bash9 B3 y. V* A/ t4 O6 @
cd /log/
. _8 d5 k( A( A1 V/ N. a6 bmkdir log`date --date '1 days ago' +%Y%m%d`
2 V+ b7 Q* X% Z+ [- Tmv *.log.`date --date '1 days ago' +%y%m%d`-* log`date --date '1 days ago' +%Y%m%d`) O3 D# i7 D; X" e2 X
sleep 10
% u& n; K: J6 V0 N4 ?, s. htar zcvf `hostname`-log`date --date '1 days ago' +%Y%m%d`.tar.gz log`date --date '1 days ago' +%Y%m%d`& M! }+ i6 q1 h& x% l4 h g
/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
6 S$ ?5 S+ G+ i6 o/ v0 s c- ]rm `hostname`-log`date --date '1 days ago' +%Y%m%d`.tar.gz+ r1 h6 L! I) E2 v: n0 r( l
注:计划任务通过/etc/crontab e来进行设置) H. f7 F" v* M l' g3 |
4)、即时日志备份
% ]( v" j; Q! q1 _4 O+ N0 i% s* n 直接运行/home/ztgame/tools/upload 将最新日志上传至192.168.1.9服务器,方便研发部门查看。
$ C: G2 d2 ]3 O: F 运行脚本/home/ztgame/tools/upload,(如果所有服务器的日志都需要上传,可以运行网关服务器上的/home/ztgame/tools/allupload)
- n, a# o. r& f& C2 {$ U# i% w& M7 U: R; R/ k8 ^' v
================================外网架设===========================. ]' v5 m- d6 R% G
重起完服务器,先要启动MySQL
' Z2 K) z% D% msu - mysql -c mysqld_safe --skip-name-resolve --open-files-limit=40966 {& Y: p- m' p) |% A
cd /home/ztgame
' \4 p: M* w, s; _4 r( Q' u./SuperServer& x5 E6 m# a8 a; p% t0 B a
./RecordServer
0 `& M% w; P* {% e0 I% D./SessionServer
4 i: W N' q" h0 E./BillServer$ E8 X) X. g. v ]" }
./MiniServer
5 b3 f7 m4 i J: C./ScenesServer& ]0 s7 b7 O( M3 \3 b8 a5 E
./ScenesServer! F! h" q) V# }1 t0 N8 \
./GatewayServer6 _, Y O5 q3 b4 S5 e
./GatewayServer
+ p' Y- f9 j8 d./GatewayServer2 H0 _( E. a2 Y
重起服务器命令; d# t) n: C) Z6 ?
reboot
* z/ o' ?0 b% U5 p0 y6 |查找进程ID3 z8 y2 {6 I n4 R* T, t
ps -x9 P& c% E1 h& t4 w5 z( u) t9 t+ M" p
结束进程# J! ^6 q0 J2 K3 T4 |8 Z
kill -9 进程ID. }; F- P- o6 X. K/ b
2 h" A0 E5 C3 D: h
================================内网架设===========================
) N+ q" f/ J! m/ `$ Q, ~6 }首先 192装MYSQL 配置文件 config.xml 所有带帐号的都用内网 还有superserver port=10000125.89.63.7/superserver
6 ~8 B* V* i( K: L J& n然后 把数据库内serverlist 全设置成内网192的IP (有可能有几个得设置成另一台机器的内网IP); Q2 q2 u) A8 Y# W1 A
然后 把另一台机器装上数据库和服务端,执行:
3 {3 M: Y! R; ?6 ?& z+ p+ n# F. P8 X" g$ ^& i
su - mysql -c mysqld_safe --skip-name-resolve --open-files-limit=40960 A7 d$ c1 H3 \( F" O/ f8 X
cd /home/ztgame4 N( w8 p/ l6 O0 K7 A- S0 f
./SuperServer
' @# b9 F5 H A$ b) {1 o x./RecordServer+ P/ X4 R i+ b/ I. h& [, j0 Q( L; [0 K
./SessionServer
7 a0 m3 z$ w5 j: \./BillServer
P% d& D3 ^( Z. F' ^% | U" m./MiniServer2 d" S* k9 O' W- K
./ScenesServer& ?$ c g) z8 ? W
./ScenesServer/ W% h* t- [$ j% v5 w$ y
./GatewayServer
8 A* K# d w7 o6 K1 i3 I( a0 L./GatewayServer
9 W2 k1 e a) }./GatewayServer
% |. y6 i* `+ X4 g这样应该另一台机器就能运行了。
- `6 d. w( z: y' {明天进行尝试,同样适用与一个IP架设(估计)
% e; o' n2 W: r2 F7 D下载地址:
|