Pomelo分布式部署方案

一 配置文件servers.json的配置

20180828170210505.png

以connector服务为例我们想要在几台机器上部署该服务,对应的json文件connector元素下就有几个子元素。此处我们是在三台机器上部署,因此就有三个子元素,每个子元素包含了每台机器相应信息。

参数解读:

  1. id:在pomelo框架里面每个服务都有一个唯一的id。
  2. host:服务进程所在的主机ip。
  3. port:每个服务都是一个单独的进程存在于服务器之上,因此会监听一个单独的端口。这里的host和port也是服务之间进行rpc调用时候必须用到的,因为rpc调用走的是内网,所以不需要走外网。因此我们也可以把port理解为内网端口。
  4. clientHost:这是提供给客户端调用的ip地址。
  5. clientPort:这是提供给客户端调用的ip地址的端口,客户端调用是要带上此端口号,因为一个服务在一台机器上会复制多个进程,不同的进程监听的端口号不同,因此客户端访问的时候必须得带上端口号才行。
  6. frontend:如果为true说明该进程是前端进程可以提供给内部进程进行rpc调用和客户端调用,如果为false该进程为后端进程,只能提供给内部进程进行rpc调用,默认为false。
  7. clusterCount:pomelo框架提供了一个很人性化的子进程复制方式,比如:我们这里配置connector服务的clientPort参数为:6200++,clusterCount参数为:8,pomelo框架在启动时会对此框架进行解析,会在本台机器上依次创建8个子进程作为connector服务,8个进程监听的端口为:6200—6207。如果clusterCount参数缺省,那就在本台机器创建一个进程,同时把port或者clientPort参数改为:6200。

二 服务器负载均衡方案

ULB(UCloud Load Balancer)是负载均衡服务,即在多台云主机间实现应用程序流量的自动分配。可实现故障自动切换,提高业务可用性,并提高资源利用率。

下面我们说一下客户端到服务器是如何路由的,每台机器gate服务监听的是61506157端口,connector监听的是62006207端口。首先我们会有一个域名绑定到ULB,客户端是使用域名来访问的,用户的请求首先到达ULB。经过ULB负载均衡之后请求到达六台服务器48个gate进程其中一个。gate进程收到请求后对userid和24进行取余计算后(三台服务器共有24个connector服务),返回其中一个connector服务的clientHost和clientPort给客户端。客户端通过这个ip地址和端口号连接到相应的connector服务上,到此客户端到服务器的长连接连接成功。

gate服务通过对userId进行取余之后,相当于把所有的用户平均的分配到了24个connector服务上。为什么是24而不是48呢?六台机器分为两组,方便之因为我们是把后的代码热更新。

三 Pomelo分布式系统的代码更新方案

项目上线之后,总会有一些小需求需要立马更新上线,用户正在玩着游戏,立马停机重启项目,太暴力了,对用户的伤害很大。好在我们的项目是小游戏玩一局的时间是两分钟,本局结束时候进行重连。那我们的更新方案是:六台机器分为两组,如果有更新需求的情况,通过ULB路由设置把新连接都路由到第一组的gate服务上,等待三分钟后第二组的用户已经结束游戏,长连接都断开了,此时重启第二组,启动之后开启ULB路由到第二组的操作。到此第二组的代码更新成功,同理第一组重复上述流程。

六组机器分为两组的另一个好处是:在其中一组出现故障的情况下ULB会把请求都路由到可以使用一台上。

四 服务器的启动

项目部署在六台机器上,都是放到同样的目录路径下。六台机器的代码一样,六台机器分为两组,每组的配置文件一样,不同的组配置文件不一样。

以第一组为例,选定一台作为主机,其他的两台为从机,进入到主机的game-server目录下运行如下命令:

./node_modules/pomelo/bin/pomelo start --env=production -D
image.gif

--env=production表示读取线上配置文件启动进程,--env=development表示读取开发环境的配置文件启动进程。

执行该命令后主机会一次启动主机和从机上的所有进程,这里因为主机和从机的项目目录一致(约定优于配置的原则),主机通过ssh找到从机的项目目录启动进程,所有的进程由主机上的master进程管理和监控。我们可以通过master获取到所有进程的状态和详细信息。

最后别忘了开启ssh端口(如果你每台服务器ssh默认端口不是22的话),因为主机是通过ssh来启动从机的进程的,不开启ssh端口服务启动不了。

app.configure('production|development', function () {
    var env = app.get('env');
    if (env == 'production') {
        app.set('ssh_config_params', ['-p 59622']);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,600评论 2 57
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,053评论 0 8
  • 18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将...
    张芳涛阅读 3,371评论 0 13
  • 前言 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛。server.xml是T...
    余平的余_余平的平阅读 1,935评论 0 23
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139