程序笔记   发布时间:2022-07-14  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用Replica Set副本集方式搭建mongodb副本集群大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

1.Mongodb集群搭建的三种方式

1.Replica Set(首选)【简称:副本集,集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致。】2.Sharding【只有真的是大数据,Sharding才能显现威力,毕竟备节点同步数据是需要时间的;Sharding可以将多片数据集中到路由节点上进行一些对比,然后将数据返回给客户端,但是效率还是比较低的说。】 3.@H_821_1@master-Slaver【最简单的集群搭建,不过准确说也不能算是集群,只能说是主备。并且官方已经不推荐这种方式】

2.Replica Set工作原理

1.Replica Set叫做副本集,集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致。2.@H_821_1@mongodb(@H_821_1@m)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。3.默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference @H_821_1@modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。4.仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。

使用Replica Set副本集方式搭建mongodb副本集群


3.安装mongodb

tar -xf mongodb-linux-x86_64-rHel70-4.2.9.tgz  /bin/mv mongodb-linux-x86_64-rHel70-4.2.9 /usr/local/mongodb ln -svf /usr/local/mongodb/bin/* /usr/local/bin/

4.Replica Set搭建配置【生产环境应该主,备,仲裁节点各占一台主机,这里测试环境,只在一台机器上验证了】

5.分别在主,备,仲裁节点创建目录

@H_821_1@mkdir -p /data/mongodb_test/master/data@H_821_1@mkdir -p /data/mongodb_test/slaver/data@H_821_1@mkdir -p /data/mongodb_test/arbiter/data

6.编辑配置文件【更多参数详细查看官方文档】

#master.confdbpath=/data/mongodb_test/master/datalogpath=/data/mongodb_test/master/master.logpidfilepath=/data/mongodb_test/master/master.piddirectoryperdb=truelogappend=truereplSet=testrsbind_ip=0.0.0.0port=27517oplogSize=10000fork=true
#slaver.confdbpath=/data/mongodb_test/slaver/datalogpath=/data/mongodb_test/slaver/slaver.logpidfilepath=/data/mongodb_test/slaver/slaver.piddirectoryperdb=truelogappend=truereplSet=testrsbind_ip=0.0.0.0port=27617oplogSize=10000fork=true
#arbiter.confdbpath=/data/mongodb_test/arbiter/datalogpath=/data/mongodb_test/arbiter/arbiter.logpidfilepath=/data/mongodb_test/arbiter/arbiter.piddirectoryperdb=truelogappend=truereplSet=testrsbind_ip=0.0.0.0port=27577oplogSize=10000fork=true

7.运行mongodb主,备,仲裁节点

/usr/local/mongodb/bin/mongod -f /data/mongodb_test/master/master.conf/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf/usr/local/mongodb/bin/mongod -f /data/mongodb_test/arbiter/arbiter.conf

使用Replica Set副本集方式搭建mongodb副本集群

8.保证各节点网络互通,配置集群

登录master节点:mongo 127.0.0.1:27517> use admin> cfg={ _id:"testrs", members:[ {_id:0,host:'10.21.210.78:27517',priority:10}, {_id:1,host:'10.21.210.78:27617',priority:1}, {_id:2,host:'10.21.210.78:27717',arbiterOnly:truE}] };> rs.initiate(cfg)	# 使cfg配置生效# priority:优先级越大,则优先分配成主节点# 对于仲裁节点,必须要有arbiterOnly:true,不然主备模式就不能生效
登录从节点:mongo 127.0.0.1:27617> db.getMongo().setSlaveOk()	# 当要去从节点查询数据时,直接插会报错,需要设置从节点为只读.注意从节点的前缀现在是SECONDARY。

查看集群状态:> rs.status(),重点看这些字段

使用Replica Set副本集方式搭建mongodb副本集群

9.开启mongodb认证配置

(1)配置主节点:
登录master节点:mongo 127.0.0.1:27517> use admin> db.createUser({user: "admin",pwd: "123456",roles:[{role:"userAdminAnyDatabase",db:"admin"},"readWriteAnyDatabase"]});> db.grantRolesToUser("admin", ["clusterAdmin"])	# 需要给admin赋予集群权限,否则在后面执行rs.status()会出现如下报错:"errmsg" : "not authorized on admin to execute command { replSetGetStatus: 1.0,.....

使用Replica Set副本集方式搭建mongodb副本集群

> db.auth("admin", "123456")	# 登录数据库> db.system.users.find()	# 查看用户mongo 127.0.0.1:27517 -u admin -p 123456 --authenticationDatabase admin	# 使用命令验证登录
(2)生成mongodb_key文件:
openssl rand -base64 21 > /data/mongodb_test/mongodb_keychmod 600 mongodb_keycat mongodb_key HnYdGbfazRVLdIl2xIuaDmasYXT0# 注意:上面的数字 21,最好是 3 的倍数,否则生成的字符串可能含有非法字符,认证失败。
(3)修改mongodb主,备,仲裁节点的配置文件
# 增加下面两行......auth=truekeyFile =/data/mongodb_test/mongodb_key
(4)重启mongodb主,备,仲裁节点
# 关闭kill $(pgrep -f "/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf")kill $(pgrep -f "/usr/local/mongodb/bin/mongod -f /data/mongodb_test/arbiter/arbiter.conf")kill $(pgrep -f "/usr/local/mongodb/bin/mongod -f /data/mongodb_test/master/master.conf")# 启动/usr/local/mongodb/bin/mongod -f /data/mongodb_test/master/master.conf/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf/usr/local/mongodb/bin/mongod -f /data/mongodb_test/arbiter/arbiter.conf

10.测试集群,验证主备切换

> rs.status() 查看主节点,27517为主节点,27617为从节点

"_id" : 1,"name" : "10.21.210.78:27617","health" : 1,"state" : 1,"stateStr" : "PRIMary","_id" : 1,"name" : "10.21.210.78:27617","health" : 1,"state" : 2,"stateStr" : "SECONDARY",

模拟故障,kill主节点

使用Replica Set副本集方式搭建mongodb副本集群

登录其中正常的节点查看状态:27517为非健康状态,27617成为新的主节点

"_id" : 0,"name" : "10.21.210.78:27517","health" : 0,"state" : 8,"stateStr" : "(not reachable/healthy)","uptime" : 0,"_id" : 1,"name" : "10.21.210.78:27617","health" : 1,"state" : 1,"stateStr" : "PRIMary","uptime" : 2116,

恢复故障节点后,查看集群状态:27517成为主节点,27617为从节点

/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf

"_id" : 0,"name" : "10.21.210.78:27517","health" : 1,"state" : 1,"stateStr" : "PRIMary","uptime" : 18,"_id" : 1,"name" : "10.21.210.78:27617","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 15,
验证集群正常

11.验证数据同步

使用Replica Set副本集方式搭建mongodb副本集群

使用Replica Set副本集方式搭建mongodb副本集群

12.实际应用程序如何连接副本集群?

副本集连接字符串格式:
@H_481_4@mongodb://username:password@host1:port1,host2:port2[,...,hostN:portN]/database?options# options是连接配置中的可选项,replicaSet是其中的一个子项。示例可以写成:mongodb://admin:123456@10.21.210.78:27517,10.21.210.78:27617/DbName?replicaSet=testrs"

注意:因为仲裁节点没有数据副本,仲裁节点也不可能会被选举为主节点,所以连接字符串信息中不要包含仲裁节点的信息。

 

大佬总结

以上是大佬教程为你收集整理的使用Replica Set副本集方式搭建mongodb副本集群全部内容,希望文章能够帮你解决使用Replica Set副本集方式搭建mongodb副本集群所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。