【mongodb】【复制集】【primary】【Replica set】

介绍

在服务器上搭建了个复制集,只有两台虚拟机,系统一个红帽、一个centOS,经过测试,也还是能实现复制集的功能的。

  1. 172.21.29.210
  2. 172.21.29.211

但是我在同一个虚拟机上装了两个库,能够实现主从节点的自动切换。

MongoDB下载

1. 进入usr/local,下载压缩包,然后解压缩,再改个名,改成mongodb

cd ../usr/local
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.13.tgz`
tar zxvf mongodb-linux-x86_64-rhel70-3.6.3.tgz
mv mongodb-linux-x86_64-rhel70-3.6.3 mongodb

2.新建两个文件夹(存放目录,路径要记下,后续的配置文件中要对应)

mkdir /usr/local/mongodb/data -p						# data数据文件的存放目录
mkdir /usr/local/mongodb/logs -p 						# logs日志文件的存放目录

3. 转到mongodb文件夹中,新建并修改配置文件

cd ./monogodb
vi mongodb.conf

4. 把这一坨整进去

# 设置数据文件的存放目录
dbpath=/usr/local/mongodb/data
#日志输出文件路径及其日志文件名
logpath=/usr/local/mongodb/logs/mongodb.log
#错误日志采用追加模式
logappend=true
#启用日志文件,默认启用
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true
#端口号 默认为27017
port=27017
#允许远程访问
bind_ip=0.0.0.0
#开启认证,必选先添加用户,先不开启(不用验证账号密码)
#auth=true
# 设置每个数据库将被保存在一个单独的目录
directoryperdb=true 

configsvr = true
# 设置为以守护进程的方式运行,即在后台运行
fork=true

配置环境变量

vi /etc/profile

到文件最下面,把下方内容粘贴进去

# MongoDB 环境变量内容

export MONGODB_HOME=/usr/local/mongodb

export PATH=$MONGODB_HOME/bin:$PATH

使立即生效

source /etc/profile

启动mongo

到mongo文件夹中启动,config后面跟配置文件mongodb.conf的路径,successfully显示成功。

cd /usr/local/mongo
[root@iZuf6ahuk73s2puww2elmpZ]# ./bin/mongod -f mongodb.conf  
·····················································
about to fork child process, waiting until server is ready for connections.
forked process: 5702
child process started successfully, parent exiting

# 查看状态。可以用kill 杀掉进程。
[root@iZuf6ahuk73s2puww2elmpZ]# ps -ef |grep mongodb
······················································
root      5702     1  2 14:38 ?        00:00:00 ./bin/mongod -f mongodb.conf
root      5729  5601  0 14:39 pts/0    00:00:00 grep --color=auto mongodb

复制集搭建

1.在两台以上的机器上下载mongodb,mongodb.config文件配置相同。

由于我是在同一台机器上下载了两个,只需要新建另外的文件夹,解压mongo,在配置文件中修改端口号(例如:20718),这涉及到防火墙问题,所以说我都是把防火墙关掉。

2.启动主节点(随便找一台顺手的即可,后期的主节点可以切换)

在mongodb文件夹中,启动mongodb

[root@roothost-10-90-2-105 mongodb]#./bin/mongod -f mongodb.conf  # 主

3.进入主节点并新建root账号

[root@roothost-10-90-2-105 mongodb4.0.2]#mongo
MongoDB shell version v4.0.2

connecting to: mongodb://127.0.0.1:27017

MongoDB server version: 4.0.2
>use adimn
switch to admin
> db.createUser({ user: 'root', pwd: 'root', roles: [ { role:"root", db: "admin" } ] });
Successfully added user: {
	"user" : "root",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}
> 

4.停止主节点(直接ctrl+c,退出去,然后)

# 查看状态。kill 5072可以杀掉进程。
[root@iZuf6ahuk73s2puww2elmpZ]# ps -ef |grep mongodb
······················································
root      5702     1  2 14:38 ?        00:00:00 ./bin/mongod -f mongodb.conf
root      5729  5601  0 14:39 pts/0    00:00:00 grep --color=auto mongodb
[root@iZuf6ahuk73s2puww2elmpZ]# kill 5702

5.启用密码认证和keyfile证书验证:

进入mongodb文件夹,生成keyfiles文件
然后把主节点上生成的energy-rc.key传到从节点上,配置同主节点一样

[root@roothost-10-90-2-105 mongodb]# openssl rand -base64 756 > energy-rc.key    
 # 设置只读权限
[root@roothost-10-90-2-105 mongodb]# chmod 400 energy-rc.key      

配置文件中添加如下

[root@roothost-10-90-2-105 mongodb]# vi mongodb.conf

把下面东西粘进去

auth=true #打开认证
keyFile=/root/mongodb4.0.2/energy-rc.key  #启用key验证

6.启动主从节点

[root@roothost mongodb4.0.2]#./bin/mongod -f mongodb.conf  # 主
[root@server mongodb4.0.2]#./bin/mongod -f mongodb.conf # 从

7.进入主节点添加副本集节点

> use admin
switched to db admin
> db.auth('root','test123')
1
 # 查看复制集状态
> rs.status()
{
	"ok" : 0,
	"errmsg" : "no replset config has been received",
	"code" : 94,
	"codeName" : "NotYetInitialized"
}
# 定义配置信息,把两台节点加进来
> conf=
    {
    "_id" : "rs0",
    "members" : [
        { "_id" : 0, "host" : "172.21.29.210:27017" },
        { "_id" : 1, "host" : "172.21.29.211:27017" },
        { "_id" : 1, "host" : "172.21.29.211:27018" },
        ]
    }


# 初始化复制集
> rs.initiate(conf)
{ "ok" : 1 }

# 查看配置信息
rs0:SECONDARY> rs.conf()
总之一大串,懒得粘了。

进入每个数据库,看看>之前都会变。

在这里插入图片描述
primary为主,可以读写,secondary为从节点,只能读数据,但是还要给个读的权限(很简单,一句话)。

rs0:SECONDARY> use admin
switched to db admin
rs0:SECONDARY> db.auth('root','test123')
1
rs0:SECONDARY> show dbs;
2018-09-05T13:31:49.563+0800 E QUERY    [js] Error: listDatabases failed:{
	"operationTime" : Timestamp(1536125517, 1),
	"ok" : 0,
	"errmsg" : "not master and slaveOk=false",
	"code" : 13435,
	"codeName" : "NotMasterNoSlaveOk",
	"$clusterTime" : {
		"clusterTime" : Timestamp(1536125517, 1),
		"signature" : {
			"hash" : BinData(0,"KIttQEB/e0mzlQvqPJzeLWZgREM="),
			"keyId" : NumberLong("6597607397777211393")
		}
	}
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:67:1
shellHelper.show@src/mongo/shell/utils.js:876:19
shellHelper@src/mongo/shell/utils.js:766:15
@(shellhelp2):1:1
# 默认因为SECONDARY是不允许读写的,如果非要解决,方法如下:
rs0:SECONDARY> db.getMongo().setSlaveOk();
# 可以看到数据已经同步过来了
rs0:SECONDARY> show dbs;
admin           0.000GB
config          0.000GB
local           0.000GB
pay             0.000GB
rs0:SECONDARY> db.pay.find().count()
1
rs0:SECONDARY> db.pay.find()
{ "_id" : "1" }

第一次写文章,有点嘈杂,细节问题后期补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值