关于centos7下搭建mongodb副本集群并带有keyfile认证的步骤

第一步:下载mongodb安装包

地址:https://www.mongodb.com/download-center/community

根据需求选择社区版和企业版

根据自己的操作系统选择对应的版本

rsync mongodb文件 mongodb keyfile_centos


第二步:使用secureFX或winSCP文件传输工具将安装包推送至centos7环境下

第三步:安装mongodb
1、创建三个目录:mkdir mongodb_1(mongodb_2/mongodb_3),
将压缩包分别复制三份到三个目录下

cp mongodb-linux-x86_64-4.0.8.tgz /home/mongodb_1
 cp mongodb-linux-x86_64-4.0.8.tgz /home/mongodb_2
 cp mongodb-linux-x86_64-4.0.8.tgz/home/mongodb_3


(此处安装是在单机环境下,多机集群也可参考,不同的是IP地址不一样)

2、分别进入三个目录进行解压
解压命令:tar -zxvf mongodb-linux-x86_64-4.0.8.tgz

3、配置环境变量,创建数据文件目录,日志目录以及配置启动文件
修改环境配置文件:vi /etc/profile
在末尾加上:

export PATH=/home/mongodb_1/mongodb-linux-x86_64-4.0.8/bin:$PATH\
export PATH=/home/mongodb_2/mongodb-linux-x86_64-4.0.8/bin:$PATH\
export PATH=/home/mongodb_3/mongodb-linux-x86_64-4.0.8/bin:$PATH\

输入指令:source /etc/profile 重载以下环境配置文件使添加的内容生效

进入目录:cd /home/mongodb_1/mongodb-linux-x86_64-4.0.8

创建数据文件目录:mkdir data

创建日志目录:mkdir logs

进入bin目录:cd bin

创建并编辑启动配置文件内容:vi mongodb.config

在配置文件中输入以下内容:

systemLog:
 destination: file
 quiet: false
 traceAllExceptions: true
 logAppend: true
 #日志存放目录
 path: “/home/mongodb_1/mongodb-linux-x86_64-4.0.8/logs/mongodb.log”
 storage:
 #数据文件目录
 dbPath: “/home/mongodb_1/mongodb-linux-x86_64-4.0.8/data”
 journal:
 enabled: true
 net:
 #启动端口(如果是在单机环境下请分别配置三个端口号)
 port: 27017
 bindIpAll: true
 #最大连接数
 maxIncomingConnections: 65536
 replication:
 #副本集名称
 replSetName: “replset”
 enableMajorityReadConcern: true
 processManagement:
 fork: true
 #权限认证(在没有创建账号并生成keyfeil文件之前请注释此段)
 #security:
 #keyFile: “/home/keyfile/keyfile”
 #clusterAuthMode: “keyFile”
 #authorization: “enabled”

mongod_2与mongodb_3目录下的步骤与上述一致

4、配置副本集,创建账号并开启权限认证
分别进入三个目录下的bin目录输入指令:./mongod -config mongodb.config
来启动三个节点

进入主节点控制台:mongodb 127.0.0.1:27017
输入指令生成副本集配置:
 config = {_id: ‘replSet’, members: [{_id:0, host:‘127.0.0.1:27017’},{_id:1, host:‘127.0.0.1:27018’},{_id: 2, host:‘127.0.0.1:27019’}]}(如果是此处由于是单机环境下,所以IP地址我用了本地的IP地址,如果是多机请使用对应的IP地址及端口)按下回车键会出现以下信息:
 {
 “_id” : “replset”,
 “members” : [
 {
 “_id” : 0,
 “host” : “192.168.73.29:27017”
 },
 {
 “_id” : 1,
 “host” : “192.168.73.29:27018”
 },
 {
 “_id” : 2,
 “host” : “192.168.73.29:27019”
 }
 ]
 }输入指令加载副本集配置:
 rs.initiate(config)按下回车键会出现以下信息:
 {
 “ok” : 1,
 “operationTime” : Timestamp(1520260635, 1),
 “$clusterTime” : {
 “clusterTime” : Timestamp(1520260635, 1),
 “signature” : {
 “hash” : BinData(0,“AAAAAAAAAAAAAAAAAAAAAAAAAAA=”),
 “keyId” : NumberLong(0)
 }
 }
 }

如果报错,请查看启动配置文件的副本集名称与命令行创建副本集配置时的副本集名称是否一致

输入指令:rs.config() 可查看副本集配置信息
输入指令:rs.status() 可查看副本集状态

创建管理员账号:
进入mongodb主节点控制台输入指令:use admin
再次输入指令:db.createUser({user:“root”,pwd:“root”,roles:[{role:"__system", db:“admin”}]})
权限说明:
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:__system

注:给相应的库创建账号前必须先输入指令:use 库名

完成后按Ctrl+c退出控制台

创建keyfile文件目录:mkdir keyfile
创建keyfile文件:openssl rand -base64 90 -out /home/keyfile/./keyfile
输入指令:chmod 600 /home/keyfile/keyfile
如果不修改文件的权限的话会报错keyfile文件权限过于开放

完成后分别进入bin目录关闭三个数据库节点:
./mongod -config mongodb.config -shutdown

修改启动配置文件,放开配置文件中权限认证的注释(删除前面的#号)

然后再次分别启动三个数据库节点

输入指令:mongo 127.0.0.1:27017/admin -uroot
会弹出密码输入,输入创建账号时的密码root后,按回车登陆。
如果登陆成功说明生效了,如果认证失败,说明账号创建没成功,需要关闭三个节点然后注释掉配置文件中的权限认证后启动三个节点,进入mongodb命令行控制台重新创建账号。

第四步:修改副本集节点的优先级
由于我们想固定某个节点在不宕机的情况下保持其一直为主节点,那么需要修改它的优先级,需要输入以下指令

进入主节点控制台
config=rs.conf()
config.members[1].priority = 3(members[1]表示下标为1的节点,注意不是_id)
rs.reconfig(config)

完成后输入指令:rs.config() 查看副本集的配置信息中的priority的信息,是否对应修改的节点的优先级变为了3

测试:关掉优先级最高的节点后再次启动,查看其再重启后是否又成为了主节点

第五步:节点的移除和添加
进入主节点控制台
移除节点指令:rs.remove(“127.0.0.1:27019”)
添加普通节点指令:rs.add(“127.0.0.1:27019”)
添加仲裁节点指令:rs.addArb(“127.0.0.1:27019”)