1、官方网址:https://docs.mongodb.org/manual/tutorial/deploy-replica-set-for-testing/
2、Replica Set介绍: https://docs.mongodb.org/manual/core/replica-set-members/
3、简单叙述一下什么是Replica Set:
如果我们使用单一的Mongodb数据库,那么它会存在单点故障等问题,Mongodb允许我们将多个单一的Mongodb数据库组成一个(“集群Replica Set” )对外提供统一的服务。
(“集群Replica Set” )存在如下特性:
1:节点间数据自动同步(主从复制模式,与MYSQL的主从复制原理类似),保证节点间数据是一致的。
2:节点间健康状态检查,故障自动切换,对客户端无影响。
(“集群Replica Set” )当中的角色:
1:主节点(primary)负责接收客户端的读写请求。
2:副节点(secondary)自动从主节点复制数据,可以处理客户端的读请求(决不能处理客户端的写请求)。
3:仲裁节点(arbiter)这里先不做解释,后面说明。
(“集群Replica Set” )运行的过程:
1:主节点(primary)将所有的操作记录到自己的日志当中去,副节点(secondary)会自动去主节点拷贝日志,然后将数据变化同步到自己的数据库中,从而保证数据的一致性。
2:如果集群当中的主节点(primary)发生故障,那么余下可用的副节点(secondary)会自动选举出一个新的主节点,如下图。
3:如果原来出现故障的主节点恢复可用,那么它会再次加入到集群当中,这时他会变成副节点(secondary),然后立即去当前的主节点同步数据,这样就又形成了一个新的集群,是不是很强大。
仲裁节点 (arbiter)说明:
1:仲裁节点(arbiter) 不会存储数据,它的作用是当集群中主节点出现故障时,由它来重新选举一个主节点,由于仲裁节点不存储数据,也不对外提供服务,所以可以运行在配置相对较低的服务器上。
集群当中的成员限制:
1:一个集群中最多有50个成员,也就是50个Mongodb数据库组成的集群。
2:在这50个成员当中,只能有一个【主节点(primary)】,一个【仲裁节点(arbiter)】,七个【参与选举的副节点(secondary)】,余下的数量可以配置任意个【不参与投票的副节点】
3:那些不参与选举的副节点,依然会保数据,对外提供相同的服务,只是不参与选举而已。
4、如何配置集群,此配置在一台机器上模拟集群,降低了一些参数的阀值,有条件的可以在多个机器上配置。
1:创建3个文件夹,用来存放3个数据的数据文件。
mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2
2:分别启动3个数据库,端口分别为 27017 27018 27019
mongod --port 27017 --dbpath /srv/mongodb/rs0-0 --replSet rs0 --smallfiles --oplogSize 128
mongod --port 27018 --dbpath /srv/mongodb/rs0-1 --replSet rs0 --smallfiles --oplogSize 128
mongod --port 27019 --dbpath /srv/mongodb/rs0-2 --replSet rs0 --smallfiles --oplogSize 128
--dbpath 为数据库文件存放的目录, --replSet 指定集群的名字,节点间名字需要相同, --smallfiles 最低的资源要求(仅供测试) --oplogSize 用来记录操作的日志的大小M
3:进入到其中一个mongodb中。
mongo --port 27017
4:在mongo shell中定义一个变量,配置成员信息。
rsconf = {
_id: "rs0",
members: [
{
_id: 0,
host: "xxx.xxx.xxx.xxx:27017"
}
]
}
rs.initiate( rsconf ) 初始化集群。
5:加入其它节点,将IP替换为你的服务器外网IP。
rs.add("IP:27018")
rs.add("IP:27019")
6:这时集群一个配置完了,你可以通过rs.status()来查看集群当中每个节点的状态了。
6、集群的配置已经完成,这时你可以在主节点上插入数据,然后在连接到副节点查看,看数据是不是立即同步过来了。