Mongodb集群搭建

一、Mongodb集群搭建的三种方式
  1. Replica Set(首选)副本集,集群中包含了多份数据,主节点挂掉之后从节点能继续提供服务。

  1. Sharding 分片集群,只有真正的大数据才能展现它的优势,毕竟节点同步数据是需要消耗时间的。Sharding能够将多片数据集中到路由节点进行一些对比,然后再将数据返回,效率稍稍较低。

  1. Master-Slaver 主备集群,官方已经不推荐。

二、Replica Set工作原理
  1. Replica Set叫作副本集,集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据须要和主节点一致。

  1. Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。

  1. 默认设置下,主节点提供全部增删查改服务,备节点不提供任何服务。可是能够经过设置使备节点提供查询服务,这样就能够减小主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫作Read Preference Modes,同时Java客户端提供了简单的配置方式,能够没必要直接对数据库进行操做。

  1. 仲裁节点是一种特殊的节点,它自己并不存储数据,主要的做用是决定哪个备节点在主节点挂掉以后提高为主节点,因此客户端不须要连接此节点。这里虽然只有一个备节点,可是仍然须要一个仲裁节点来提高备节点级别。

三、Replica Set集群搭建

  1. 解压mongo安装包和工具包

tar -zxvf mongodb-database-tools-rhel70-x86_64-100.5.2.tgz
mv mongodb-database-tools-rhel70-x86_64-100.5.2 mongodb-tools-100.5.2
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.12.tgz
mv mongodb-linux-x86_64-rhel70-4.4.12 mongodb4.4.12
cd /data/tools/mongodb-tools-100.5.2/bin/
cp bsondump mongodump mongoexport mongofiles mongoimport mongorestore mongostat mongotop /data/tools/mongodb4.4.12/bin/
  1. 分别建立主、从、仲裁节点mongo目录

mkdir -p /data/tools/mongodb4.4.12-master/data

mkdir -p /data/tools/mongodb4.4.12-slaver/data

mkdir -p /data/tools/mongodb4.4.12-arbiter/data

  1. 创建和编辑配置文件mongo.conf分别放置于mongo主目录:/data/tools/mongodb4.4.12-master/

#master.conf
dbpath=/data/tools/mongodb4.4.12-master/data
logpath=/data/tools/mongodb4.4.12-master/master.log
pidfilepath=/data/tools/mongodb4.4.12-master/master.pid
directoryperdb=true
logappend=true
replSet=tmsrs
bind_ip=0.0.0.0
port=28017
oplogSize=10000
fork=true
#slaver.conf
dbpath=/data/tools/mongodb4.4.12-slaver/data
logpath=/data/tools/mongodb4.4.12-slaver/slaver.log
pidfilepath=/data/tools/mongodb4.4.12-slaver/slaver.pid
directoryperdb=true
logappend=true
replSet=tmsrs
bind_ip=0.0.0.0
port=28018
oplogSize=10000
fork=true
#arbiter.conf
dbpath=/data/tools/mongodb4.4.12-arbiter/data
logpath=/data/tools/mongodb4.4.12-arbiter/arbiter.log
pidfilepath=/data/tools/mongodb4.4.12-arbiter/arbiter.pid
directoryperdb=true
logappend=true
replSet=tmsrs
bind_ip=0.0.0.0
port=28018
oplogSize=10000
fork=true
  1. 启动mongodb的主、从、仲裁节点

#启动mongo
/data/tools/mongodb4.4.12-master/bin/mongod --config /data/tools/mongodb4.4.12-master/master.conf
/data/tools/mongodb4.4.12-slaver/bin/mongod --config /data/tools/mongodb4.4.12-slaver/slaver.conf
/data/tools/mongodb4.4.12-arbiter/bin/mongod --config /data/tools/mongodb4.4.12-arbiter/arbiter.conf
  1. 保证各个节点之间网络互通,配置集群

登录master节点: mongo 127.0.0.1:28017
> use admin
> config={_id:"tmsrs",members:[{_id:0,host:'10.20.28.4:28017',priority:2},{_id:1,host:'10.20.28.4:28018',priority:1},{_id:2,host:'10.20.28.4:28019',arbiterOnly:true}]};
> rs.initiate(config)	# 使config配置生效
#priority:优先级越大,则优先分配成为主节点。
#仲裁节点,必须要配置arbiterOnly:true,否则主从模式不能生效。
登录从节点: mongo 127.0.0.1:28018
> db.getMongo().setSecondaryOk()
#当去从节点操作数据时,直接插入会报错,需要设置从节点为只读。
  1. 查看集群状态: 登录主节点后输入rs.status()

  1. 配置主节点用户

登录master节点:mongo 127.0.0.1:28017
> use admin
> db.createUser({user:"admin",pwd: "admin",roles:[{role:"root",db:"admin"}]});
> db.grantRolesToUser("admin", ["clusterAdmin"])  #需要给admin用户赋予集群权限,不然后面执行rs.status()会报错:"errmsg" : "not authorized on admin to execute command { replSetGetStatus:......
> db.auth("admin", "admin")
> db.system.users.find()
  1. 生成mongodb_key文件:

openssl rand -base64 128 > /data/tools/mongodb4.4.12-master/mongodb_key
chmod 600 mongodb_key #修改文件权限
  1. 分别在主、从、仲裁节点的配置文件中加上权限和mongodb_key

# master.conf  slaver.conf  arbiter.conf
......
auth=true
keyFile=/data/tools/mongodb4.4.12-master/mongodb_key
  1. 重启mongo数据库,登录主节点查看集群状态

kill -2 mongo_pid
#启动mongo
/data/tools/mongodb4.4.12-master/bin/mongod --config /data/tools/mongodb4.4.12-master/master.conf
/data/tools/mongodb4.4.12-slaver/bin/mongod --config /data/tools/mongodb4.4.12-slaver/slaver.conf
/data/tools/mongodb4.4.12-arbiter/bin/mongod --config /data/tools/mongodb4.4.12-arbiter/arbiter.conf
#登录mongo
/data/tools/mongodb4.4.12-master/bin/mongo 127.0.0.1:28017
> use admin;
> db.auth("admin","admin");
> rs.status();
  1. 模拟故障,kill 28017主节点,登录28018从节点,查看集群状态。检查功能是否正常运行,插入数据是否能在28018查到。恢复故障,重启28017主节点,检查数据是否会同步回28017主节点。

四、java连接mongodb集群
  1. 添加maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    <version>2.6.7</version>
</dependency>
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.4.3</version>
</dependency>
  1. 配置application.yml文件

spring:
  data:
    mongodb:
      # 集群配置mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
      uri: mongodb://[username:password@]100.200.280.40:28017,100.200.280.40:28018/admin?replicaSet=tmsrs
  1. 然后就可以启动访问数据库啦!

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要搭建MongoDB集群,你可以选择单机版、副本集群或分片集群。在Java开发中,代码本身没有任何区别,区别只在于application.yml的配置。 首先,对于单机版,你只需要配置一个MongoDB实例即可。配置文件中的uri字段指定连接地址,例如:mongodb://192.168.***.***:27017/testdb。 其次,副本集群是由多个MongoDB实例组成的,并且数据会自动复制到其他实例。配置文件中的uri字段指定多个实例的连接地址,例如:mongodb://192.168.***.***:27027,192.168.***.***:27028,192.168.***.***:27029/testdb。 最后,分片集群是由多个分片组成的,每个分片都包含了数据的子集。配置文件中的uri字段指定多个分片的连接地址,例如:mongodb://192.168.***.***:27071,192.168.***.***:27072,192.168.***.***:27073/testdb。在分片集群中,还需要配置路由服务(mongos)。 在安装MongoDB时,你可以使用提供的安装包和工具包。解压安装包和工具包后,将工具包中的bin目录下的各个可执行文件(如bsondump、mongodump等)复制到MongoDB的安装目录下的bin目录中。 通过以上步骤,你就可以搭建MongoDB集群了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MongoDB集群搭建](https://blog.csdn.net/qq_55106682/article/details/122135750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Mongodb集群搭建](https://blog.csdn.net/qq_21333693/article/details/128968829)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值