我不得不承认,我的能力不足以写出一个100%不会宕机的游戏服务器程序,这也不能全怪我的能力太弱,谁让咱国内网游玩家数量庞大,哪个游戏刚上线时没有挤的爆满过?还有些或是猎奇,或是谋私的个人和组织,在制造着千奇百怪,匪夷所思的数据包及操作流程来试探你的服务器。这些都曾是我在服务器宕机后向老板开脱的理由。
如果master异常,则会进行master-slave切换,将其中一个slave作为master,将之前的master作为slave。
为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成
通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。 但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)
1. Keepalived 简介 ---- 1. keepalived 的作用 Keepalived 的作用是检测服务器的状态。如果有一台 web 服务器宕机,或工作出现故障,Keepalived 将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后 Keepalived 自动将服务器加载到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。 2. Keepalived 的特性 配置文件简单:配置文件比较简单,可通过简单配置实现高
Redis Sentinel(哨兵)是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程, 这些进程使用 gossip协议(基于流行病传播方式的节点或者进程之间信息交换的协议,在分布式系统中被广泛使用) 来接收关于Master是否下线的信息,并使用投票协议(agreement protocols) 来决定是否执行自动故障迁移,以及选择哪个 Slave 作为新的 Master (raft算法)
主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工
MMM 即 Multi-Master Replication Manager for MySQL:mysql 多主复制管理器,基于 perl 实现,关于 mysql 主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),MMM 也能对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟 ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。MySQL 本身没有提供 replication failover 的解决方案,通过 MMM 方案能实现服务器的故障转移,从而实现 mysql 的高可用。MMM 不仅能提供浮动 IP 的功能,如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置。这个方案是目前比较成熟的解决方案。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器
我们可以看到 6379 有一个从机,6380 自身也是作为从机(虽然 6380 是 6381 的主机)
哨兵是一个分布式系统,你可以在一个架构中运行多个哨兵进程,这些进程使用流言协议来接收关于Master主服务器是否下线的信息,并使用投票协议来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。
Erlang应用场合 未来的计算是并发计算。现今甚至桌面CPU也是多核的,当用户给服务器购买了越来越多的CPU时,他们更期望能最大限度地利用他们的新投资,但是今天的许多软件系统并不能很好地做到这一点。 整个软件行业也在发生重大变革,由卖工具软件转向卖服务(软件免费,这也是开源软件兴起的过程),由单纯客户端向B/S或C/S转化,相应的存储和计 算向服务器端转移,由原来的PC客户端向客户端多元化(如手机、PDA、电视机顶盒等)转化。这些变革趋势,使得用户可以更方便地访问到服务的同时,服务 器也要承受越来越高的负荷,并行/分布的需求逐渐增加。 Erlang语言不是用来解决所有问题的语言,至少现在还不是。Erlang最初专门为通信应用设计的,比如控制交换机或者变换协议等,非常适合于构 建分布式,实时软并行计算系统。它是一门专注的语言,可以适应现代服务器要求高负荷、高可靠、持续服务的需求。它要解决的问题域包括:高并发、分布式、持 续服务、热升级和高可靠等问题。 Erlang应用实例 典型的Erlang应用是由很多被分配不同任务的“节点(Node)”组成的“集群 (Cluster)”。一个Erlang节点就是一个Erlang虚拟机的实例,用户可以在一台机器(服务器、台式机或者笔记本)上运行多个节点。 Erlang节点自动跟踪所有连接着的其他节点。要添加一个节点仅仅需要将其指向任何一个已建节点就可以了。只要这两个节点建立了连接,所有其他节点马上 就会感应到新加入的节点。Erlang进程使用进程ID向其他进程传递报文,进程ID包含着运行此进程的节点信息。因此进程不需要理会正在与其交流的其他 进程实际在何处运行。一组相互连接的Erlang节点可以看作是一个网格计算体或者一台超级计算机。 erlang的odbc应用程序结构图 Yaws是一个Erlang写的Web服务器。ErLang本身带有一个HTTP Server,叫做inet。Yaws对于inet,就相当于Servlet对于Http Server。Yaws也可说是一个Web开发框架,Yaws的ehtml类似于jsp、 php、ruby template。Yaws并发能力是Apache的15倍,有人利用16台集群服务器所做的显示,Yaws可以承受超八万并发活动,Apache在四千 就宕机了。 erlang和ruby的简单测试 Ejabberd也是Erlang很好的应用实例,也是目前可扩展性最好的一种 Jabber/XMPP服务器,支持分布多个服务器,并且具有容错处理,单台服务器失效不影响整个集群运作。Ejabberd基于ErLang+ Mnesia构建,项目已成功发展5年,占据30%左右Jabber服务器市场。 Tsung则是多协议分布式压力测试工具,可用于测试Http、Soap、Postgresql和Jabber/XMPP服务器。而Wings则是一个3D建模程序,软件支持Windows、Mac OSX和Linux等操作系统,这两个项目都基于Erlang构建。 Erlang将会成为一个非常重要的语言。如果有了大公司的支持,它甚至可能成为下一个Java。因为它是个开源项目,非常适合多核处理、Web服务等领域。事实上,它也是编写在多核机器上运行的高可靠性系统的唯一成熟语言。 Erlang始于20年前,是一个并发性Prolog,Joe Armstrong创造了它。第一个大型Erlang项目是一个由几百人创建的电信交换系统,系统有数百万行代码。系统主要关注的就是可靠性,并且系统有 难以置信的可靠性历史。据Joe介绍,“它有99.9999999%的可靠性”。 这意味着每10亿秒才有1秒宕机时间,或者说10亿分钟有1分钟宕机时间。十亿秒大概是30年,10亿分钟大概有2000年。99.999% 的可靠性大概是每年宕机5分钟,这已经是很好的了。了解可靠性的人都知道,可靠性系统有 99.9999%的,甚至99.99999%的,但是估计没听过有99.9999999%可靠性的,可基于Erlang的系统实现了。 但这还不是令Erlang壮大的理由,因为不是什么人都关注可靠性。也不是因为 Erlang是一个函数式语言,更不是并行Erlang是个面向对象语言。其发展迅速的主要原因是唯一一个有可靠实现和完善类库的成熟的并行开发语言,在 不久的将来所有的桌面系统、笔记本电脑都将是多核的,而要让程序在多核上更快的运行就要使程序能充分利用多核处理的能力。 Erlang带有一组类库。多数类库是用于构建各类Internet服务的。 Erlang有Web服务器和数据库。Erlang社区认为它是构建可靠Web服务器和Web服务的首选语言。Erlang是一个构建可靠系统的框架/平 台,它构建的平台可以持续运行而无需关闭,可以每天更新软件,甚至可以定期的更换硬件。这些特性是电信应用所需要的,它还是在线银行、
1.什么是Nginx? Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器 目前使用的最多的web服务器或者代理服务器,像淘宝、新浪、网易、迅雷等都在使用
一、keepalived简介 keepalived是vrrp协议的实现,原生设计目的是为了高可用ipvs服务,keepalived能够配置文件中的定义生成ipvs规则,并能够对各RS的健康状态进行检测
上篇文章我们说了分布系统存在的意义,基础的线程进程运行模式,进程之间内存是相互独立的,多线程是在进程内部,共享同一个进程里的内存,进程之间也可以共享对象,但是就有了序列化和反序列化的开销。网络通信知识有BIO/NIO/AIO、java通常用的NIO非阻塞,把出现的事件交给event handler处理,不需要一个socket分配一个线程,一个线程可以处理多个socket套接字工作。
前面已经将 Nginx 的大部分内容进行了讲解,我们都知道了 Nginx 在高并发场景和处理静态资源是非常高性能的,但是在实际项目中除了静态资源还有就是后台业务代码模块,一般后台业务都会被部署在 Tomcat、weblogic 或者是 websphere 等 Web 服务器上。那么如何使用 Nginx 接收用户的请求并把请求转发到后台 Web 服务器?
ZAB协议的核心是,定义了如何处理那些会改变Zookeeper服务器数据状态的事务请求。即:
上篇文章Redis的主从复制架构你需要了解!(六)中最后的一个问题大家知道答案吗? 下面让我来给大家解答吧!!!
支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
Redis我们都知道Redis的内容是放在内存当中的,如果我们的安装Redis的服务器宕机了,那么我们在内存保存的内容也就丢失了。在Redis当中给提供了不同级别的持久化的方式来进行数据的保存: RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。 AOF持久化方式记录每次对服务器写的操作。当服务器重启的时候会重启执行这些命令来恢复原始的数据,AOF命令以redis协议追加每次写的操作到文件的末尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。 也可以不运行持久化的方式。
主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。
好多同学在收到D监控宕机通知的邮件后,发现自己网站还能访问,并没有宕机,认为这是D监控的误报。
raft作为一个强一致性的集群共识算法,可以保证当集群多数节点存活时服务可用,但只能有一个领导者,有比较大的局限性。 若是使用同集群多实例方案,所有实例同生共死,当集群非多数节点存活时,所有实例均无法对外提供服务。
高可用集群通常为2台服务器,一台工作,另一台作为冗余,当提供服务的机器宕机时,冗余将接替继续提供服务。 实现高可用的开源软件有:heartbeat、Keepalived,其中heartbeat已无人维护,所以今后使用Keepalived来搭建高可用集群。
Nimbus 资源调度 任务分配 接收jar包 Supervisor 接收nimbus分配的任务 启动、停止自己管理的worker进程(当前supervisor上worker数量由配置文件设定) Worker 运行具体处理运算组件的进程(每个Worker对应执行一个Topology的子集) worker任务类型,即spout任务、bolt任务两种 启动executor (executor即worker JVM进程中的一个java线程,一般默认每个executor负责执行一个task任务)
根据功能划分为两大类: 高可用 负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heartbeat、keepalived(heartbeat这款软件在CentOs6上面的bug略多,假如主服务器宕机,备用服务器不可以在短时间正常切换提供服务,而且长时间没有更新,所以不建议使用!) 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,
redis持久化方式有两种,一种是RDB,一种是aof。RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。AOF持久化以日志的形式记录服务器所处理的每一个写操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
最后经过百度发现newinit.sh是一种挖矿脚本,是通过6379端口接入走后门被注入进来的,说到6379大家肯定很熟悉,没错这个就是Redis的默认端口,庆幸的是还好这个木马不是很深入,如果入侵的黑客是大神直接把木马深入到内核那这得重装系统了,经过这个事件以后我奉劝大家2个事情
我们都知道在对于Redis的开发或者面试的过程中,很容易就会遇到这个关于 Redis 持久化的问题,而我们在面试的时候,经常会有小伙伴只能说出这个 Redis 持久化的两种方式,后续可能还会对比一些区别,但是对于怎么实现这个持久化的操作,都不是很熟,而且也并没有实际应用过,以及什么时候应该使用什么类型的持久化,今天了不起就来给大家说说这个持久化。
Nginx:高性能的 HTTP和反向代理服务器,同时支持作为IMAP/POP3/SMTP代理服务器。目前被很多网站应用为其HTTP软负载均衡器。高效的性能、良好的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗正逐渐被大型互联网公司所青睐。例如腾讯、淘宝、新浪等大型门户及商业网站都采用Nginx进行HTTP网站的数据分流。
书接上回说,nginx我们学会了简单的配置。那么我今天来聊一下,我们ngxin的一些优化配置(我不是很懂,不敢谈高级配置)。我先来看一下nginx的好处和正向代理。
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
两台主机各安装一套数据库软件(Oracle/SQL/Sysbase/)和应用程序,建立主机系统结构的镜像模式。将数据库的系统库、数据库及日 志建立在磁盘阵列提供的硬盘裸设备上,保证了其中任一台主机出现故障时,令外一台的数据库能继续访问数据库,通过主机切换进程的脚本文件实现应用程序的切 换。保证应用业务的服务不停顿,和资料的安全。
Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。
描述:nginx作为负载均衡器所有请求都到了nginx 服务器中, 可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务影响严重。所以为了屏蔽负载均衡服务器的宕机我们需要实现nginx的高可用以及需要实现备份机;
作者吴雁林,腾讯高级测试开发工程师,5年服务器测试经验,曾负责保卫萝卜3,龙之谷服务器性能测试
哨兵(Sentinel)主要是为了解决在主从复制架构中出现宕机的情况,主要分为两种情况:
memcache虽然好用,解决了数据库遇到高并发时的IO问题,但还有很多问题丞待解决:
本文介绍了如何使用腾讯WeTest服务器性能测试工具进行游戏服务器性能测试,通过模拟真实业务场景和用户行为进行压力测试,帮助游戏开发者发现服务器端的性能瓶颈,进行针对性的性能调优,降低服务器采购和维护成本,提高用户留存和转化率。
领取专属 10元无门槛券
手把手带您无忧上云