部署结构
一主一从一个投票节点。
准备三台服务器或者单机上用不同的端口,部署方式一致。
192.168.2.188:2718
192.168.2.188:2719
192.168.2.188:2720(arbiter)
安装mongodb(yum)
更新yum源
vim /etc/yum.repos.d/mongodb-org-4.2.repo
mongodb-org-4.2.repo的内容
[mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
执行安装
yum install -y mongodb-org
创建目录
mkdir -p /usr/local/mongodb cd /usr/local/mongodb mkdir 2718 mkdir 2719 mkdir 2720 cd 2718 mkdir data touch db.log vim db.conf
db.conf配置内容
//端口 port=2718 //绑定IP,多个用逗号隔开,注意绑定localhost bind_ip=192.168.2.188,localhost //日志的目录,注意要具体到文件 logpath=/usr/mongodb/2718/db.log //数据目录 dbpath=/usr/mongodb/2718/data/ //追加的方式写日志 logappend=true //pid文件,可选 pidfilepath=/usr/mongodb/2718/.pid //以守护进程的方式开启mongod的进程 fork=true //oplog的大小,M为单位,复制集同步数据的文件 oplogSize=1024 //开启日志 journal=true //复制集的名称 replSet=NC //开启认证 auth=true //复制集之间的通信认证文件 keyFile=/usr/mongodb/.keyfile //本地登录未配置用户的时候,可直接登录,创建用户后失效 setParameter=enableLocalhostAuthBypass=1
三个目录均创建改文件,注意端口和IP根据需要,对应进行修改。
创建keyFile,注意keyfile会忽略全部的空格,而且要匹配[0-9a-zA-Z+/],最大长度不能超过1000,建议不要使用太长,在复制集直接通信要做对比,以免影响性能。
openssl rand -base64 102
.keyfile注意要设置权限600
要不然会提示
ERROR: child process failed, exited with error number 1
查看日志,可以看到
permissions on /xxx/.keyfile are too open
chmod 600 .keyfile
产生的内容保存到conf对应的目录下。
配置完成后,启动mongod。
mongod -f /usr/mongodb/2718/db.conf mongod -f /usr/mongodb/2719/db.conf mongod -f /usr/mongodb/2720/db.conf
启动后,登录任意一个服务,注意要用localhost或者12.7.0.01登录,否则没办法进行用户创建。
mongo 127.0.0.1:2718/admin
配置复制集信息
关于一些参数的说明
“_id":"NC",复制集的名称,与上面配置mongod的conf对应,注意这个名称要保持一致。
”members":[]复制集组成的成员
“arbiterOnly”:标志该节点未投票节点,默认是false
"votes":1,具有投票权,0不能投票,最多只能有7个节点可以参与投票,
config={ "_id" : "NC", "members" : [ { "_id" : 0, "host" : "192.168.2.188:2718", "votes" : 1 }, { "_id" : 1, "host" : "192.168.2.188:2719", "arbiterOnly" : false, "votes" : 1 }, { "_id" : 2, "host" : "192.168.2.188:2720", "arbiterOnly" : true, "votes" : 1 } ] }
初始化复制集
rs.initiate(config)
执行完成后可以通过命令
rs.status()
可以查看到当前复制集的状态
创建超管进行授权
db.createUser({ "user":"root", "pwd":"root", "roles":[{ "role":"root", "db":"admin" }] })
重新认证
db.auth("root","root")
创建其他的数据库的用户,注意,当前在哪个库创建用户,那么创建的用户,只对当前的库有效
use nc
db.createUser({ "user":"nc", "pwd":"nc", "roles":[{ "role":"readWrite", "db":"nc" }] })