在Linux系统上搭建Mongodb副本集,实现一主一从一选举。

接上条博客地址:https://blog.csdn.net/SpringCYB/article/details/90081038

1.首先创建副本集,需要三台虚拟机,可以直接克隆就可以

我直接克隆的上条博客里的虚拟机单机版,具体安装过程详见上条博客,我在这里不在赘述。
3台虚拟机虚拟机的ip地址:

192.168.1.100 (初始计划设定其为arbiter ,即仲裁服务器) 仲裁

192.168.1.145(初始计划设定其为master)主

192.168.1.151 (初始计划设定其为slave) 副

连接 xftp 

2.配置mongo.conf启动文件,为副本集取名weijh:

路径:/usr/data/mongodb 

ip:100 仲裁

dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.145

ip:151 副

dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.145

ip:145 主

dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.100,192.168.1.151

3.配置结束后,重启服务

连接xshell

启动三台mongodb服务:

 cd ../ 

cd usr/data/mongodb/bin

./mongo

4.在浏览器打开链接访问:


http://192.168.1.100:28017/

http://192.168.1.145:28017/

http://192.168.1.151:28017/

如果三个页面均展示成功则代表mongodb服务没有问题

5.初始化副本集
登入任意一台机器的MongoDB执行:因为是全新的副本集所以可以任意进入一台执行;要是有一台有数据,则需要在有数据上执行;要多台有数据则不能初始化。(随便连接一下哪个服务器都行,不过一定要进入admin集合)
通过命令 :use admin 

rs.initiate({"_id":"weijh","members":[
{"_id":1,
"host":"192.168.1.145", #主服务
"priority":1
},
{"_id":2,
"host":"192.168.1.151", #副服务
"priority":1
}
]})

“_id”: 副本集的名称
“members”: 副本集的服务器列表
“_id”: 服务器的唯一ID
“host”: 服务器主机
“priority”: 是优先级,默认为1,优先级0为被动节点,不能成为活跃节点。优先级不位0则按照有大到小选出活跃节点。
“arbiterOnly”: 仲裁节点,只参与投票,不接收数据,也不能成为活跃节点

如出现下图则表示成功!

出现 { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } 表示成功

注意千万别写错ip!否则只可初始化一次,三台虚拟机将会全崩

 

6.查看状态

通过 rs.status() 命令 查看状态

7.添加仲裁节点

通过  rs.addArb("192.168.1.100")

再查看状态:rs.conf()

上面说明已经让100服务器成为仲裁节点。副本集要求参与选举投票(vote)的节点数为奇数,当我们实际环境中因为机器等原因限制只有两个(或偶数)的节点,这时为了实现 Automatic Failover引入另一类节点:仲裁者(arbiter),仲裁者只参与投票不拥有实际的数据,并且不提供任何服务,因此它对物理资源要求不严格。
通过实际测试发现,当整个副本集集群中达到50%的节点(包括仲裁节点)不可用的时候,剩下的节点只能成为secondary节点,整个集群只能读不能 写。比如集群中有1个primary节点,2个secondary节点,加1个arbit节点时:当两个secondary节点挂掉了,那么剩下的原来的 primary节点也只能降级为secondary节点;当集群中有1个primary节点,1个secondary节点和1个arbit节点,这时即使 primary节点挂了,剩下的secondary节点也会自动成为primary节点。因为仲裁节点不复制数据,因此利用仲裁节点可以实现最少的机器开 销达到两个节点热备的效果。

8.主节点添加数据

通过   

db.test.insert({“name”:“2”,“age”:“2”});  存入数据

db.test.find()    查看数据

如图所示:

副节点查看数据:

读写分离:

首先报错是正常的,因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。对于replica set 中的secondary 节点默认是不可读的:
大部分web应用都用数据库作为数据持久化工具,在并发访问频繁且负载压力较大的情况下,也能成为系统性能的”瓶颈”,即使使用本地缓存等方式解决频繁访问数据库的问题,但仍会有大量的并发请求访问动态数据,”读写分离”是一种被广泛采用的方案

“读写分离”,机制首先将那些使用CPU以及内存消耗严重的操作分离到一台或几台性能很高的机器上,而将频繁读取的操作放到几台配置较低的机器上,然后,通过数据同步机制,实现多个数据库之间快速高效地同步数据,从而实现将”读写请求”按实际负载情况进行均衡分布。

通过 rs.slaveOk()  命令:

即可实现副服务查看信息:

9.Windows客户端连接

三台全部连接,ip为Linux电脑ip:

主从读写分离,当你点仲裁想查看数据时,他就会报错

这是因为他不保有数据:

仲裁者(Arbiter)
不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器。

 

部署完毕。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听风动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值