故障转移

搭建高可用mongodb集群(二)—— 副本集

…衆ロ難τιáo~ 提交于 2019-12-07 19:16:36
在上一篇文章 《搭建高可用MongoDB集群(一)——配置MongoDB》 提到了几个问题还没有解决。 主节点挂了能否自动切换连接?目前需要手工切换。 主节点的读写压力过大如何解决? 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 这篇文章看完这些问题就可以搞定了。NoSQL的产生就是为了解决大数据量、高扩展性、高性能、灵活数据模型、高可用性。但是光通过主从模式的架构远远达不到上面几点,由此MongoDB设计了副本集和分片的功能。这篇文章主要介绍 副本集 : mongoDB官方已经 不建议使用主从模式 了,替代方案是采用副本集的模式, 点击查看 ,如图: 那什么是副本集呢?打魔兽世界总说打副本,其实这两个概念差不多一个意思。游戏里的副本是指玩家集中在高峰时间去一个场景打怪,会出现玩家暴多怪物少的情况,游戏开发商为了保证玩家的体验度,就为每一批玩家单独开放一个同样的空间同样的数量的怪物,这一个复制的场景就是一个副本,不管有多少个玩家各自在各自的副本里玩不会互相影响。 mongoDB的副本也是这个,主从模式其实就是一个单副本的应用,没有很好的扩展性和容错性。而副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,并且解决了上面第一个问题“主节点挂掉了,整个集群内会自动切换”

redis sentinel运行

馋奶兔 提交于 2019-12-05 05:25:05
sentinel 模式以 100ms (理想情况下)的速度调用 sentinelTimer 1、 执行 sentinelCheckTiltCondition 判断是否进入 tilt 模式 检查当前之间与 sentinel.previous_time 的时间差值,如果为负值或者大于阀值进入 tilt 模式,进入 tilt 模式会发送消息到 +tilt 频道 2、 执行 sentinelHandleDictOfRedisInstances 函数 对 master 执行 sentinelHandleRedisInstance i. 尝试重连如果断开连接的话 ii. 发送周期性命令 10000ms 发送一个 info 命令 a) 异步回复处理策略 i. 判断 runnid ,更新该 master 的 runnid 如果现在 ri->runnid = NULL, 如果非 NULL , 会比较两次 runnid 是否一致,如果不一致认为 master 重启过了,将发送消息到 +reboot 频道通知该 master 重启了 ii. down_after_period 小于 1000ms ,则在 down_after_period 时间内发送一个 ping 命令,否则以 1000ms 为周期发送 a) 异步回复处理 i. 根据回复修改 last_avail_time 、 last_ping

搭建高可用mongodb集群(四)—— 分片

烂漫一生 提交于 2019-12-04 02:06:28
按照上一节中《搭建高可用mongodb集群(三)—— 深入副本集》搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的。而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来解决这个问题。 传统数据库怎么做海量数据读写?其实一句话概括:分而治之。上图看看就清楚了,如下 taobao岳旭强在infoq中提到的 架构图: 上图中有个TDDL,是taobao的一个数据访问层组件,他主要的作用是SQL解析、路由处理。根据应用的请求的功能解析当前访问的sql判断是在哪个业务数据库、哪个表访问查询并返回数据结果。具体如图: 说了这么多传统数据库的架构,那Nosql怎么去做到了这些呢?mysql要做到自动扩展需要加一个数据访问层用程序去扩展,数据库的增加、删除、备份还需要程序去控制。一但数据库的节点一多,要维护起来也是非常头疼的。不过mongodb所有的这一切通过他自己的内部机制就可以搞定!顿时石化了,这么牛X!还是上图看看mongodb通过哪些机制实现路由、分片: 从图中可以看到有四个组件:mongos、config server、shard、replica

搭建高可用mongodb集群(一)——配置mongodb

别等时光非礼了梦想. 提交于 2019-12-02 22:33:17
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写、海量数据高效存储、高可扩展性和高可用性这些难题。不过就是因为这些问题Nosql诞生了。 NOSQL有这些优势: 大数据量 ,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制。 高扩展性 ,Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的诟病。 高性能 ,Nosql通过简单的key-value方式获取数据,非常快速。还有NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多。 灵活的数据模型 ,NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。 高可用 ,NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如mongodb通过mongos、mongo分片就可以快速配置出高可用配置。 在nosql数据库里,大部分的查询都是键值对(key、value)的方式。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的。支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。所以这个非常方便

日志收集系统之redis高可用集群搭建

走远了吗. 提交于 2019-11-28 23:07:45
为了搭建日志收集系统LEK,需要搭建一套Redis高可用集群,确保日志正常从各个应用服务器流转到ElasticSeach服务器,最终通过Kabana显示出来。Redis高可用集群采用redis自带的sentinel实现,具有主备和故障转移功能。 一、安装环境说明 两台机器:master(192.168.2.52),slave(192.168.2.53) 操作系统:CentOS 6.5 Redis:2.8.17,下载地址:http://download.redis.io/releases/redis-2.8.17.tar.gz 二、安装Redis 安装前准备 1、安装c++编译器 yum install gcc-c++ 2、安装依赖tcl yum install -y tcl 安装 1、下载 wget http://download.redis.io/releases/redis-2.8.17.tar.gz 2、解压 tar -zxvf redis-2.8.17.tar.gz 3、安装 先创建一个软链接,然后进入链接目录,安装。 ln -s redis-2.8.17 redis cd redis make install 安装完成之后,在/usr/local/bin目录下会出现redis相关的脚本文件(不包含redis-sentinel.sh)。如下图所示: 配置 1、创建相关目录