最近将应用部署到集群时遇到一个问题,即用户命中不同的服务器导致的用户间无法进行websocket通讯,在网上搜索到类似问题但都没有具体解决方案. 于是用redis的订阅发布功能解决了该问题,具体流程如下:两台服务器都订阅redis的topicS,每个websocket用户登录时在redis中存储登录的服务器IP,当用户1给用户2发消息时,服务器根据用户2的编号到redis中查询该用户登录的服务器地址. 然后发布user2的编号和所在服务器ip到topicS,两台服务器会收到订阅的消息,根据ip判…
2) broadcast,这是启动完毕之后,集群中的服务器开始接收客户端的连接一起工作的过程,如果客户端有修改数据的改动,那么一定会由leader广播给follower,所以称为”broadcast”.…
Redis Cluster 集群中涉及到了数据分布问题,因为 redis cluster 是多 master 的结构,每个 master 都是可以提供存储服务的,这就会涉及到数据分布的问题,在新的 redis 版本中采用的是虚拟槽分区技术来解决数据分布的问题,关于什么是虚拟槽分区技术我们后面会详细的介绍.在集群中除了虚拟槽分区技术之外,还有几种数据分布的算法,比如哈希算法,一致性哈希算法,这篇文章我们就来一起聊一聊这几种数据分布算法. 因为是集群,所以我们需要一个大前提,在这篇文章中假设 red…
Session 是运行在一台服务器上的,所有的访问都会到达我们的唯一服务器上,这 样我们可以根据客户端传来的 sessionID,来获取 session,或在对应 Session 不 存在的情况下(session 生命周期到了/用户第一次登录),创建一个新的 Session: 但是,如果我们在集群环境下,假设我们有两台服务器 A,B,用户的请求会由 Nginx 服务器进行转发(别的方案也是同理),用户登录时,Nginx 将请求转发 至服务器 A 上,A 创建了新的 session,并将 Sess…
为Redis创建Deployment和Service 创建 Redis Deployment,YAML文件如下: apiVersion: apps/v1 kind: Deployment metadata: name: redis-master labels: app: redis spec: selector: matchLabels: app: redis role: master tier: backend replicas: 1 template: metadata: labels: a…
什么时候配置时间同步? 当分布式集群配置好了以后,马上配置的是SSH无密钥配置,然后就是配置时间同步. 时间同步在集群中特别重要. 一:时间同步 1.时间同步 集群中必须有一个统一的时间 如果是内网,需要在集群里找一台服务器:时间服务器 2.查包 看服务包是否安装好 ntpdate-4.2.4p8-3.el6.centos.x86_64 :时间同步某台服务器 ntp-4.2.4p8-3.el6.centos.x86_64 :作为时间服务器 3.查看服务 4.修改配置 5.修改的内容 6.重启服务…
什么时候配置时间同步? 当分布式集群配置好了以后,马上配置的是SSH无密钥配置,然后就是配置时间同步. 时间同步在集群中特别重要. 一:时间同步 1.时间同步 集群中必须有一个统一的时间 如果是内网,需要在集群里找一台服务器:时间服务器 2.查包 看服务包是否安装好. ntp是包. ntpd是服务. ntpdate-4.2.4p8-3.el6.centos.x86_64 :直接同步某台服务器 ntp-4.2.4p8-3.el6.centos.x86_64 :作为时间服务器 3.查看服务 4.修改…
背景 1 台 master 加入集群后发现忘了修改主机名,而在 k8s 集群中修改节点主机名非常麻烦,不如将 master 退出集群改名并重新加入集群(前提是用的是高可用集群). 操作步骤 ssh 登录另外一台 master 节点将要改名的 master 节点移出集群. kubectl drain blog-k8s-n0 kubectl delete node blog-k8s-n0 登录已退出集群的 master 服务器重置 kubelet 配置并重新加入集群. kubeadm reset k…
最近在项目中在做一个消息推送的功能,比如客户下单之后通知给给对应的客户发送系统通知,这种消息推送需要使用到全双工的websocket推送消息. 所谓的全双工表示客户端和服务端都能向对方发送消息.不使用同样是全双工的http是因为http只能由客户端主动发起请求,服务接收后返回消息.websocket建立起连接之后,客户端和服务端都能主动向对方发送消息. 上一篇文章Spring Boot 整合单机websocket介绍了websocket在单机模式下进行消息的发送和接收: 用户A和用户B和web服…
Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器的host和port正确,就可以连接使用.这在安全性上会有一定的问题,所以需要启用Redis的认证密码,增加Redis服务器的安全性. 1. 修改配置文件 Redis的配置文件默认在/etc/redis.conf,找到如下行: #requirepass foobared 2. 重启Redis 如果Redis已经配置为service服务,可以通过以下方式重启: service redis restart 如果Redis没有配置…
开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与下架一个Hadoop节点. 一.实验环境结构 本次试验,我们构建的集群是一个主节点,三个从节点的结构,其中三个从节点的性能配置各不相同,这里我们主要在虚拟机中的内存设置这三个从节点分别为:512MB.512MB与256MB.首先,我们暂时只设置两个从节点,另外一个作为动态添加节点的时候使用.主节点与…
先来说下session和cookie的异同 session和cookie不仅仅是一个存放在服务器端,一个存放在客户端那么笼统 session虽然存放在服务器端,但是也需要和客户端相互匹配,试想一个浏览器为啥session总是一样的(过期或者关闭不算),主要得益于在浏览器端有个cook,名字叫"PHPSESSID"这个cookie里面就是一串字符串.这个字符串就是用于标示session的,在使用session时当服务器端发现这个cookie后就会到服务器端session文件存放目录查找名…
抽取一部分显示在这里,如下, What's the difference in using Clustervs using replication? 在复制系统中,一个MySQL主服务器会更新一个或多个从服务器.事务是顺序地提交的,因此一个慢事务就可能导致从服务器比主服务器落后一段时间.这也意 味着,如果主服务器出错失败了,那么从服务器可能会缺少记录最后的那一小部分事务日志.如果使用的是事务安全存储引擎的话,例如InnoDB, 那么事务日志则会完全记录到从服务器上去或者完全不记录,但是复制不能保…
最近发现windows集群能进行很多自定义,比如在集群中加入自己编写的服务. 能自定义的可不少,截个图: 本次演示中,只想用“通用服务”这个类型. 先列下步骤 编写一个记录时间的Windows服务,这个服务会每隔1秒钟写入本地文件当前时间 在两台加入了windows集群的服务器中分别安装这个服务(安装即可,不用启动) 在windows集群中配置一个新服务,也就是上面这个服务 进行故障转移试验 编写一个记录时间的Windows服务,这个服务会每隔1秒钟写入本地文件当前时间 这个的代码略,没啥可说的…
前言 在我们给Web站点使用负载均衡之后,必须面临的一个重要问题就是Session的处理办法,无论是PHP.Python.Ruby还是Java,只要使用服务器保存Session,在做负载均衡时都需要考虑Session的问题.   分享目录: 问题在哪里?如何处理? 会话保持(案例:Nginx.Haproxy) 会话复制(案例:Tomcat) 会话共享(案例:Memcached.Redis) 问题在哪里? 从用户端来解释,就是当一个用户第一次访问被负载均衡代理到后端服务器A并登录后,服务器A上保留…
1. 客户端cookie加密 .比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现. 问题:session中数据不能太多,最好只有个用户id. Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上.客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上.这就是Session.客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了. 如果说Cookie机制…
问题描述:kafka单台机器做集群操作是没有问题的,如果分布多台机器并且partitions或者备份的个数大于1都会报kafka.common.KafkaException: Should not set log end offset on partition 这个错误,如果使用kafka默认的日志等级,过不了几分钟错误日志就会把磁盘刷满,导致服务器down掉. 这个问题困扰了我几天,怎么搞都不行,开始以为是版本问题,升级到最新版本问题还是存在,后来在官方FQA中找到了一段描述,原文如下: Wh…
写在前面 最近一年来,我都在做公司的RTB广告系统,包括SSP曝光服务,ADX服务和DSP系统.因为是第一次在公司用Go语言实现这么一个大的系统,中间因为各种原因造了很多轮子.现在稍微有点时间,觉着有必要总结这一年来用Go造轮子的经验和不足. 集群中遇到的配置文件管理问题 RTB广告系统中涉及到的服务程序并不算很多,但是因为RTB系统会面临很多的流量,而且为了确保可用性,最基本的就是多实例组成集群,同时考虑到后续业务增长,集群的扩缩容也是要做的.我们在设计的时候,基于ZoooKeeper做了服务…
前言 我们知道HDFS集群中,所有的文件都是存放在DN的数据块中的.那我们该怎么去查看数据块的相关属性的呢?这就是我今天分享的内容了 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 我们知道hadoop集群遵循的是主/从的架构,namenode很多时候都不作为文件的读写操作,只负责任务的调度和掌握数据块在哪些datanode的分布, 保存的是一些数据结构,是namespace或者类似索引之类的东西,真正的数据存储和对数据的读写是发生在datanode里的. 找到${HADOOP_…
集群中session安全和同步是个最大的问题,下面是我收集到的几种session同步的方案,希望能通过分析其各自的优劣找出其适应的场景. 1. 客户端cookie加密 这是我以前采用的方式,简单,高效.比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现. 问题:session中数据不能太多,最好只有个用户id. 参考实现:http://rollerweblogger.org/ 2. application server的session复制 可能大部分…
通常面临的问题 从用户端来解释,就是当一个用户第一次访问被负载均衡代理到后端服务器A并登录后,服务器A上保留了用户的登录信息:当用户再次发送请求时, 根据负载均衡策略可能被代理到后端不同的服务器,例如服务器B,由于这台服务器B没有用户的登录信息,所以导致用户需要重新登录.这对用户 来说是不可忍受的.所以,在实施负载均衡的时候,我们必须考虑Session的问题. 在负载均衡中,针对Session的处理,一般有以下几种方法: )Session会话保持(案例:Nginx.Haproxy) )Sessi…
原理:tomcat 做个WEB服务器有它的局限性,处理能力低,效率低.承受并发小(1000左右).但目前有不少网站或者页面是JSP的.并采用了tomcat做为WEB,因此只能在此基础上调优. 目前采取的办法是Apache + Mod_JK + tomcat 来解决一部分请求,用户访问的是apache,但有jsp页面的时候才会去请求tomcat.如果量一大,那么tomcat无法承受,那么只能做tomat集群,Apache + Mod_JK 就是负载均衡器了. Mod_JK2负载均衡 可以把不同的j…
Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运行服务容器的镜像名称和标记有多少容器参与服务是否有任何端口暴露给集群之外的客户端当Docker启动时,服务是否应该自动启动重启服务时发生的特定行为(例如是否使用滚动重启)服务可以运行的节点的特征(例如资源约束和位置首选项)有关群模式的概述,请参见 Swarm mode key concepts.有关…
在日常运维工作中,当给Web站点使用负载均衡之后,必须面临的一个重要问题就是Session的处理办法,无论是PHP.Python.Ruby还是Java语言环境,只要使用服务器保存Session,在做负载均衡时都需要考虑Session的问题. 通常面临的问题 从用户端来解释,就是当一个用户第一次访问被负载均衡代理到后端服务器A并登录后,服务器A上保留了用户的登录信息:当用户再次发送请求时, 根据负载均衡策略可能被代理到后端不同的服务器,例如服务器B,由于这台服务器B没有用户的登录信息,所以导致用户…
Add an Arbiter to Replica Set 在集群中加入仲裁节点,当集群中主节点挂掉后负责选出新的主节点,仲裁节点也是一个mongo实力,但是它不存储数据. 1.仲裁节点消耗很小的资源,而且不需要专用的服务器. 2.不能把仲裁节点安装到集群中的其它节点服务器上. 3.journal.enabled to false 减少资源占用. 4.mallFiles to true  减少资源占用. 注意上面3,4的配置不用设置到其它集群节点中. 5.rs.addArb("m1.exampl…
初试 Kubernetes 集群中使用 Traefik 反向代理 2017年11月17日 09:47:20 哎_小羊_168 阅读数:12308    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aixiaoyang168/article/details/78557739 目录 Traefik 介绍 环境.软件准备 部署 Traefik 部署 Traefik UI 部署自定义 Ingress 部分特性说明 1.Traefik 介绍 在日常工作…
系统四台机器,每台机器部署四个Tomcat Web容器.现需要根据端口号随机切换到映射的数据源,若一台机器一个Tomcat则用IP识别,可现在一台机器四个Tomcat,因此还需要获得Web容器的端口号.那么:在Web服务器集群中,一个Spring任务该如何获取Web容器的端口号呢?设置需要的Key,本系统使用Tomcat Web服务器,操作如下.编辑文件${tomact-dir}/bin/catalina.bat,添加以下内容即可: set JAVA_OPTS=-D<key>="&l…
NameNode 学习目标 理解 namenode 的工作机制尤其是元数据管理机制,以增强对 HDFS 工作原理的 理解,及培养 hadoop 集群运营中“性能调优”.“namenode”故障问题的分析解决能力 问题场景 1.Namenode 服务器的磁盘故障导致 namenode 宕机,如何挽救集群及数据? 2.Namenode 是否可以有多个?namenode 内存要配置多大?namenode 跟集群数据存储能 力有关系吗? 3.文件的 blocksize 究竟调大好还是调小好?结合 map…
目录 前言 解决方案 代码示例 前言 最近公司里遇到一个问题,在集群中一些websocket的消息丢失了. 产生问题的原理很简单,发送消息的服务和接收者连接的服务不是同一个服务. 解决方案 用中间件(mq, redis etc.)来在服务之间进行通信. 不直接发送websocket消息,而是将消息放在mq或者redis的list中. 并在redis中维护连接信息,服务根据连接信息来判断自己是否需要处理消息,或者将消息发给接收者连接的服务. 代码示例 我们的项目中使用的是Spring WebSoc…
NameNode 学习目标 理解 namenode 的工作机制尤其是元数据管理机制,以增强对 HDFS 工作原理的 理解,及培养 hadoop 集群运营中“性能调优”.“namenode”故障问题的分析解决能力 问题场景 1.Namenode 服务器的磁盘故障导致 namenode 宕机,如何挽救集群及数据? 2.Namenode 是否可以有多个?namenode 内存要配置多大?namenode 跟集群数据存储能 力有关系吗? 3.文件的 blocksize 究竟调大好还是调小好?结合 map…