原文链接:https://www.jianshu.com/p/e7e70ca7c7e5
高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。
高可用集群的解决方案
计算机系统的高可用在不同的层面上有不同的表现:
(1)网络高可用
由于网络存储的快速发展,网络冗余技术被不断提升,提高IT系统的高可用性的关键应用就是网络高可用性,网络高可用性与网络高可靠性是有区别的,网络高可用性是通过匹配冗余的网络设备实现网络设备的冗余,达到高可用的目的。
比如冗余的交换机,冗余的路由器等
(2)服务器高可用
服务器高可用主要使用的是服务器集群软件或高可用软件来实现。
(3)存储高可用
使用软件或硬件技术实现存储的高度可用性。其主要技术指标是存储切换功能,数据复制功能,数据快照功能等。当一台存储出现故障时,另一台备用的存储可以快速切换,达一存储不停机的目的。
MongoDB的高可用集群配置
高可用集群,即High Availability Cluster,简称HA Cluster。
集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。
这些单个的计算机系统 就是集群的节点(node)。
搭建高可用集群需要合理的配置多台计算机之间的角色,数据恢复,一致性等,主要有以下几种方式:
(1)主从方式 (非对称方式)
主机工作,备机处于监控准备状况;当主机宕机时,备机接管主机的一切工作,待主机恢复正常后,按使用者的设定以自动或手动方式将服务切换到主机上运行,数据的一致性通过共享存储系统解决。
(2)双机双工方式(互备互援)
两台主机同时运行各自的服务工作且相互监测情况,当任一台主机宕机时,另一台主机立即接管它的一切工作,保证工作实时,应用服务系统的关键数据存放在共享存储系统中。
(3)集群工作方式(多服务器互备方式)
多台主机一起工作,各自运行一个或几个服务,各为服务定义一个或多个备用主机,当某个主机故障时,运行在其上的服务就可以被其它主机接管。
MongoDB集群配置的几种方案也遵循了这几种解决办法。
Master-Slave主从结构
image主从架构一般用于备份或者做读写分离。一般有一主一从设计和一主多从设计。
由两种角色构成:
(1)主(Master)
可读可写,当数据有修改的时候,会将oplog同步到所有连接的salve上去。
(2)从(Slave)
只读不可写,自动从Master同步数据。
特别的,对于Mongodb来说,并不推荐使用Master-Slave架构,因为Master-Slave其中Master宕机后不能自动恢复,推荐使用Replica Set,后面会有介绍,除非Replica的节点数超过50,才需要使用Master-Slave架构,正常情况是不可能用那么多节点的。
还有一点,Master-Slave不支持链式结构,Slave只能直接连接Master。Redis的Master-Slave支持链式结构,Slave可以连接Slave,成为Slave的Slave。
下面为主从配置高可用方案搭建过程(此高可用方案不推荐使用,只做参考):
1)机器环境 182.48.115.238 master-node 182.48.115.236 slave-node 两台机器都关闭防火墙和selinux mongodb的安装参考:https://www.jianshu.com/p/5ed4ab8f60cc 2)主从配置 .............master-node节点配置............. [[email protected]-node ~]# vim /usr/local/mongodb/mongodb.conf port=27017 bind_ip = 182.48.115.238 dbpath=/usr/local/mongodb/data logpath=/usr/local/mongodb/log/mongo.log logappend=true journal = true fork = true master = true //确定自己是主服务器 [[email protected]-node ~]# nohup /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf & [[email protected]-node ~]# ps -ef|grep mongodb root 15707 15514 23 16:45 pts/2 00:00:00 /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf root 15736 15514 0 16:45 pts/2 00:00:00 grep mongodb [[email protected]-node ~]# lsof -i:27017 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mongod 15707 root 7u IPv4 153114 0t0 TCP 182.48.115.238:27017 (LISTEN) 由于mongodb.conf里绑定了本机的ip地址182.48.115.238,所以连接mongodb的时候必须用这个ip地址,不能使用默认的127.0.0.1,也就是说: [[email protected]-node ~]# mongo 182.48.115.238:27017 //这样才能连接mongodb [[email protected]-node ~]# mongo 或者 mongodb 127.0.0.1:27017 // 这样不能连接mongodb .............slave-node节点配置............. [[email protected]-node ~]# vim /usr/local/mongodb/mongodb.conf port=27017 dbpath=/usr/local/mongodb/data logpath=/usr/local/mongodb/log/mongo.log logappend=