参考
https://blog.csdn.net/fanxb92/article/details/106918371/
https://blog.csdn.net/pengjunlee/article/details/84101732
mongodb图形工具
https://www.nosqlbooster.com/
192.168.66.28
192.168.66.81
192.168.66.178
关掉大内存页
vim /etc/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
下载
https://www.mongodb.com/download-center/community/releases/archive
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.3.tgz
创建数据和日志存储目录
mkdir -pv /data/mongodb/{data,logs}
安装
tar xf mongodb-linux-x86_64-rhel70-3.6.3.tgz -C /usr/local/
cd /usr/local
mv mongodb-linux-x86_64-rhel70-3.6.3 mongodb
配置环境变量
vim /etc/profile
export MONGODB_HOME=/usr/local/mongodb/
export PATH=$PATH:$MONGODB_HOME/bin
创建配置文件
vim /usr/local/mongodb/mongodb.conf
dbpath = /data/mongodb/data/
logpath = /data/mongodb/logs/mongodb.log
port = 27017
fork =true
directoryperdb=true
bind_ip=192.168.66.178
logappend = true
replSet = mongorepl
pidfilepath=/usr/local/mongodb/mongodb.pid
systemd管理
vim /usr/lib/systemd/system/mongodb.service
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /usr/lib/systemd/system/mongodb.service
systemctl daemon-reload
启动服务
systemctl start mongodb
副本集
任选一个节点登录,配置副本集
mongo --host 192.168.66.28 --port 27017 admin
config={_id:"mongorepl",members:[{_id:0,host:"192.168.66.28:27017"},{_id:1,host:"192.168.66.81:27017"},{_id:2,host:"192.168.66.178:27017"}]}
//with arbiter
config={_id:"mongorepl",members:[{_id:0,host:"192.168.66.28:27017"},{_id:1,host:"192.168.66.81:27017"},{_id:2,host:"192.168.66.178:27017", arbiterOnly:true}]}
rs.initiate(config)
查看集群状态
rs.status()
SECONDARY是不允许读写的,执行以下语句即可
:SECONDARY> rs.slaveOk();
:SECONDARY> rs.secondaryOk(); #mongodb4.x版本
开启安全认证
创建超级管理员,管理所有数据库
1、先use admin;
2,roles中的db必须是admin;
3、创建完用户后必须在登录时就指定验证数据库为admin
4、配置完成用户后要在配置文件中打开验证功能
role:root, readWrite,read
创建用户
登录 PRIMARY节点创建用户
use admin
db.createUser(
{
user: "root",
pwd: "root123",
roles: [ { role: "root", db: "admin" } ]
}
)
验证用户
db.auth('root','root123')
创建keyFile文件
先停掉所有SECONDARY节点的MongoDB服务,然后再停掉PRIMARY节点的MongoDB服务,并在PRIMARY节点所在服务器上创建keyFile文件
openssl rand -base64 666 > /usr/local/mongodb/keyfile
chmod 600 /usr/local/mongodb/keyfile
将生成的keyFile文件拷贝到其他节点服务器上,并修改文件的操作权限为 600
更新启动配置文件
修改各节点的 mongodb.conf 文件,增加如下内容
auth=true
oplogSize=100
keyFile=/usr/local/mongodb/keyfile
启动副本集
先启动PRIMARY节点
再启动SECONDARY节点
用户认证登录
mongo --host 192.168.66.28 --port 27017 -uroot -proot123 admin
查看用户
db.system.users.find().pretty()
附:副本集操作
查看配置
rs.conf()
向副本集中添加成员
rs.add("172.16.250.240:27017")
从副本集中删除成员
rs.remove("172.16.250.240:27017")
向副本集中添加仲裁
rs.addArb("172.16.250.240:27017")
向副本集中添加备份节点
rs.add({"_id":3,"host":"172.16.250.240:27017","priority":0,"hidden":true})
reconfig
replset:SECONDARY> cfg = rs.conf()
replset:SECONDARY> conf = {_id:cfg._id,version: cfg.version,members: [ cfg.members[0] ]}
replset:SECONDARY> rs.reconfig(conf,{force:true})
附
mongodb副本集切换
config=rs.conf()
config.members[0].priority=2
rs.reconfig(config)
#优先级调整,主从会切换
mongodb同步状态查看
db.printSlaveReplicationInfo()
db.printSecondaryReplicationInfo()
应用连接mongodb副本集
mongodb://username:password@192.168.59.135:27017,192.168.59.136:27017,192.168.59.137:27017/库名?replicaSet=mongorepl&readPreference=secondaryPreferred&connectTimeoutMS=300000&authSource=admin