本次主要介绍一下我们项目中关于mongodb复制集的搭建过程。

部署三台mongodb,分别是在69,70,71上面。71上面是主节点,69和70是从节点。使用mongodb3.4.0版本。

先看一安装完后的目录结构:

/u04

--mongodb

--data  数据文件目录

--logs

--mongo.log

--mongodb3.4  安装目录

--bin

--keyfile.dat  集群通信的文件

--mongo.conf

--mongodb.pid

--mongoDbStart.log  --启动日志文件

--mongoDbStart.sh  --启动脚本

准备

先su root

再mkdir u04/mongodb -p

chown -R sysadm:sysadm u04

开始

一、将mongodb-linux-x86_64-3.4.0.tgz上传到mongodb目录下面。

解压到当前目录的mongodb3.4目录中。

二、建立data目录

建立logs目录,在logs目录下面创建mongo.log文件。 touch mongo.log

创建mongo.conf文件。Vim mongo.conf文件,输入下面的内容:

#数据库路径

dbpath=/u04/mongodb/data

#日志输出文件路径

logpath=/u04/mongodb/logs/mongo.log

#错误日志采用追加模式

logappend=true

#启用日志文件,默认启用

journal=true

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false

quiet=true

#端口号 默认为27017

port=27017

#pidfile文件

pidfilepath=/u04/mongodb/mongodb.pid

#开启权限

#auth=true

#后台运行

fork=true

创建mongoDbStart.sh文件,输入下面的内容:

/u04/mongodb/mongodb3.4/bin/mongod --config /u04/mongodb/mongo.conf

修改mongoDbStart.sh的权限:

chmod 777 mongoDbStart.sh

启动测试

nohup  /u04/mongodb/mongoDbStart.sh >mongoDbStart.log 2>&1 &

测试连接是否成功:mongo ip:port

只要能连接上就行,不要执行其它操作(因为初始化复制集的时候要保证mongodb里面没有数据和用户)

使用命令:/u04/mongodb/mongodb3.4/bin/ mongo  x.x.x.71:27017

使用robo来连接:

关闭mongodb,切记 kill -9 PID

而是使用Kill -2 PID 这样会让mongodb数据库在关闭之前做一下收尾的处理。

重复以上步骤在69和70上面,建立mongodb的从节点,然后测试是否成功连接。切记不要执行创建用户创建数据等任何操作。

创建复制集

修改三个配置文件:复制集名称:gjywset

replSet=gjywset

echo replSet=gjywset >> mongo.conf

(也可以直接将replSet=gjywset提前写入mongo.conf文件中,节省了上面的测试是否能够链接成功一步。)

启动三个mongodb数据库。

1、初始化复制集:

登录到71节点上,/u04/mongodb/mongodb3.4/bin/ mongo  x.x.x.71:27017

(要是一个完全新的mongodb数据库才能初始化,如果已经创建用户或者创建数据库/集合等,就不能初始化成功了)

①:输入:

config = {

_id:"gjywset",

members:[

{_id:0,host:"x.x.x.71:27017","priority":3},

{_id:1,host:"x.x.x.70:27017","priority":2},

{_id:2,host:"x.x.x.69:27017","priority":1}

]

}

参数说明:arbiterOnly表示是一个仲裁节点。(本次没有使用)

priority:表示权重,数据越大越有可能成为主节点

②:执行初始化:rs.initiate(config);

③:使用rs.status()查看状态   显示71上的27017为主节点。

2、测试:

连接71上的27017:

use admin

use yujk

db

db.yjklog.insert({name:"zhangsan",age:11,sex:"男"})

db.yjklog.insert({name:"lisi",age:22,sex:"男"})

db.yjklog.insert({name:"王力宏",age:22,sex:"女",address:"外星移民"})

db.yjklog.insert({name:"花无缺",age:22,address:"广东丰台区nalinanbian"})

db.yjklog.find();

连接69上的27017:

db

show dbs  报错

rs.slaveOk(1);

show dbs;

use yujk;

show tables;

db.yjklog.find();

演示完成。

权限开启:

#########开启角色权限的校验###############root权限包含了any的四个全部的权限,什么权限都有。

开启角色权限:

(1)先创建用户:yjkroot和yjkhost

use admin

db.createUser({user:" yjkroot",pwd:"gjywroot",roles:[{role:"root",db:"admin"},{role:"readWrite",db:"yujk"}]})  #这样设置,要有root的角色

use yujk

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

关掉三个节点。

(2)在配置文件中将author=true打开  三个配置文件都要打开。

(3)连接x.x.x.71:27017主节点,

use admin

db.auth("yjkroot","yjkroot");

rs.status();发现还没有配置keyfile,即不同节点直接是不信任的状态--->>"authenticated" : false

关闭三个节点。Kill -2 mongopid

(4)使用openssl生成密钥文件

cd /u04/mongodb

openssl  rand -base64 30 > keyfile.dat  #30位的长度

修改文件权限:chmod 600 keyfile.dat

(5)将keyfile文件拷贝到69和70服务器的mongodb目录下

(6)修改配置文件启用keyfile文件  keyFile=/u04/mongodb/keyfile.dat

echo keyFile=/u04/mongodb/keyfile.dat >> mongo.conf

(7)启动三个节点:参照上面的方式.

nohup  /u04/mongodb/mongoDbStart.sh >mongoDbStart.log 2>&1 &

至此,mongodb复制集就安装好了。

推荐一个慕课网上面老师讲解mongodb的,

https://www.imooc.com/u/1196301/courses?sort=publish

https://www.cnblogs.com/clsn/p/8214194.html

https://www.cnblogs.com/clsn/p/8214345.html

https://www.cnblogs.com/clsn/p/8244206.html

优先级设置priority和votes:

https://blog.csdn.net/jjwen/article/details/53944503

最新文章

  1. 应用程序框架实战三十六:CRUD实战演练介绍
  2. MongoDB配置服务--MongoDB安装成为windows服务
  3. Summernote
  4. Integer & int & == & equals
  5. Quartz定时任务学习(一)简单任务
  6. Library not found for -lPods 解决方法
  7. css改变图片的颜色
  8. [ZZ] C++ pair
  9. ios 网络数据下载和JSON解析
  10. 关于datetime和int 是否可为null的问题
  11. sa命令从/var/account/pacct原始记账数据文件读取信息并汇总
  12. ubuntu系统内核替换
  13. Python学习--使用dlib、opencv进行人脸检测标注
  14. 读《Linux内核设计与实现》我想到了这些书
  15. js关联数组
  16. 血红蛋白值的临床意义(hemoglobin ,Hb,HGB)
  17. mysql 计算两点经纬度之间的距离含具体sql语句
  18. 国内互联网公司UED博客
  19. vue 开发系列(二) vue ajax 拦截
  20. repo sync出现“fatal: '../platform/abi/cpp.git' does not appear to be a git repository”的解决方案

热门文章

  1. windows 打印刻录 代码规范及问题
  2. 异步nodejs代码的同步样子写法样例
  3. OLED中的Demura
  4. Android已上线应用开源分享中(第二季)
  5. sqlserver索引维护(重新组织生成索引)
  6. IIS Post 大小超出允许的限制
  7. .net正在终止线程异常
  8. shell单引号双引号详解
  9. How to alter department in PMS system
  10. c++中左值的含义