环境:
OS:CentOS 7
DB:3.0.15
机器角色:
192.168.1.134:10001 主
192.168.1.135:10002 从
192.168.1.135:10003 仲裁节点

1.下载相应的版本
https://www.mongodb.com/download-center/community
我这里下载的是mongodb-linux-x86_64-3.0.15.tgz

---------------------------------------安装部署---------------------------------------
1.安装数据库
每个节点都安装数据库,安装方法一样
[root@pxc01 soft]#tar -xvf mongodb-linux-x86_64-3.0.15.tgz
[root@localhost soft]# mv mongodb-linux-x86_64-3.0.15 /opt/mongodb3015
[root@pxc01 soft]#cd /opt/mongodb3015
[root@pxc01 soft]#mkdir data ##数据文件目录
[root@pxc01 soft]#mkdir log ##日志文件目录
[root@pxc01 soft]#mkdir key ##认证文件目录
[root@pxc01 soft]#mkdir conf ##配置文件目录

2.产生秘钥验证
[root@pxc01 key]# cd /opt/mongodb3015/key
[root@pxc01 key]# openssl rand -base64 741 >>keyfile
[root@pxc01 key]# chmod 700 keyfile

3.将节点1上的整个目录都拷贝到另外的机器
因为我们第二个节点即做从节点也做仲裁节点,索引拷贝过去后需要重命名文件夹
[root@pxc01 opt]# scp -r ./mongodb3015 root@192.168.1.135:/opt/mongodb3015_slave
[root@pxc01 opt]# scp -r ./mongodb3015 root@192.168.1.135:/opt/mongodb3015_arbiter

4.创建配置文件mongo.cnf
##主节点的配置参数
port = 10001
fork = true
dbpath = /opt/mongodb3015/data
logpath = /opt/mongodb3015/log/logs
logappend = true
shardsvr = true
replSet = repltest
##keyFile=/opt/mongodb3015/key/keyfile
##auth = true

##从节点的配置参数
port = 10002
fork = true
dbpath = /opt/mongodb3015_slave/data
logpath = /opt/mongodb3015_slave/log/logs
logappend = true
shardsvr = true
replSet = repltest
##keyFile=/opt/mongodb3015_slave/key/keyfile
##auth = true

##仲裁节点的配置参数
port = 10003
fork = true
dbpath = /opt/mongodb3015_arbiter/data
logpath = /opt/mongodb3015_arbiter/log/logs
logappend = true
shardsvr = true
replSet = repltest
##keyFile=/opt/mongodb3015_arbiter/key/keyfile
##auth = true

这里keyFile和auth先注释,因为等部署完初始化完集群后再启用

5.启动
主节点启动:
[root@pxc01 bin]# ./mongod -f /opt/mongodb3015/conf/mongo.cnf
从节点启动:
[root@pxc02 bin]# ./mongod -f /opt/mongodb3015_slave/conf/mongo.cnf
仲裁节点启动:
[root@pxc02 bin]# ./mongod -f /opt/mongodb3015_arbiter/conf/mongo.cnf

6.初始化副本集
[root@localhost bin]# cd /opt/mongodb3015/bin
[root@localhost bin]# ./mongo 192.168.1.134:10001
use admin
config={_id:'repltest',members:[{_id:0,host:'192.168.1.134:10001'},{_id:1,host:'192.168.1.135:10002'},{_id:2,host:'192.168.1.135:10003', arbiterOnly:true}]}
rs.initiate(config)
到这里要是不需要带认证的副本集的化,就配置完成了,下面的部署我们继续配置带认证的

7.创建用户
在节点1上创建管理员账号sa
[root@localhost bin]# ./mongo 192.168.1.134:10001
use admin
db.createUser({user:"sa",pwd:"123456",roles:["root"]}); --创建用户
db.auth("sa","123456"); --设置用户登陆权限,密码一定要和创建用户时输入的密码相同
show users; --查看创建的用户

登录另外的两个节点,查看是否完成同步
[root@localhost bin]# ./mongo 192.168.1.135:10002
repltest:SECONDARY> use admin;
switched to db admin
repltest:SECONDARY> show users;
{
"_id" : "admin.sa",
"user" : "sa",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}

仲裁节点是不存放数据的:
[root@localhost bin]# ./mongo 192.168.1.135:10003
repltest:ARBITER> use admin;
repltest:ARBITER> show users;
repltest:ARBITER>

8.关闭集群启用认证参数
采用localhost登录进行关闭数据库,每个节点操作一致,可以先停掉从库和仲裁节点再停主库
192.168.1.135机器:
[root@pxc03 bin]# ./mongo localhost:10002
repltest:SECONDARY> use admin
repltest:SECONDARY> db.shutdownServer()

[root@localhost bin]# ./mongo localhost:10003
repltest:ARBITER> use admin
switched to db admin
repltest:ARBITER> db.shutdownServer()

192.168.1.134机器
[root@localhost bin]# ./mongo localhost:10001
repltest:SECONDARY> use admin
repltest:SECONDARY> db.shutdownServer()

可以查看各进程是否存在
[root@localhost log]# ps -ef|grep mongo

9.修改配置文件启用认证
分别修改3个节点的配置文件,将之前注释的两行,启用
keyFile=/opt/mongodb3015/key/keyfile
auth = true

10.再次启动数据库
主节点启动:
[root@pxc01 bin]# ./mongod -f /opt/mongodb3015/conf/mongo.cnf
从节点启动:
[root@pxc02 bin]# ./mongod -f /opt/mongodb3015_slave/conf/mongo.cnf
仲裁节点启动:
[root@pxc02 bin]# ./mongod -f /opt/mongodb3015_arbiter/conf/mongo.cnf

登陆主数据库
[root@localhost bin]# ./mongo 192.168.1.134:10001
MongoDB shell version: 3.0.15
connecting to: 192.168.1.134:10001/test
repltest:PRIMARY> show databases;
2019-02-20T09:50:06.784+0800 E QUERY Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13
}
at Error (<anonymous>)
at Mongo.getDBs (src/mongo/shell/mongo.js:47:15)
at shellHelper.show (src/mongo/shell/utils.js:630:33)
at shellHelper (src/mongo/shell/utils.js:524:36)
at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47

repltest:PRIMARY> use admin
switched to db admin
repltest:PRIMARY> db.auth("sa","123456");
1
repltest:PRIMARY> show databases;
admin 0.078GB
local 22.067GB

登陆从数据库
./mongo 192.168.1.135:10002
repltest:SECONDARY> use admin
switched to db admin
repltest:SECONDARY> db.auth("sa","123456");
1
repltest:SECONDARY> show databases;
admin 0.078GB
local 22.067GB

登陆仲裁节点,仲裁节点是不存放数据库的,所以无法执行如下命令
repltest:ARBITER> use admin
switched to db admin
repltest:ARBITER> db.auth("sa","123456");
Error: 18 Authentication failed.
0

11.查看副本集状态
[root@localhost bin]# ./mongo 192.168.1.134:10001
repltest:PRIMARY> use admin
repltest:PRIMARY> db.auth("sa","123456")
repltest:PRIMARY> rs.status()
{
"set" : "repltest",
"date" : ISODate("2019-02-20T01:55:24.159Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.1.134:10001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 481,
"optime" : Timestamp(1550626644, 4),
"optimeDate" : ISODate("2019-02-20T01:37:24Z"),
"electionTime" : Timestamp(1550627289, 1),
"electionDate" : ISODate("2019-02-20T01:48:09Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "192.168.1.135:10002",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 434,
"optime" : Timestamp(1550626644, 4),
"optimeDate" : ISODate("2019-02-20T01:37:24Z"),
"lastHeartbeat" : ISODate("2019-02-20T01:55:23.957Z"),
"lastHeartbeatRecv" : ISODate("2019-02-20T01:55:22.426Z"),
"pingMs" : 1,
"lastHeartbeatMessage" : "could not find member to sync from",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.1.135:10003",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 402,
"lastHeartbeat" : ISODate("2019-02-20T01:55:23.950Z"),
"lastHeartbeatRecv" : ISODate("2019-02-20T01:55:23.233Z"),
"pingMs" : 1,
"configVersion" : 1
}
],
"ok" : 1
}

12.创建普通账号,并写入记录
use db_yeemiao
db.createUser({user:'threedev',pwd:'threedev123',roles:[{role:'dbOwner',db:'db_yeemiao'}]})
db.auth("threedev","threedev123")
db.tb_test02.insert( {"name":"yiibai tutorials"})

save方法写入数据
>db.createCollection("tb_test01") 创建表
>show collections 查看表是否创建成功
>db.tb_test01.save({age:1}) 添加数据
>db.tb_test01.find() 查看表数据

insert方法写入数据
db.inventory.insert( { _id: 10, type: "misc", item: "card", qty: 15 } )

java连接带有仲裁节点的副本集,只需要配置主从节点即可,不需要配置仲裁节点。

mongodb主从(副本集附仲裁节点)部署带认证模式的更多相关文章

  1. mongodb副本集仲裁节点搭建

    服务器准备: 主节点192.168.100.106 从节点192.168.100.107 仲裁节点192.168.100.108 三台服务器: 关闭防火墙 service iptables stop ...

  2. mongodb主从副本集配置

    创建路径: mkdir -p /datassd/mongo_20011/{data,conf,log}     配置文件示例: #mongo.conf dbpath=/datassd/mongo/da ...

  3. 修改mongodb(带仲裁节点的副本集)各机器端口

    需求:因为端口调整,需要改变副本的备份集 1.查看当前的副本集信息 [root@localhost bin]# ./mongo 192.168.1.134:10001 repltest:PRIMARY ...

  4. MongoDB集群部署 - 带访问控制的分片副本集

    1. 前言 Ceilometer将meter.event等数据保存在MongoDB中,之前将MongoDB部署在控制节点上,使用三副本模式,时间长了发现meter数据爆炸式增长,区区2T的磁盘捉襟见肘 ...

  5. spring配置mongodb连接副本集多个节点

    mongodb版本3.4.x 1.配置副本集 先配置副本集,可参考我之前写的文章:http://blog.csdn.net/fuck487/article/details/78287362 注意:必须 ...

  6. MongoDB仲裁节点的理解以及memcached,zookeeper,redis,故障恢复方案思考.

    在进行副本集部署时我们会添加一个或多个仲裁节点,仲裁节点不用于备份数据,由于它职责的职责是负责选举主节点,所以对硬件没有太高要求,可以将它部署在单独的服务器上,这个服务器可以是监听服务器,也可以部署在 ...

  7. mongodb副本集原理及部署记录

    工作原理 1.副本集之间的复制是通过oplog日志现实的.备份节点通过查询这个集合就可以知道需要进行复制的操作 2.oplog是节点中local库中的一个固定的集合,在默认情况下oplog初始化大小为 ...

  8. mongodb带认证的副本集搭建

    Mongodb副本集带用户认证的 概述 本次实验是在一台虚拟机上做的,正式环境一定要分开实现,以免影响服务的正常使用和性能. 准备工作: 操作系统:centos7.2 Mongodb版本:3.4.1 ...

  9. Mongodb 副本集的节点详细操作

    副本集操作 官方文档:https://docs.mongodb.com/v3.2/reference/method/js-replication/ 1 rs.add(){ _id: <int&g ...

随机推荐

  1. IE8下动态生成option无法设置文本内容

    问题: 1.在IE8下,JS动态添加 option 的时候,value 有值,但是文本内容添加不上 例:<option value="北京"></option&g ...

  2. RecyclerView实现分组展示信息

    extends:http://blog.csdn.net/wzlyd1/article/details/52292548 前言 一直在鸿洋大神的安卓群里水群,渐渐的loader和安卓弟等人都成长了起来 ...

  3. vue.js学习资料

    vue.js学习VuejsAPI教程 https://vuejs.org.cn/guide/Vuejs自己的构建工具 http://www.jianshu.com/p/f8e21d87a572如何用v ...

  4. 算法提高 最小方差生成树(Kruskal)_模板

     算法提高 最小方差生成树   时间限制:1.0s   内存限制:256.0MB        问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是 ...

  5. mybatis05--多条件的查询

    public interface StudentDao { /** * 前台的表单给出的查询条件不能封装成一个对象的时候 * 查询只能是多个参数了! 也就是参数不全是Student中的属性! * 这时 ...

  6. laravel+阿里大于实现发送验证码短信

    一.短信服务使用阿里大于提供的短信接口 阿里大于官方网站上的接入流程: 在阿里大于申请接口后,需要做以下操作: 申请签名 申请短信模板 创建Accesskey,可以通过权限最大的Accesskey创建 ...

  7. 关于 systemctl --user status 报错的问题

    关于 systemctl --user enable mpd 报错: Failed to connect to bus: No such file or directory 因为arch脚本中,sys ...

  8. Codeforces 1089K - King Kog's Reception - [线段树][2018-2019 ICPC, NEERC, Northern Eurasia Finals Problem K]

    题目链接:https://codeforces.com/contest/1089/problem/K time limit per test: 2 seconds memory limit per t ...

  9. RGBA与Opacity

    rgba(r,g,b,a) 都与透明度有关,rgba不会影响文字,opacity则会.

  10. JavaScript将字典序升序排列类似php中的ksort函数

    /** * 将json数据进行排序 * @param {*jason} data */ export function JsonSort(jsonData) { try { let tempJsonO ...