MongoDb副本集部署

MongoDb集群三种部署方式:

1)主从模式,类似与Mysql集群

2) 副本集( replica set)

3)分片(Sharding)

Linux  MongoDb副本集搭建 ——————》启动

上述模式介绍以及其他模式的介绍:http://www.cnblogs.com/wadeyu/p/7930608.html

假设3台机子,118.25.225.7部署主节点,118.25.225.8部署从节点1,118.25.225.9部署从节点2以及仲裁节点

这里采用mongoDb4.0.6,Linux 64位 legacy x64

1)三台机子分别下载 

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.6.tgz

2)三台机子分别解压

tar -zxf mongodb-linux-x86_64-4.0.6

3)分别给三台机子创建配置文件,日志文件等

其中118.25.225.9需要开两个实例,要配置两份文件,其他只需一份,这里已18.25.225.9为例:

先创建从节点2的文件

同样创建仲裁节点的文件,以及创建rs文件夹(之后跟权限有关)

编写配置文件mongodb.conf,mongodbsup.conf

mongoDb3.2以上就支持yaml写法,之前版本没试过。

同理更改mongodbsup.conf,其中port改为27018,以及其他两台服务器port都为27017

4)配置openssl 密钥

将mongodb.key文件分别存到三台服务器 rs文件夹中

5)配置副本集

启动主节点服务

进入主节点客户端

运行语句

 

use admin
cfg={ _id:"rs1", members:[ {_id:0,host:'118.25.225.7:27017',priority:3}, {_id:1,host:'118.25.225.8:27017',priority:2}, {_id:1,host:'118.25.225.9:27017',priority:2}{_id:2,host:'118.25.225.9:27018',arbiterOnly:true}] };  
rs.initiate(cfg) 

执行成功后,出现如下信息

{ "ok" : 1 }

priority表示优先级别,数值越大,表示是主节点

arbiterOnly:true表示仲裁节点

可以执行rs.status()来检查执行配置结果信息

6)配置权限账号

use admin

db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"}]})

db.auth("admin","admin") //权限验证

use test 

db.createUser({user:"test",pwd:"test",roles:[{role:"dbAdmin",db:"test"},{role:"readWrite",db:"test"}]})

配置完权限后,现在拥有admin库账号以及test库账号,权限大小自己查阅官方资料

7)关闭之前的服务,修改所有机子的.conf文件,修改security.authorization: enabled

重启所有服务,其中118.25.225.9启动mongoDb服务记得使用不同的配置文件启动,此时已经完成副本集配置。

用shell连接MongoDb客户端是记得带上host:port

 

副本集读写问题综合:

1:主从服务器数据是否同步,从服务器没有读写权限
a:向主服务器写入数据   ok   后台自动同步到从服务器,从服务器有数据
b:向从服务器写入数据  false 从服务器不能写
c:主服务器读取数据  ok 
d:从服务器读取数据  false 从服务器不能读


2:关闭主服务器,从服务器是否能顶替
kill -2 9933的pid
mongo的命令行执行rs.status()  发现PRIMARY替换了主机了


3:关闭的服务器,再恢复,以及主从切换
a:直接启动关闭的服务,rs.status()中会发现,原来挂掉的主服务器重启后变成从服务器了
b:额外删除新的服务器  rs.remove("localhost:9933"); rs.status()
c:额外增加新的服务器 rs.add({_id:0,host:"localhost:9933",priority:1});
d:让新增的成为主服务器   rs.stepDown(),注意之前的 priority投票
     
4:从服务器读写
db.getMongo().setSlaveOk();
db.getMongo().slaveOk();//从库只读,没有写权限,这个方法java里面不推荐了
db.setReadPreference(ReadPreference.secondaryPreferred());//在复制集中优先读secondary,如果secondary访问不了的时候就从master中读
db.setReadPreference(ReadPreference.secondary());//只从secondary中读,如果secondary访问不了的时候就不能进行查询
--------------------- 
作者:过天 
来源:CSDN 
原文:https://blog.csdn.net/sd0902/article/details/21537577 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值