ITPub博客

首页 > 数据库 > > 关于搭建MongoDB Replica Set(副本集)

关于搭建MongoDB Replica Set(副本集)

作者:浪花小雨滴 时间:2020-05-12 11:39:22 0 删除 编辑

以下是我给公司搭建mongoDB副本集的过程,查阅了不少资料,赶紧记录下来,供大家参考。


一、准备三台服务器(三个mongod实例):

192.168.100.101:27017

192.168.100.102:27017

192.168.100.103:27017

打算把服务器配置较高的192.168.100.101作为默认的PRIMARY,其它两台作为SECONDARY。



二、给三台服务器分别按装mongoDB

1、下载安装包

[root@server ~]# cd /home/
[root@server home]# curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.10.tgz
[root@server home]# mkdir mongodb
[root@server home]# tar zxvf mongodb-linux-x86_64-3.2.10.tgz -C mongodb/


这个时候发现,mongodb文件夹里面还有一个压缩包同名的文件夹,早知道直接解压到home下,重命名了,现在需要到mongodb/mongodb-linux-x86_64-3.2.10/目录下把内容copy到上一层

[root@server home]# cd mongodb/mongodb-linux-x86_64-3.2.10/
[root@server mongodb-linux-x86_64-3.2.10]# mv ./* ../


然后把该空的文件夹删掉即可

[root@server mongodb]# rm -rf ./mongodb-linux-x86_64-3.2.10/
[root@server mongodb]# ll
total 100
drwxr-xr-x. 2 root root  4096 Jul 13 13:39 bin
-rw-r--r--. 1 root root 34520 Sep 30  2016 GNU-AGPL-3.
-rw-r--r--. 1 root root 16726 Sep 30  2016 MPL-2
-rw-r--r--. 1 root root  1359 Sep 30  2016 README
-rw-r--r--. 1 root root 35910 Sep 30  2016 THIRD-PARTY-NOTICES

将mongodb安装文件复制到/usr/local/目录(这只是我们约定的安装文件目录)
[root@uat-server home]#mv mongodb  /usr/local/


2、配置环境变量:

修改/etc/profile内容 :

[root@server ~]# vi /etc/profile


在文件末尾加上以下配置:

export MONGODB_HOME=/usr/local/mongodb    #这里就是mongodb解压之后的安装文件目录
export PATH=$PATH:$MONGODB_HOME/bin


然后保存退出,执行下面的命令使之立即生效:

[root@server ~]# source /etc/profile


3、配置mongodb实例相关目录

在/home目录下在创建一个mongodb目录,用于存放mongodb相关数据;然后在mongodb下依次创建log、data、conf目录,分别存放日志、数据和配置信息。


进入conf文件夹,创建mongodb启动实例的基本配置:

[root@server conf]# vi mongod.conf


在编辑器模式下输入以下内容:

bind_ip = ...						#允许连接mongodb的ip,0.0.0.0表示不限制访问
dbpath = /home/mongodb/data			#本次启动的mongodb实例,对应的数据存放目录
logpath = /home/mongodb/log/mongodb.log   	#日志存放目录
logappend = true						#多次启动,日志保存模式,这里是添加,而不是每次重启都清空
port = 27017						#mongodb实例的连接端口,采用了默认的端口27017
fork = true							#是否以守护进程方式运行实例
directoryperdb = true					#为每个db设定其归属目录
maxConns=2000						#最大连接数
#auth = true							#是否以安全认证方式运行,默认是不认证的非安全方式,先注释掉

#实例认证密码文件,用于主从或者副本集直接验证,同副本集的文件内容需要一致,先注释掉
#keyFile= /home/mongodb/conf/key			
httpinterface = true					#提供HTTP的log界面,默认端口28017
replSet = replSetHO					#副本集名称,同一副本集所有实例,name需要一致


这里先注释掉auth和keyFile,主要是为了第一次启动,登录客户端创建root账号。



三、启动mongodb实例,配置副本集


1、分别启动三台服务器的mongod实例

[root@server conf]# mongod --config /home/mongodb/conf/mongod.conf


查看下是否启动成功了,看到已经有进程ID,表示成功;其实执行上面的命令,稍等片刻会提示成功。

[root@server conf]# ps -ef | grep mongod
root      3964     1   Jul12 ?        00:07:26 mongod --config /home/mongodb/conf/mongod.conf
root      4709  4666   22:37 pts/    00:00:00 grep mongod


2、登录到预定义的PRIMARY的mongodb,配置副本集

[root@server conf]# mongo


在客户端执行以下命令:

replSetHO:PRIMARY> config = { _id:"replSetHO", members:[{_id:,host:"192.168.100.186:27017", priority : 10},{_id:1,host:"192.168.100.185:27017", priority : 8},{_id:2,host:"192.168.100.184:27017", priority : 6}]}
replSetHO:PRIMARY> rs.initiate(config);

Config就是这次副本集的json内容:

        {
    		"_id": "replSetHO",
    		"members": [
        		{
            			"_id": ,
            			"host": "192.168.100.101:27017",
            			"priority": 10			#这个是配置实例权重,权重最大的实例为默认启动的PRIMARY,PRIMARY发生宕机,剩余的副本集成员会选举目前priority最大的实例作为新的PRIMARY
       		 },
        		{
            			"_id": 1,
            			"host": "192.168.100.102:27017",
            			"priority": 8
        		},
        		{
            			"_id": 2,
            			"host": "192.168.100.103:27017",
            			"priority": 6
        		}
   		     ]
        }


rs.initiate(config); 就是根据配置文件初始化副本集。


如果副本集启动成功,最终通过mongo命令登录到三台服务器,可以看到,192.168.100.101显示的是replSetHO:PRIMARY,其余两台显示的是replSetHO:SECONDARY。

至此,基本的mongodb副本集配置并启动成功了。


3、添加root账号

切换到admin数据库:use admin


创建一个账号为root,密码为123456(生产环境请用复杂密码)的管理员账号:

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



四、配置mongodb实例权限验证

1、修改配置文件

还记得前面的mongod.conf文件中,注释了两行配置吗?

#auth = true							#是否以安全认证方式运行,默认是不认证的非安全方式,先注释掉
#实例认证密码文件,用于主从或者副本集直接验证,同副本集的文件内容需要一致,先注释掉
#keyFile= /home/mongodb/conf/key		

打开这两行配置,并重启mongod实例


2、重启mongod

首先在连接客户端的情况下,切换到admin数据库,执行命令:

replSetHO:SECONDARY> db.shutdownServer();


等到进程结束,再依次重启三台服务器即可。


3、用root账号登录mongod实例

[root@server ~]# mongo -u root -p '123456' admin

-u表示用户名,-p表示密码,admin表示登录的默认数据库


五、副本集相关维护命令

1、状态查看

通过rs.help()命令,可以查看副本集相关操作命令:

        replSetHO:PRIMARY> rs.help()
        rs.status()                               	#查看副本集整体健康状态
        rs.initiate()                              	#使用默认配置初始化副本集
        rs.initiate(cfg)                           	#使用指定配置,初始化副本集;这是我们使用的命令
        rs.conf()                                 	#从local.system.replset获取副本集当前配置信息 
        rs.reconfig(cfg)                           	#指定配置信息重置副本集;指定第二个参数{force:true},来强制更新
        rs.add(hostportstr)                        	#使用默认配置,给副本集添加新成员
        rs.add(membercfgobj)                       	#使用指定配置,给副本集添加新成员
        rs.addArb(hostportstr)                     	#给副本集添加一个仲裁节点,只投票,不会成为数据节点
        rs.stepDown([stepdownSecs, catchUpSecs])   	#给PRIMARY降权,使之在指定时间内成为SECONDARY,会恢复
        rs.syncFrom(hostportstr)                   	#使SECONDARY从指定的服务器同步数据
        rs.freeze(secs)                            	#让自己在指定秒数内不会成为PRIMARY
        rs.remove(hostportstr)                     	#从副本集删除指定节点
        rs.slaveOk()                               	#SECONDARY节点默认是不能查询的,需要执行该命令,使之可以查询
        rs.printReplicationInfo()                  	#查看操作日志以及日志时间
        rs.printSlaveReplicationInfo()             	#查看所有SECONDARY延迟情况
        db.isMaster()                              	#查询当前PRIMARY信息

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3122804/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    40024