集群

集群监控系统的设计方案

北城以北 提交于 2020-02-29 09:05:57
背景 一个项目发展了一段时间以后,总会分成为数众多的子应用,各自以集群的形式部署在不同的服务器上。当部署的应用多了以后,整个集群的异常监控就成为一个比较麻烦的事情。最近接到的需求便是开发一个监控系统,监控所有子应用的抛出的异常信息,以及各种定时线程的执行情况等。 一些 原则 因为项目已经比较庞大了,所以这套监控系统对原有的各应用不能有太大的侵入性,代码的改动量不能太大。 项目的子应用众多,设计监控方案时,要考虑通用性,尽量减少边际成本。 整个项目的子应用分布在上百台服务器上,所以设计时应考虑到部署实施的简便性。 方案一 最开始考虑的方案,开发一个web服务器 monitor 和 触手 agent,把 agent 部署到所有的服务器上,通过分析指定目录下的日志文件获取该服务器上的所有应用运转情况。而相对应的,所有需要监控的子应用需要输出自身的错误日志 和 定时线程的执行日志到指定目录,配合监控。 这个方案的好处是通过 agent 不单可以监控应用,还能做很多额外的事情,比如服务器内存负载监控,应用异常时的自动重启等等,还一个优点是跨语言,不局限于java;不足之处也很明显:部署和更新繁琐,代码侵入性略大,每个应用都需要新增大量的日志输出代码;而且agent多了以后,可能需要专门的运维来负责维护。 方案二 第二套方案仍然需要开发web服务器 monitor,但不再提供agent

Galera_Cluster_For_MySQL集群安装

送分小仙女□ 提交于 2020-01-07 12:10:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Galera Cluster For MySQL简介: Galera Cluster for MySQL是一套基于同步复制的多主MySQL集群解决方案,使用简单,没有单点故障,可用性高,能很好保证业务不断增长时我们数据的安全和随时的扩展,主要特点: 同步复制 多主服务器的拓扑结构 可以在任意节点上进行读写 自动剔除故障节点 自动加入新节点 真正行级别的并发复制 客户端连接跟操作单台MySQL数据库的体验一致 注意: Galera Cluster需要至少三台mysql服务器,如果只有两台做cluster的话,一旦出现数据不一致的情况,就可能发生脑裂,需要一台仲裁服务器,如果直接三台做cluster的话,就不再需要仲裁 使用Galera Cluster For MySQL前注意事项: 使用Galera必须要给MySQL-Server打wsrep补丁.可以直接使用官方提供的已经打好补丁的MySQL安装包, 如果服务器上已经安装了标准版MYSQL,需要先卸载再重新安装.卸载前注意备份数据. MySQL/Galera集群只支持InnoDB存储引擎.如果你的数据表使用的MyISAM,需要转换为InnoDB,否则记录不会在多台复制. 可以在备份老数据时,为mysqldump命令添加-skip-create-options参数

Hadoop RPC整个使用流程——以DataNode向NameNode注册为例

ぐ巨炮叔叔 提交于 2019-12-07 15:48:50
Hadoop RPC整个使用流程——以DataNode向NameNode注册为例 在HDFS实现过程中DataNode class中有一个成员变量namenode,其类型是DatanodeProtocol。namenode可以看作是远程NameNode服务器的一个代理,因为NameNode本身也是DatanodeProtocol接口的具体实现;DataNode通过调用namenode对象的方法与远程NameNode进行交互。 下面看一下namenode变量在DataNode当中是如何初始化的: 首先DataNode通过调用RPC.waiForProxy方法完成namenode的初始化过程,具体实现看下面的代码: this.namenode = (DatanodeProtocol) RPC.waitForProxy( DatanodeProtocol.class, DatanodeProtocol.versionID, nameNodeAddr, conf); 通过上面的代码可以看出,具体namenode是如何与远程的NameNode进行连接的需要通过查阅RPC.waitForProxy(...)来查看。waitForProxy通过RPC内部的一系列方法调用,最终通过下面的getProxy方法来实现: public static VersionedProtocol getProxy(

Redis3.0.6集群搭建

我是研究僧i 提交于 2019-12-06 22:23:19
创建一个RedisCluster之前,我们需要有一些以cluster模式运行的Redis实例,这是因为cluster模式下Redis实例将会开启cluster的特征和命令。 现在我有2台Vbox搭建的CentOS6虚拟机【CentOS1(192.168.56.101)和CentOS2(192.168.56.102)】,准备在此上搭建Redis集群。 由于最小的Redis集群需要3个Master节点,本次测试使用另外3个节点作为备份的节点(Replicas),于是此次搭建需要6个Redis实例。由于可在同一台机器上运行多个 Redis 实例,因此我将在CentOS1上运行以下实例: 192.168.56.101:7000 192.168.56.101:7001 192.168.56.101:7002 并在CentOS2上运行以下实例: 192.168.56.102:7003 192.168.56.102:7004 192.168.56.102:7005 1. 下载Redis ,目前的stable版本为3.0.6: http://redis.io/download 2. 安装Redis tar zxvf redis-3.0.6.tar.gz cd redis-3.0.6 make 安装完成后,redis-3.0.6/src文件夹下会出现redis-server、redis

MapReduce作业提交源码分析

无人久伴 提交于 2019-12-06 01:47:06
MapReduce作业提交源码分析 我们在编写MapReduce程序的时候,首先需要编写Map函数和Reduce函数。完成mapper和reducer的编写后,进行Job的配置;Job配置完成后,调用Job.submit()方法完成作业的提交。那我们思考一下,Job最终如何完成作业(job)的提交呢?粗略想一下,Job必然需要通过某种方式连接到JobTracker,因为只有这样才能将job提交到JobTracker上进行调度执行。还需要考虑一下,我们自己编写的mapper和reducer,即Jar文件如何传送到JobTracker上呢?其中有一种最简单也比较直观的方法,直接通过socket传输给JobTracker,由JobTracker再传输给TaskTracker(注意:MapReduce并没有采用这种方法)。第三个需要考虑的内容是,JobTracker如何将用户作业的配置转化成map task和reduce task。下面我们来分析一下MapReduce这些功能的实现。 首先在class Job内部通过JobClient完成作业的提交,最终由JobClient完成与JobTracker的交互功能。在JobClient的构造函数中,通过调用RPC完成与JobTracker连接的建立。 完成建立后,JobClient首先确定job相关文件的存放位置

k8s-web集群架构从零开始(2)

帅比萌擦擦* 提交于 2019-12-06 00:50:07
附上链接: docker构建web集群: https://my.oschina.net/daba0007/blog/1605365 kubenetes与web集群: https://my.oschina.net/daba0007/blog/1602425 k8s-web集群架构从零开始(1): https://my.oschina.net/daba0007/blog/1604526 web集群 我使用的是django做为架构来搭建web。这里web前端的内容我就不做扩展了,我还是使用上次随便写的那个网站来做测试。不过web集群在这里和docker当时的做法不太一样了。之前我们是使用了web容器和nginx容器共享数据卷容器来实现网站数据共享。 nginx是一个高性能的HTTP和反向代理服务器,在web集群中我们使用它做为http的代理服务器,在k8s中,我们完全可以把这web容器和nginx容器写在一个同一个pod里面,因为他们共享着数据卷,关系十分地亲密。 使用django连接mysql和redis服务主要是在setting中修改。 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'form', 'USER':'root', 'PASSWORD':'123456', #'HOST':

Nginx+PHP+MySQL双机互备、全自动切换方案[转载]

巧了我就是萌 提交于 2019-12-05 18:00:24
在生产应用中,某台“Nginx+PHP+MySQL”接口数据服务器,扮演的角色十分重要,如果服务器硬件或Nginx、MySQL发生故障,而短时间内无法恢复,后果将非常严重。为了避免单点故障,我设计了此套方案,编写了failover.sh脚本,实现了双机互备、全自动切换,故障转移时间只需几十秒。 2、解释:   (1)、假设外网域名blog.s135.com解析到外网虚拟IP 72.249.146.214上,内网hosts设置db10对应内网虚拟IP 192.168.146.214   (2)、默认情况下,由主机绑定内、外网虚拟IP,备机作为备份,当主机的MySQL、Nginx或服务器出现故障无法访问时,备机会自动接管内、外网虚拟IP。两台服务器都启动负责监控、自动切换虚拟IP的守护进程/usr/bin/nohup /bin/sh /usr/local/webserver/failover/failover.sh 2>&1 > /dev/null &   (3)、主机和备机上的MySQL服务器互为主从,互相同步。在主机处于活动状态(即由主机绑定虚拟IP)时,读写主机的MySQL,写到主机的数据会同步到备机;在备机处于活动状态时,读写备机的MySQL,写到备机的数据会同步到主机(如果主机上的MySQL死掉暂时无法同步,主机上的MySQL恢复后,数据会自动从备机上同步过来,反之亦然)。

docker-web搭建(mysql,redis,django,nginx)

怎甘沉沦 提交于 2019-12-05 04:16:12
web搭建 登录docker hub,申请一个仓库 本次试验环境:阿里云服务器 Centos7.2 x86_64 所需知识:python,redis,mysql,django,nginx,linux操作知识 预备工作 安装docker # vim /etc/yum.repos.d/docker.repo [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg # yum install docker-engine -y systemctl restart docker docker安装成功之后,使用docker下载所需镜像(由于一些镜像下载速度过慢,我搭建了自己的镜像仓库,拉去会快一点) daba0007/nginx daba0007/redis daba0007/python2.7(如果环境有需要可以使用daba0007/python3.6) daba0007/mysql daba0007/django 拉取完之后确定试验的目录 # mkdir /daba0007 # cd /daba0007/ # mkdir mysql

使用YCSB测试mongodb分片集群性能

旧街凉风 提交于 2019-12-04 21:24:47
1. 测试工具 本次测试选取YCSB(Yahoo! Cloud System Benchmark)作为测试客户端工具。YCSB是Yahoo开源的一个nosql测试工具,用来测试比较各种nosql的性能,项目地址:https://github.com/brianfrankcooper/YCSB。项目的mongodb目录下有详细的安装和测试方法。 YCSB支持常见的nosql数据库读写,如插入,修改,删除,读取等。它可以使用多线程来提高客户端的性能。可以方便的自定义各种场景,如95%插入5%读,或者90%读5%更新5%插入等等。可以自定义数据请求分布方式:平均分布,zipfian(大约20%数据获得80%访问请求),最新数据。 2. 测试步骤 1. 选择客户端线程数。使用YCSB测试,要选择一个合适的线程数,否则测试的瓶颈可能在客户端而不是数据库,经过比较,大概100个线程时,YCSB达到最大性能。 2.定义测试场景。本次测试的场景如下: workloada 写多读少,90%插入,5%读,5%更新。 workloadb 读多写少,95%读,5%更新。 workloadc 读多写少,100%读。 workloadd 读多写少,95%读,5%插入。 workloadf 读多写少,50%读,50%读写修改同一条记录。 workloadg 读多写少,60%读,20%读,20%更新。 3

docker 1.12版本的swarm集群使用

别等时光非礼了梦想. 提交于 2019-12-04 13:23:49
Docker 1.12版本后,Swarm变化比较大,更加简单、好用,而且采用了gossip协议后,支持多个Manager,也更加稳定可靠了。不需要单独安装,Swarm的集群功能已经成为Docker Engine的一部分。因此,可以说,集群已经成为Docker的一个内置功能。 docker swarm 命令详情 有关集群的docker命令如下: docker swarm:集群管理,子命令有init, join, leave, update docker node:节点管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm docker service:服务管理,子命令有create, inspect, update, remove, tasks docker stack/deploy:试验特性,用于多应用部署 创建swarm 集群 查看docker swarm 命令说明 [root@centos-node4 ~]# docker swarm -h Flag shorthand -h has been deprecated, please use --help Usage: docker swarm COMMAND Manage Docker Swarm Options: --help Print usage