软件简介:
% Z+ w) C( J- {7 e: g" D服务器要求Intel 64位CPU 2G以上内存!本人测试一台INTEL 3.2CPU 2G内存服务器三个国家300人左右不卡!7 P- _2 x" w* x, {
此端差一个帐号管理程序,希望有能力的朋友研究出来!本版本为1.04完整官方征途服务端!
9 N2 H$ m! d6 I游戏服务器注意事项 ^% [6 f' B& A$ ]" j3 ^
一、硬件的安装3 ?+ _. e3 R2 }3 Y; q: \- o" c
1、保证服务器风扇正常转动。7 T# _5 N0 L: g; L9 F2 R" g
2、保证服务器各个提示灯是否正常。; ?8 Z( S9 l0 M4 M7 a; A
3、开机察看服务器有无报警情况。& j5 t) N- o& P+ {/ G
4、开机察看服务器能否正常启动(不插鼠标键盘的情况下)0 N! Q! Y: Z( U7 }' ?- d
二、系统的安装
1 p3 T j4 V5 i$ ^+ m' R* J" o } i安装RHEL 4.05 J, U) }3 R$ a8 F) n8 Y% Y. y
选择自动分区。 D5 L8 J" l- ^% g
分别给2块网卡配置ip,方便以后配置。) l5 t& K' t- @* ~
不启用防火墙。' X8 _ l/ l- {: k5 j) O1 c. K
增加中文语言包。' J9 I! ]. I/ _7 O9 C; O
选择软件包时,只选择开发包.6 x5 I) a5 `/ I4 S; O8 \8 z
三、系统的简单设置
8 n; h: z L" B3 Q/ i1、防火墙的简单设置:. F9 f, U0 O3 X1 _- z5 Y
vi /etc/rc.d/forward7 [" G5 Y. p/ w4 H& c# O
内容:
: S, k, M5 o, k; i, y#!/bin/bash
, A+ u. e- n$ i6 T6 K/sbin/iptables -F
# n2 V( P7 U6 r/ ?/sbin/iptables -F -t nat
+ L; n1 s: x, \8 [, p/sbin/depmod -a
1 {/ k2 z0 ?) W8 O# L" u) M/sbin/modprobe ip_tables( c$ T2 f `* d+ _( \8 |
/sbin/modprobe ip_conntrack
( V8 `) F" K' L7 H7 `/sbin/modprobe ip_nat_ftp3 _# Q- L- X4 r+ o
/sbin/modprobe ip_conntrack_ftp
# S; i! V' T" E: } S* ^/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT [$ j: V0 F1 K
#sshd( [8 Z; u9 w$ K1 V! G" g( g9 j
/sbin/iptables -A INPUT -s 218.80.198.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
& F& k5 ^( O* u3 Y& C" `/sbin/iptables -A INPUT -s 192.168.0.0/16 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT* g3 G( t0 m& J& [' R
#ftp server
% l3 e, ^7 c! Y% q4 W8 ~#/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
7 A% w1 m7 Y1 [#/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT- Z' I" \0 ~5 ?
( ~' x7 {' s5 B/ I4 [8 Q# ~* O
/sbin/iptables -A INPUT -j DROP- Q1 c% E/ I7 h% P- u% v4 K9 W
保存后退出。5 e5 S" ~1 @# P% }
chmod 744 /etc/rc.d/forward
4 m. _9 {1 K' \ 然后运行防火墙脚本,以后根据需求修改脚本。
& ?1 { S2 J8 J4 w9 ^8 `) V, w+ R- u6 b2、设置系统自动启动防火墙4 J0 e. S% e/ n" @% V
vi /etc/rc.d/rc.local8 j% k+ G8 G( a% w. K* U) S
增加一行
; U/ Z, f5 Z5 z! \* p8 b3 l /etc/rc.d/forward
! o4 I3 k$ D7 a1 Z. N 保存后退出" h4 Z) _9 `+ r. q* _' v: Y$ a
3、设置文件打开数
K$ p" j" V2 ^. J# a6 J; }1) 修改/etc/security/limits.conf 增加2行:
" N( ]8 }7 \0 v6 t' s' |* soft nofile 4096# w3 M' m& y& K3 w1 e
* hard nofile 65535
0 |8 Y: V& H# H( k5 k% v, W$ {4 ~2) 修改/etc/pam.d/login 增加1行- }9 M H8 W3 O) ~& c
session required pam_limits.so
: Q1 j( `) x/ `$ y/ p可用:$ B/ i% u% }, Q" Z
echo * soft nofile 4096 /etc/security/limits.conf
g1 H8 B k5 i+ [echo * hard nofile 65535 /etc/security/limits.conf# f- {/ ^. ?+ c+ h0 ?( M2 L
echo session required pam_limits.so /etc/pam.d/login( `* P8 p! N0 M! b+ h8 z# x7 b
4、修改默认语言
1 u% p; g/ p6 H# A, k2 d* @7 m vi /etc/sysconfig/i18n 修改
. k+ k! Z: Q, lLANG=zh_CN.GB2312
) |# z8 |0 E# y& T新建游戏运行用户ztgame,设置密码
3 a9 ~1 a% D) x; @1 {1 ^* ~/ ruseradd ztgame; W: N: F; D9 {3 \5 R: x- q
passwd ztgame) H" A Y) S2 p8 ?/ z1 x
用ztgame用户登录服务器,修改vi /home/ztgame/.bash_profile增加一行5 F" x3 p, H- R; Q) y5 o% G0 A8 n, B
ulimit c unlimited
* S$ z' N" K" ? 保存后退出。
# H3 W' T4 t# `四、游戏环境的搭建(按照4台网关服务器,5台场景服务器,1台数据库服务器的构架)1 R7 z5 c+ w6 e1 a9 w6 F
1、服务器IP设置; ^/ j# M- T ]( r' W3 ?
4台网关服务器配置外网ip和内网ip,5台场景服务器和数据库服务器只配置内网ip,并且服务器默认网关为第一台网关服务器的内网ip。! d# y7 \6 ?+ ^2 U
服务器以服务器应用-序号-机房序号命名(例GWServer01-CHJ01)。
7 h0 u" ~ B8 q修改/etc/hosts。; h) l: T) D, f
例子:
7 n( t/ `, W7 L- e127.0.0.1 GWServer01-CHJ01 localhost.localdomain localhost
6 V- |* E1 E9 @, q* L192.168.100.101 GWServer02-CHJ01, z5 X6 p ^, |6 m
+ v# v# X# H/ q7 c192.168.100.104 ScenServer01-CHJ01; _8 S" ^" x# I }9 |
$ c X5 K) k( z( z' K6 C192.168.100.109DBServer-CHJ01, F2 h- D% c6 B1 r
2、公钥的生成7 W$ \: B% Z, H$ k' P4 h
在ztgame的用户下登陆第一台网关服务器,输入ssh-keygen -t dsa7 o! L9 m% \3 y" c& ^( S1 P, }
接受 ~/.ssh/id_dsa 的默认位置。输入一个与你的帐号口令不同的口令句,再输入一次来确认。公钥被写入 ~/.ssh/id_dsa.pub。密钥被写入 ~/.ssh/id_dsa。" A) M3 {/ Q) a! m/ j5 @
使用以下命令改变你的 .ssh 目录的许可权限:
9 w9 ~6 Y# H0 ~1 {3 \2 `* ?5 P; M Lchmod 755 ~/.ssh0 A q: w. A9 w9 W" R. f
把 ~/.ssh/id_dsa.pub用scp命令传到其它剩余9台服务器' F8 ~, W% x9 S8 F2 q/ W& @9 j
scp~/.ssh/id_dsa.pub ztgame@192.168.102.108:~/.ssh/authorized_keys' s, z$ F+ V+ L+ R& U; g
在其它9台服务器下使用以下命令改变你的 authorized_keys 文件的许可权限:
# }' G3 n/ ?3 v# r1 x echmod 755 ~/.ssh
" ?6 M2 S4 D/ a- E9 m7 z" Cchmod 644 ~/.ssh/authorized_keys1 e+ q o1 j2 @- b4 }) H
3、数据库服务器的安装
9 D2 `5 c1 w0 V#首先确定你是root用户
" `* n& G- E6 |: t# S+ {: @! P获得mysql-4.1.*.tar包,用tar zxvf mysql-4.1.*tar解开压缩包,然后进入mysql-4.1.*目录" F, e* Z9 G# G
#根据体统类型选择编译方式: f' M/ E$ p1 J. r
#i386体系结构的/ _+ g/ U& S# @: ]
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
8 u4 P6 l: L$ p#64位系统,x86_64
& b4 D5 i5 t' K) SCFLAGS=-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. O+ y# W- h# F7 n2 J# p/ t, b
#然后根据CPU数量进行编译; }/ b& V' O" B
make -j 4 PATH=\/usr/local/mysql/bin:\$PATH\ /etc/profile /usr/local/mysql/bin:$PATH
6 b$ f& w- [, x4 Z" p" p- P4 `#strip可执行文件
7 x+ ~$ c; f; g+ {strip /usr/local/mysql/libexec/mysqld
4 ~4 O+ e8 `/ U w. n6 r#添加LIB PATH! Z$ M2 L/ f8 X( A" @7 a- Y
echo /usr/local/mysql/lib /etc/ld.so.conf mysql_install_db
" R4 W: Q( \; _) T0 \) r& P; F- R#启动服务器
3 g% J# T& ]( N3 psu - mysql -c mysqld_safe --skip-name-resolve --open-files-limit=40969 O9 J5 S% [/ w) U6 w
#创建数据库和用户
3 s$ _$ i ^/ k7 ~9 j1 yGRANT ALL PRIVILEGES ON *.* TO ztgame@'192.168.1.%' IDENTIFIED BY '' WITH GRANT OPTION;
& h# t* j0 x% B# e+ vGRANT ALL PRIVILEGES ON *.* TO ztgame@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;
1 Z* {# _6 I9 N! s+ W) AGRANT ALL PRIVILEGES ON *.* TO ztgame@'222.212.121.119' IDENTIFIED BY '' WITH GRANT OPTION;/ k% {7 w6 U+ ?1 v5 `
GRANT ALL PRIVILEGES ON *.* TO ztgame@'222.212.121.119' IDENTIFIED BY '' WITH GRANT OPTION;! f$ j9 T) n! B1 x& c+ r, [
4、数据库配置! K3 S0 {! ~5 ~% J B2 R
用mysql进入,然后用create database dbname创建数据库。分别创建SuperServer、RecordServer、Bill数据库,然后用安装包目录下的*.sql的文件建立相应的表。(SessionServer.sql也导入到RecordServer库中)。
7 Y5 _: n0 n5 \" @8 r/ W在SuperServer数据库SERVERLIST表内添加服务器配置信息。
( s3 U0 U" V* {8 t0 A/ I6 F例子:2 k+ @6 R8 c. y" ^7 p- u$ ~
INSERT INTO `SERVERLIST` VALUES (1,1,'SuperServer','192.168.1.130',10000,'192.168.1.130',10000);
# c X2 S2 S4 u# w3 x. tINSERT INTO `SERVERLIST` VALUES(20,20,'SessionServer','192.168.1.130',6000,'192.168.1.130',6000);
' U3 D0 N* {1 B6 hINSERT INTO `SERVERLIST` VALUES(21,21,'SceneServer','192.168.1.130',6010,'192.168.1.130',6010);
) w1 A, ]% Q' b* E' ]+ G# m1 n: NINSERT INTO `SERVERLIST` VALUES(22,21,'SceneServer','192.168.1.130',6011,'192.168.1.130',6011);5 m+ ~: k8 \4 q# E
INSERT INTO `SERVERLIST` VALUES(23,21,'SceneServer','192.168.1.130',6012,'192.168.1.130',6012);
( }2 K1 B6 _% v3 E/ B3 MINSERT INTO `SERVERLIST` VALUES(24,21,'SceneServer','192.168.1.130',6013,'192.168.1.130',6013);
9 N3 `# B$ U2 jINSERT INTO `SERVERLIST` VALUES(25,21,'SceneServer','192.168.1.130',6014,'192.168.1.130',6014);
Q5 u+ b( e( C* @9 ?) l" k z; kINSERT INTO `SERVERLIST` VALUES(2200,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);3 X* r. M1 R# s
INSERT INTO `SERVERLIST` VALUES(2201,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);
: }0 m, E+ v, e/ o$ @3 s3 \INSERT INTO `SERVERLIST` VALUES(2202,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);
U- A3 V& Q( a( [9 DINSERT INTO `SERVERLIST` VALUES(2203,22,'GatewayServer','192.168.1.130',6020,'192.168.1.130',6020);$ D3 \6 Y E' L( t4 J
INSERT INTO `SERVERLIST` VALUES(11,11,'RecordServer','192.168.1.130',7010,'192.168.1.130',7010);% l- m+ |% I9 q" K+ X3 D" |8 W
INSERT INTO `SERVERLIST` VALUES(12,12,'BillServer','192.168.1.130',7020,'192.168.1.130',7020);
& h% t, D* ~) Y9 y; G: H数据库服务器上跑SuperServer、SessionServer、RecordServer、BillServer四个服务,4个网关服务器分别跑4个网关服务,5个场景服务器分别跑5个场景服务。场景服务器对应的ID就是国家配置的ID号,这个ID号决定场景服务器上面跑几个国家。: [) b' E/ N( w3 P q
五、服务端的配置和安装3 t2 C q( f' s$ @8 u& D d
1、获得安装包:( x9 P+ a: w- [& X; z# X
release-version.tar.bz2+ U9 ^% j0 m( I
map-version.tar.bz27 J, e" \9 x5 o' f. [4 ]* ~
在/home/ztgame下建立以时间为名字的目录(game20050928),压缩包放入此目录,然后用tar jxvf release-version.tar.bz2 和tar jxvf map-version.tar.bz2解开压缩包0 B/ K1 H% Y" U0 T
进入release目录,cp rf ../map .* ~( m/ j1 J8 q+ ]& A9 F& P
按照config.xml.example格式创建文件config.xml% Z2 j2 R3 G/ z; n0 i
配置文件主要定义了服务器的各种参数:
7 E e8 u9 U; t$ c/ J1 ~[global]这段主要定义了通用参数,如服务器本地网络设备名称,扩展网络设备名称,日志级别,SuperServer的服务器地址,端口等参数。
* a, r4 N: r( I其他各个段定义了具体的服务参数,主要是指定该服务对应的数据库,数据库的连接地址,端口,用户名,密码等数据库连接字符串。每个服务可以定义日志文件的存放位置,如果没有指定,缺省放置在/tmp/目录下面。
; [8 _" }' v! U8 E9 F; y如SuperServer服务
w' g3 x& g' n; |! B% m3 QSuperServer! b! M4 U7 }& s6 k( W
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--5 e* A+ C/ |2 |! ]: [' {
mysqlmysql://test:123456@192.168.2.14:3306/SuperServer/mysql
% t2 b! J4 N- Q& E m logfilename/home/test/tmp/superserver.log/logfilename8 B# i: q+ G- B' x
/SuperServer
# H- p+ L O4 \8 P上面配置指明SuperServer服务,采用连接串用户名test,密码123456,访问192.168.2.14服务器上3306端口下SuperServer数据库,日志文件存放在/home/test目录下。其他服务配置类似。; \% N e1 Z9 B( N! P% y4 s
例子:' o0 b9 T5 Q$ n9 A! d9 {
?xml version=1.0 encoding=GB2312?
$ k8 L4 `) _, c! A6 W+ ^!--所有各种服务器参数--
3 w- A- {9 q6 c+ B! p# w- \0 WZebra: K3 i* |7 T& [
global
+ D. V4 A$ x8 a; S7 U!-- Specify the log level[debug,info,warning,error,fatal,always]. --
, J6 u* A3 b# p% tlogdebug/log
% U" E+ I# }$ c9 i!--MySQL database connection[mysql://user:passwd@host:port/dbName]--
! v5 ~( _4 V- \9 D1 Z. B!-- Use the specified local network device. --5 u0 r+ b" S& q- B$ k: V
ifnameeth0/ifname* z/ o! M) J, n. H/ U
!-- Connected to the specified supserserver, property 'port' default value is 10000. --
9 @5 J" A5 N8 U! f' U/ R5 u/ b: }superserver port=10000192.168.104.109/superserver7 ~" s# D3 S1 [$ U, @& h2 l
/global
/ ]6 \1 c- \: @7 ~6 O) USuperServer* O3 _. q1 A" p3 Y+ X, t% X$ M4 s; C) b
!-- 统一用户平台登陆服务器列表文件 --4 t! p( o) V3 s- ^$ ?) ~( k) Y& c
loginServerListFileloginServerList.xml/loginServerListFile
. ]4 _8 h7 Y- N/ W4 l1 ~& k K !-- 角色名称唯一性验证服务器的地址 --
* K" N) H4 H$ p RoleregServer port=9901218.80.198.252/RoleregServer
% X2 a& ~$ A! j# D !-- 服务器信息采集的服务器地址 --7 F' T" d* a$ G$ d7 T8 B2 }
InfoServer port=9903218.80.198.252/InfoServer$ \/ o7 q4 s/ H6 H: w8 \! ~2 X0 O3 L
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--1 p6 v7 [% z4 c5 D
mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/SuperServer/mysql0 f$ \( @2 y2 r6 |- m0 E/ B: S
!-- 如果要编码mysql连接字符串请使用工具,配置如下面的例子
7 n: R, l% q4 e+ N1 V* C' ^3 } mysql encode=yeslmOf.1kySwS0a09j11xyCdI1ySujl1hnCvT0hDitT0hjzv00gzSv00gDSw91tS9fE1/mysql! W) [; V6 V& X1 ~
--
5 p. M0 C# T+ e logfilename/log/superserver.log/logfilename- u# \, q" @/ c1 U% X" L2 [
/SuperServer
( ~! C2 {6 t0 f1 DRecordServer
9 q( m0 C# {4 O5 g!--MySQL database connection[mysql://user:passwd@host:port/dbName]--; Q- [7 f( J; {( a2 _
mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/RecordServer/mysql9 V* ?3 e( m r' {
logfilename/log/recordserver.log/logfilename R) I$ r3 v* U; ~
/RecordServer6 f/ Y6 |' N# m3 M# |! ^
BillServer
+ B; K' x; a* C( F/ d* ? !--MySQL database connection[mysql://user:passwd@host:port/dbName]--
4 G9 }" d. T0 l$ Q$ c8 f& I6 M mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/Bill/mysql } s; {9 w* F/ C1 ]& T: A
logfilename/log/billserver.log/logfilename
3 |( U L# m7 T8 |6 \- K. v2 u/BillServer
" p) U/ |+ @5 L& E5 y% cBillClient2 W; o5 \+ L, x: a4 x
!-- 交易记录log文件路径 --
* {* d5 ?6 C8 B# u. Q4 ytradelogfilename/log/clienttrade.log/tradelogfilename
) R" g3 ^7 a: `: b* q2 G/BillClient. o' j$ M# _' N, k/ P5 x" S' N
SessionServer+ E$ F! X- m t' s. h% y
!--MySQL database connection[mysql://user:passwd@host:port/dbName]--
# _1 p: ?+ y; Z9 f' w5 ] mysqlmysql://ztgame:yS29wahvCH@192.168.104.109:3306/RecordServer/mysql
( X0 }$ M5 o }% z0 Llogfilename/log/sessionserver.log/logfilename
# D9 `. @7 z" m" Q3 k+ q9 F2 ~0 W3 Ndare_active_time3600/dare_active_time, {: o1 P/ q: g9 a& \& D
offlineMsgPath/log/offlineMessages/offlineMsgPath; @+ M* }/ o: w5 V$ Y& I% u
/SessionServer/ |* T0 n* N- O0 d- Z0 w
ScenesServer
% z( A1 d9 `! a* |; Jsceneinfofilescenesinfo.xml/sceneinfofile
7 {: Z% t/ q6 n* m" } _- v. \ npctradefilenpctrade.xml/npctradefile
9 [/ U2 S5 b' a messageSystemFilemessageSystem.xml/messageSystemFile& `0 N: D& s8 C
charinitinfoFileinitcharinfo.xml/charinitinfoFile. a: U6 R9 @7 E# ]: z/ ?( b
magicrangeFilemagicrangefile.xml/magicrangeFile6 J x! d; b; R: x
questdirquest//questdir
& v! y- K- y7 ^ mapdirmap//mapdir$ D( W. Z2 G0 {5 J4 }
tbldirmap//tbldir1 ?+ S9 {8 `# s: b# L T
gm_logfile/log/gm_log.log/gm_logfile
# p1 |+ w, u+ e; [2 S0 Q !--回写档案平率(单位是秒) --$ ~4 r5 `8 e0 o
writebacktimer300/writebacktimer
3 P0 k+ I1 W. V0 vossdir/log//ossdir) p8 a4 B1 ~2 I1 ?% z
logfilename/log/scenesserver.log/logfilename ; i3 }' u3 ]" ^
/ScenesServer
& W8 ]9 T" x% r. P! iGatewayServer. _/ I- r) J- M, Z% v
!-- 国家排序方式 0:不排序 , 1:在线人数排序 , 2:注册人数排序 --
( f# U0 p- G7 v1 W1 {; b1 t/ g countryorder2/countryorder/ y( f! Q) X3 O. `6 G3 T
logfilename/log/gatewayserver.log/logfilename
* V' y+ g9 \, c& S' ^ sceneinfofilescenesinfo.xml/sceneinfofile
1 l+ a- k" B9 p rolereg_verify1/rolereg_verify, J3 X, |6 Y; h, b1 C _9 b
forbidWordsFileforbidWords/forbidWordsFile" ^% p) _% ], g# j/ k V2 F4 ^8 b
/GatewayServer
; C% B4 a# z2 X7 q( V& w/Zebra, u5 F8 C9 @1 q+ a
注意存放日至的目录是否建立,以及建立session服务所要求的日志存放子目录offlineMessages。
7 w1 O! N* I D修改loginServerList.xml,填入平台中心的FLServer服务器ip以及端口。
( w6 o8 ?0 S! W' S) \0 S) m2 {例子:$ o, H/ h5 B* I7 m: ^! _2 y+ u2 b
?xml version=1.0 encoding=GB2312?6 Q7 o9 ~9 M* \, v* `1 D1 h3 S
LoginServerList
; z0 {3 M ?* f% o" t4 s- z server ip=218.80.198.252 port=7001/5 b5 L i# H$ R4 t6 t
server ip=210.22.188.20 port=7001/ 6 w. n9 b) ^! O, m$ o! T- y7 c
/LoginServerList. ^: d% F9 ~1 w0 A+ a
然后将修改好的版本传至其它9台服务器。并启动服务
% t; R! `6 ]; {- _2 L* f4 s; {" j六、服务器的启动,停止和更新* n( i3 Z2 k9 O
1、将运行脚本传至各个服务器。" q' `% `8 E( S S& G, @
2、开启游戏服务
! q. q3 t8 v+ [8 t5 o$ V通过ssh使用ztgame用户远程连接至第一台网关服务器,再通过网关服务器连接其他9台服务器,0 @2 h i% y' i- `
10个窗口内分别进入最新的服务端存放目录/home/ztgame/game200508**/release/7 [; ?' c0 C+ d) d( I
数据库服务器 启动服务./SuperServer -d 和 ./SessionServer -d 和 ./RecordServer -d 和 ./BillServer -d0 d2 D, G7 y4 l7 t" ^" \
场景服务器 启动服务./ScenesServer -d
2 J5 |1 k! K. X9 Y& S( c网关服务器 启动服务./GatewayServer -d
! D: n' @- m# J# g) P+ r/ v/ u以上操作可以通过/home/ztgame/tools/allstart game200508**来启动(由于程序是后台运行,所以如发现程序运行时间过长,可以CTRL+c中断,并不影响程序的正常运行。)
, M& y- j4 Y# p0 K4 w0 k) P- K
* \4 G, h$ l K) ]3 R3、停止游戏服务3 L8 j; D/ `" H% W- \
通过ssh使用ztgame用户远程连接至第一台网关服务器,运行/home/ztgame/tools/allstop,中止所有服务/ q- g U2 h8 p6 f4 j0 W9 E# N
,此脚本是并不是强行杀进程,所以如果发现进程无法kill的情况,用/home/ztgame/tools/allstop_9来强行杀死进程。& A) o* R5 J4 H
4、查看游戏服务0 t6 c4 a2 L( h: `
通过ssh使用ztgame用户远程连接至第一台网关服务器,运行/home/ztgame/tools/allview,查看所有服务运行状态。2 s0 S0 [& @( B9 g, Q( u O
. a+ ~ N% d3 |; a
5、更新游戏服务
% H8 T* A* v( r: W4 \. x7 r通过ssh使用ztgame用户远程连接至第一台网关服务器,再通过服务器连接其他9台服务器,& }- s" r) ^+ b6 r% B. B
分别在/home/ztgame目录下面建立最新的服务端存放目录game200508**.
# S3 O/ e1 @$ R3 B4 u然后将服务器端安装包通过scp传到第一台网关服务器,在game200508**下解压。) V3 ~9 r# J2 e0 ^. E6 y8 L0 Z
tar jxvf zebra-release-*****2 _5 @% x0 k4 Q% p# h4 O% O
tar jxvf zebra-release-*****
5 \7 d. G. }, @cp map release/ -rf
! W2 n/ s8 {: P- B I* b' A然后从上一个版本里拷贝出一些配置文件覆盖源文件3 w" b, o' N- s8 M
cp /home/ztgame/game_old/release/config.xml /home/ztgame/game_new/release/8 ^: N% I% }3 w+ F
cp /home/ztgame/game_old/release/loginServerList.xml /home/ztgame/game_new/release/" ?0 W, ]4 m+ K. x H6 I/ j
cp /home/ztgame/game_old/release/messageSystem.xml /home/ztgame/game_new/release/
1 V: Q' p# n0 n* |, B+ H以上工作准备好后就可以将网关服务器上的版本传到其他服务器' U: }# R5 L$ V1 P1 s
scp -r /home/ztgame/game_new/* ztgame@192.168.100.111:/home/ztgame/game_new
* s% W" ` @' j8 z以上操作可以通过shell脚本来实现0 B. [- v% ~' I5 k) c( a
/home/ztgame/tools/installPackage game_new game-old
! j: |1 y+ B' [: j2 }2 g七、服务器数据的备份! N, }3 z7 M' y @ s) w
1、数据备份
$ ^- C f' @/ [: a5 E2 R为了防止意外情况的发生造成数据的丢失,关键数据或整个系统或对有选择的系统部分,在本地和异地进行定时备份,以保证系统全部或部分在灾害出现时也能持续运行。
! n. y! f; _( r. @; Q% \7 O4 X2、具体方案
5 _ o: L/ K/ A" l1)、数据库每日备份
F7 A: b) ?* X7 s; Q$ P* m 每天4:00,将RecordServer数据库拷贝至/root/back后进行压缩,然后上传至192.168.1.9服务器上,/root/back留有压缩版本。
* X$ v3 M) M8 X 运行脚本/root/scripts/back.sh, O) W# m0 ~8 d9 Z+ i) d8 N1 P
例子:
! m& k$ K* ~+ r+ a# N' Z#!/bin/bash4 z; p3 W2 }& ]. N$ I$ @8 C
rm /root/back/RecordServer/* -rf( P/ @6 s2 Y8 {' D
/usr/local/mysql/bin/mysqlhotcopy RecordServer /root/back/RecordServer -u ztgame -p yS29wahvCH, n$ V D3 F+ L2 S* X
sleep 50 h9 N3 p! n& r' u
cd /root/back
( z$ _4 m, ?% [9 K L( Q( ftar zcf `hostname`-RecordServer`date +%Y%m%d`.tar.gz RecordServer6 F. Z2 i. t: `7 z* z
sleep 5/ C1 ]! P* b5 a
echo tar ok!+ j% @# Z! f! A3 y& [
/usr/local/bin/ncftpput -u gamebak -p gamebak@ztgame 218.80.198.234 / /root/back/`hostname`-RecordServer`date +%Y%m%d`.tar.gz, p' q5 B2 |5 M+ j$ d5 X: Z
sleep 202 s* d5 g# Z& R9 B( Q
echo upload RecordServer ok!
2 m3 t* N. D- S, W2)、数据库即时备份$ T. X- y. C/ q8 I5 H. n$ K
每隔半小时,将RecordServer数据库拷贝至/root/back/hour目录进行备份,然后将压缩文件传给特定服务器。; x" i4 G) z+ ~2 H" f! l
例子:5 r& I. w% d {* @7 c5 P* y
#!/bin/bash
- y% k5 @2 p$ f1 r/ q! T3 Z) Rhottime=`date +%Y%m%d%H%M`- p; B' J' O3 V. D+ }; }0 _' w
mkdir /root/back/hour/RecordServer$hottime
: d8 c$ q: Y2 [9 W/usr/local/mysql/bin/mysqlhotcopy RecordServer /root/back/hour/RecordServer$hottime -u ztgame -p yS29wahvCH
0 D5 u7 b# Q& A* g8 Vsleep 5
; i3 L) R1 B3 Y. Qcd /root/back/hour
) B/ P3 P8 @2 gtar zcf `hostname`-RecordServer$hottime.tar.gz RecordServer$hottime* _* Z- E) V9 K |
sleep 5" U% s4 \2 s9 r2 u
echo tar ok!
4 A6 U/ \9 f3 i( [4 O/usr/local/bin/ncftpput -u backupdb -p backupdb 192.168.102.119 / /root/back/hour/`hostname`-RecordServer$hottime.tar.gz5 U9 R& F& {& X! M9 F
sleep 203 y2 Z0 O" S- r
echo upload RecordServer ok!
( b( N# k7 U: W* G: yrm `hostname`-RecordServer$hottime.tar.gz -f
" A! E7 W6 D) O/ ~( a6 Y$ }* o3)、日志备份
; `1 e' M# [" f* i, }6 K 每天02:00,将/log/下前一天的日志,进行压缩,然后上传至192.168.1.9服务器。; W9 [. R4 P; q, A
运行脚本/root/scripts//upload_daily
9 k. {% @: W* j' h. ]( n: H例子:
" e& Z' m, U) {! W$ I3 \8 T#!/bin/bash) t# F$ G4 z' ?) ~7 @8 @
cd /log/* b2 Q1 _. D% J- e
mkdir log`date --date '1 days ago' +%Y%m%d`
$ `+ m% D, ~7 }; o9 f: n! [mv *.log.`date --date '1 days ago' +%y%m%d`-* log`date --date '1 days ago' +%Y%m%d`) h6 s6 ^; y0 t
sleep 10: g0 C+ A4 J2 u
tar zcvf `hostname`-log`date --date '1 days ago' +%Y%m%d`.tar.gz log`date --date '1 days ago' +%Y%m%d`
9 E+ o) ?% g# Z/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% n9 ?2 F) G3 |5 G2 A3 t4 Q
rm `hostname`-log`date --date '1 days ago' +%Y%m%d`.tar.gz
- z! A( l* m, p- F9 g5 r注:计划任务通过/etc/crontab e来进行设置; a; J7 l& ~* L& @) t1 ]8 v
4)、即时日志备份
' g: Y, y9 n+ j. p/ [! O5 W 直接运行/home/ztgame/tools/upload 将最新日志上传至192.168.1.9服务器,方便研发部门查看。6 r+ r+ H% E' Y( C
运行脚本/home/ztgame/tools/upload,(如果所有服务器的日志都需要上传,可以运行网关服务器上的/home/ztgame/tools/allupload)
. q2 v) q0 q& J- j5 L" i9 G- Y! m/ d0 J3 @
================================外网架设===========================
) N" Q2 V2 A$ [' b! P( H重起完服务器,先要启动MySQL- F& y/ f' r1 R# z& n% H* H
su - mysql -c mysqld_safe --skip-name-resolve --open-files-limit=4096# K, L$ R! F; ?" k4 [
cd /home/ztgame
0 K0 i% g4 o! ~" Y5 \./SuperServer
& ^! Z3 G2 ~1 _./RecordServer8 V6 x7 S/ l% t. I: n, v
./SessionServer" x: ]- [& |& e& {5 j- k
./BillServer
+ X( d9 p* P, W& M./MiniServer# ?: ]$ ]8 V9 U9 j( e( F
./ScenesServer
# o4 M0 v7 O/ s' b8 R* T8 x2 A; ]./ScenesServer/ D0 D) X. i9 ^8 z1 M f
./GatewayServer
+ i# N: X/ T: M5 [3 T. D8 S" r./GatewayServer1 C, h3 a1 D: Z8 j
./GatewayServer/ G0 N) u" i. m( t
重起服务器命令) m) c9 [9 j. h
reboot
% z9 P& n. ~: }$ o: u/ D! P查找进程ID
. H. g# c& T1 }9 V* t E! ~/ J. qps -x3 N8 C% @. D& T( [( o6 {& Y) L
结束进程1 V4 J* ^, K: q9 l9 r/ ^
kill -9 进程ID$ H3 a" @. l! V6 R6 p
! V9 D/ c' [, }7 w; v================================内网架设===========================
5 g2 t1 v5 @. C5 J$ q9 `5 K7 ~首先 192装MYSQL 配置文件 config.xml 所有带帐号的都用内网 还有superserver port=10000125.89.63.7/superserver, f l8 y1 c- E4 J% ^4 x+ [
然后 把数据库内serverlist 全设置成内网192的IP (有可能有几个得设置成另一台机器的内网IP)
6 [/ X, Q9 p5 k7 q然后 把另一台机器装上数据库和服务端,执行:
$ L; a$ P/ O( h$ ~9 D
5 c, {6 R$ f! s, h2 h6 xsu - mysql -c mysqld_safe --skip-name-resolve --open-files-limit=4096
8 J' [0 `6 @* K" \6 a' w5 N' X- Icd /home/ztgame
% Y% P3 ?6 N7 K* o( H& `1 D* r7 g./SuperServer
; |: i. Z: d% h1 J- o6 z./RecordServer/ A: i S3 Q1 w* F0 W/ _8 C
./SessionServer; e q* a" B: V
./BillServer. p9 i0 y+ \! M) G: R5 @
./MiniServer
- |( \! y2 n6 a1 ` J- }./ScenesServer
# N3 M' \ `# S1 m) c./ScenesServer" u' Q! m% V/ Y1 N
./GatewayServer* }- D* W; g* u- [& E' ]$ \4 S+ t
./GatewayServer5 D; `/ P- o( m
./GatewayServer6 z" l/ R, K& A
这样应该另一台机器就能运行了。 j+ L1 {- O" n4 [
明天进行尝试,同样适用与一个IP架设(估计)$ B: x2 @, k( K6 G# k. k
下载地址:
|