mongodb副本集

        Mongodb replica set安装加认证,这里使用的是keyFile进行认证,之前看过很多文章,坑一大堆,这里是看了两天的官方文档进行的安装,并用户生产,配置文件参数贴一部分,三个带有数据集的节点组成的复制集拥有,架构图如下,参考官方

img
一个主节点,两个从节点,这两个从节点都可以在选举中升级为主节点

环境

三台服务器

1
2
3
primary: 192.168.32.7
secaodray: 192.168.32.11
secondary: 192.168.32.14

1、安装mongodb

1.1、每个节点都需要操作

1
2
3
4
5
6
7
8
9
# sudo vim /etc/yum.repos.d/mongodb-enterprise.repo
[mongodb-enterprise]
name=MongoDB Enterprise Repository
baseurl=https://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/3.4/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

# sudo yum install -y mongodb-enterprise

注意:如果采用源码包方式安装需要安装一下插件

1
# sudo yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-gssapi krb5-libs lm_sensors-libs net-snmp-agent-libs net-snmp openssl rpm-libs tcp_wrappers-libs libcurl

2、修改mongodb的配置文件(每个节点均操作)

自定义mongodb的目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# mkdir /opt/mongodb/{data,conf,logs} -p
# sudo vim /etc/mongod.conf
systemLog:
destination: file
logAppend: true
path: /opt/mongodb/logs/mongod.log
storage:
dbPath: /opt/mongodb/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /opt/mongodb/logs/mongod.pid
net:
port: 27017
bindIp: 0.0.0.0

3、生成密钥文件(在mong01上操作)

1
2
3
4
# openssl rand -base64 756 > /opt/mongodb/conf/mongo-keyfile
# sudo chmod 400 /opt/mongodb/conf/mongo-keyfile
# scp –r mongo-keyfile user@192.168.32.11:/opt/mongodb/conf
# scp –r mongo-keyfile user@192.168.32.14:/opt/mongodb/conf

4、修改mongodb的配置

1
2
3
4
security:
keyFile: /opt/mongodb/conf/mongo-keyfile
replication:
replSetName: xxlaila01(可变化,自定义)

分别在三台服务器上启动mongodb

1
# mongod --config /etc/mongod.conf

5、建立集群

在你需要认为是主节点的服务器进行mongodb的登陆,和账户权限的建立,这里我选择的192.168.32.7

1
mongo --shell --host 127.0.0.1

登陆进去以后可以进行一个简单的命令进行查看

img

6、把服务器加入副本集

1
2
MongoDB Enterprise > config = { _id:"xxlaila01",members:[ {_id:0,host:"192.168.32.7:27017"},
... {_id:1,host:"192.168.32.11:27017"} ,{_id:2,host:"192.168.32.14:27017"}] }

config = { _id:”xxlaila01”,members:[ {_id:0,host:”192.168.32.7:27017”},{_id:1,host:”192.168.32.11:27017”} ,{_id:2,host:”192.168.32.14:27017”}] },增加内容

6.1 看当前副本集的状态

利用rs.status()命令可以查看当前副本集的状态

1
> rs.status()

这里提示配置还没有加载到mongodb副本里面

6.2、加载配置到副本集

1
> rs.initiate(config)

再次查看副本的状态就可以看到mongodb的副本集已建立,如果此时主节点未被选举出来,稍微等一会就成功

7、创建mongodb副本集认证

下面两行我们可以看到第一次主节点没有选举成功,随即我们在回车PRIMARY节点选举成功了,下面我们创建一个管理员账户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MongoDB Enterprise xxlaila01:SECONDARY> admin = db.getSiblingDB("admin")
MongoDB Enterprise xxlaila01:PRIMARY>
admin.createUser(

{

user: "root",

pwd: "123456",

roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]

}

)
db.getSiblingDB("admin").auth("root", "123456" )

7.1、创建集群账户

创建一个集群管理账户,集群账户具有管理整个副本集的

1
2
3
4
5
6
7
8
9
10
$ mongo -u "root" -p "123456" --authenticationDatabase "admin"

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

}
)

7.2 创建一个程序连接的账户

1
2
3
4
5
6
7
db.getSiblingDB("admin").createUser(
{
"user" : "systemprod",
"pwd" : "123456",
roles: [ { "role" : "root", "db" : "admin" } ]
}
)

至此mongodb的副本集创建完成。测试没有问题,登陆其中一台SECONDARY服务器进行测试,这里测试192.168.32.11服务器

1
2
3
4
5
6
7
$ mongo

> rs.status() # 这里提示没有权限(登录进来以后如果不是主几点,mognodb就会默认显示未secondary)

> use admin #

> db.getSiblingDB("admin").auth("manger", "123456")

完成后我们在执行rs.status()就可以看到副本集的信息

7.3 测试程序连接账户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MongoDB Enterprise xxlaila01:SECONDARY> db.getSiblingDB("admin").auth("systemprod", "123456" )
> show dbs; #会提示 “not master and slaveok=false”
2020-04-29T17:50:37.618+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:814:19
shellHelper@src/mongo/shell/utils.js:704:15
@(shellhelp2):1:1

# 执行
> db.getMongo().setSlaveOk()
> show dbs; #在次执行会显示出结果

副本集没有读的权限,需要执行db.getMongo().setSlaveOk()

坚持原创技术分享,您的支持将鼓励我继续创作!
0%