一、Mongo副本集架构
二、系统目录配置
配置及安装项 | 标准数据库服务器*3 |
Mongo虚拟服务器标准配置 | 1、主机CPU:8 内存:16G 硬盘:存储100G系统盘 IP:192.168.0.1 |
存储100G数据盘 | |
2、从机CPU:8 内存:16G 硬盘:存储100G系统盘 IP:192.168.0.2 | |
存储100G数据盘 | |
3、仲裁CPU:2 内存:4G 硬盘:存储100G系统盘 IP:192.168.0.3 | |
Mongo版本 | 4.2.3 |
Mongo端口(默认) | 27017 |
Mongo软件安装路径 | /app/mongodb/ |
Mongo服务名 | 服务名=数据库名 |
Mongo配置文件 | /app/mongodb/conf/mongodb.conf |
Mongo数据路径 | /db/mongodata |
Mongo日志路径 | /log/mongolog |
三、系统目录划分
四、安装依赖
yum install openssl openssl-devel libcurl -y
五、创建用户
groupadd -g 2300 mongo
useradd -g mongo -u 2300 mongo
六、下载安装包,并解压安装包
tar -zxvf mongodb-linux-x86_64-rhel62-4.2.3.GZ
cp -a mongodb-linux-x86_64-rhel62-4.2.3 /app/mongodb
chown mongo:mongo /app/mongodb -R
七、创建存储目录及日志目录
mkdir -p /db/mongodata
mkdir -p /log/mongolog
touch /log/mongolog/mongodb.log
chown mongo:mongo /db/mongodata -R
chown mongo:mongo /log/mongolog -R
chown mongo:mongo /log/mongolog/mongodb.log
八、创建配置文件
#Centos6.X
##创建mongodb配置文件
hostip=`ifconfig -a|grep inet|grep -v 192.168.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
mkdir /app/mongodb/conf
echo "dbpath=/db/mongodata/ #数据库存放位置(之前创建的)
logpath=/log/mongolog/mongodb.log #数据库日志存放位置(之前创建的)
pidfilepath=/app/mongodb/mongodb.pid #PID文件位置
directoryperdb=true #启用数据库的目录
logappend=true #日志追加
#replSet=rs0 #副本集名称
bind_ip="$hostip" #修改bind_ip=绑定公网IP(本机IP)
port=27017 #端口
fork=true #后台运行
oplogSize=10000 #日志大小
#journal=false #开启恢复日志 Centos7取消此项
#maxConns=5000 #最大连接数
#auth=true #初次配置先关了权限验证登陆模式
#keyFile=/app/mongodb/KeyFile.file #密钥文件位置
" > /app/mongodb/conf/mongodb.conf
#IPV6 配置
#bind_ip=xxx.xxx.xxx.xxx #注释绑定ip
bind_ip_all=true #绑定本地所有IP
ipv6=true #启用IPV6
chown mongo:mongo /app/mongodb/conf/mongodb.conf
九:MongoDB设置为系统服务并且设置开机启动
1、Centos6.8环境配置
保存并添加脚本执行权限:chmod +x /etc/rc.d/init.d/mongod;
#!/bin/sh
# chkconfig: 2345 80 90
# description: myservice ....
#
# ### BEGIN INIT INFO
# Short-Description: mongodb
# Description: mongo db server
### END INIT INFO
#注意这里的路径设置为你的mongod的位置
PROGRAM=/app/mongodb/bin/mongod
MONGOPID=`ps -ef | grep 'mongod' | grep -v grep | awk '{print $2}'`
test -x $PROGRAM || exit 0
case "$1" in
start)
echo "Starting MongoDB server"
#注意这里的路径设置为你的mongodb的配置文件的位置
su - mongo -c "$PROGRAM --fork --quiet -f /app/mongodb/conf/mongodb.conf"
echo "Started MongoDB server"
;;
stop)
echo "Stopping MongoDB server"
if [ ! -z "$MONGOPID" ]; then
su - mongo -c "$PROGRAM --shutdown --dbpath=/db/mongodata/"
fi
echo "Stopped MongoDB server"
;;
status)
;;
*)
echo "Usage: mongodb {start|stop|status}"
exit 1
esac
exit 0
服务注册、启动
chkconfig --add mongod
chkconfig mongod on
现在使用service mongod [start|stop|restart|try-restart|reload|force-reload| status]来直接管理MongoDB服务;
开启服务
[root@centos init.d]# service mongod start
about to fork child process, waiting until server is ready for connections.
forked process: 6875
关闭服务
[root@centos init.d]# service mongod stop
2020-04-17T10:42:57.555+0800 I CONTROL [main] log file "/log/mongolog/mongodb.log" exists; moved to "/log/mongolog/mongodb.log.2020-04-17T02-42-57".
killing process with pid: 6875
2、Centos7.6环境配置
保存并添加脚本执行权限:/usr/lib/systemd/system/mongod.service
[root@centos ~]cat > /usr/lib/systemd/system/mongod.service << EOF
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
[Service]
Type=forking
User=mongo
Group=mongo
ExecStart=/app/mongodb/bin/mongod -f /app/mongodb/conf/mongodb.conf
ExecStop =/app/mongodb/bin/mongod --shutdown --dbpath=/db/mongodata
[Install]
WantedBy=multi-user.target
EOF
服务载入、开启、启动
systemctl daemon-reload
systemctl enable mongod
systemctl start mongod
十:创建数据库用户(三台主机都执行)
1.启动mongo:
su - mongo -c "/app/mongodb/bin/mongod -f /app/mongodb/conf/mongodb.conf"
2.进入数据库管理命令界面:
mongo
3.选择数据库: (注意一定要先选择数据库在创建角色)
use admin
4.创建数据库管理角色
给角色设置为超级管理员
db.createUser({user:'root',pwd:’123456’,roles:[{'role':'root','db':'admin'}]})
运行结果
[root@centos mongodb]# su - mongo
[mongo@centos ~]$ /app/mongodb/bin/mongod -f /app/mongodb/conf/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 4037
child process started successfully, parent exiting
[mongo@centos ~]$ ps -ef|grep mongo
root 4006 2464 0 15:27 pts/0 00:00:00 su - mongo
mongo 4007 4006 0 15:27 pts/0 00:00:00 -bash
mongo 4037 1 12 15:27 ? 00:00:00 /app/mongodb/bin/mongod -f /app/mongodb/conf/mongodb.conf
mongo 4067 4007 0 15:27 pts/0 00:00:00 ps -ef
mongo 4068 4007 0 15:27 pts/0 00:00:00 grep mongo
[mongo@centos ~]$ mongo
MongoDB shell version v4.2.3
connecting to: mongodb://192.168.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("1c3156e7-a31b-4a23-8ee7-96755e5ffc2c") }
MongoDB server version: 4.2.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2020-07-06T15:27:20.316+0800 I STORAGE [initandlisten]
2020-07-06T15:27:20.316+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2020-07-06T15:27:20.316+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2020-07-06T15:27:21.035+0800 I CONTROL [initandlisten]
2020-07-06T15:27:21.035+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2020-07-06T15:27:21.035+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-07-06T15:27:21.035+0800 I CONTROL [initandlisten]
2020-07-06T15:27:21.035+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2020-07-06T15:27:21.035+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-07-06T15:27:21.035+0800 I CONTROL [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> use admin
switched to db admin
>
> db.createUser({user:'root',pwd:’123456’,roles:[{'role':'root','db':'admin'}]})db.createUser({user:'root',pwd:’123456’,roles:[{'role':'root','db':'admin'}]})
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
>
补充:MongoDB基本的角色
1.数据库用户角色:read、readWrite;
2.数据库管理角色:dbAdmin、dbOwner、userAdmin;
3.集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4.备份恢复角色:backup、restore;
5.所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6.超级用户角色:root
退出服务,谨慎使用kill直接去杀掉mongodb进程,可以使用db.shutdownServer()关闭.
使用权限方式启动MongoDB,在配置文件中添加:auth=true , 然后启动:
mongod -f /app/mongodb/conf/mongodb.conf
进入mongo shell,使用admin数据库use admin并进行验证db.auth('root','123456'),验证成功返回1失败返回0;如果不验证或验证失败,是做不了任何操作的
十一、添加环境变量,方便shell操作
1、在/etc/profile文件中,添加 export PATH=/app/mongodb/bin:$PATH;
2、执行source /etc/profile,使系统环境变量立即生效
十二、副本集
三个节点都完成mongo安装后,在主节点上执行
[root@centos ~]# mongo 192.168.0.1:27017
> use adminuse admin
switched to db admin
>
cfg=({_id:"rsXXX","members":[
{_id : 1, host : "192.168.0.1:27017", priority: 10},
{_id : 2, host : "192.168.0.2:27017", priority: 5},
{_id : 3, host : "192.168.0.3:27017", priority: 0, "arbiterOnly": true},]});
rs.initiate(cfg)
exit
十三:生成密钥文件
#在一台机上执行,然后复制到另外两台主机上
openssl rand -base64 756 > /app/mongodb/KeyFile.file
chmod 400 /app/mongodb/KeyFile.file
chown mongo:mongo /app/mongodb/KeyFile.file
复制KeyFile.file到另外两台主机的相同位置(Key文件权限一样,400)
scp /app/mongodb/KeyFile.file 192.168.0.2:/app/mongodb/KeyFile.file
scp /app/mongodb/KeyFile.file 192.168.0.3:/app/mongodb/KeyFile.file
并在mongodb.conf文件中插入
keyFile=/db/mongodata/KeyFile.file
auth=true
完成后重启mongod服务
附1、MongoDB主从仲裁(Replica-Set)安装配置
版本需求
mongodb-linux-x86_64-rhel62-4.2.3.GZ
主节点配置
1. tar -zxvf ./mongodb-linux-x86_64-rhel62-4.2.3.GZ -C /app/software/
2. mv /app/mongodb-linux-x86_64-rhel62-4.2.3 /app/software/mongo
3. touch /app/mongodb/master.conf && vim /app/mongodb/conf/mongodb.conf
dbpath=/data/mongodb/master
logpath=/log/mongolog/mongodb.log
pidfilepath= /app/mongodb/mongodb.pid
directoryperdb=true
logappend=true
replSet=hstr #集群名
bind_ip=192.168.0.1 #本机IP
port=27017
oplogSize=10000
fork=true
#IPV6配置
#bind_ip=xxx.xxx.xxx.xxx #注释绑定ip
bind_ip_all=true #绑定本地所有IP
ipv6=true #启用IPV6
4. 注意替换IP、端口、路径
5. 启动数据库
/app/mongodb/bin/mongod -f /app/mongodb/conf/mongodb.conf
从节点配置
1. tar -zxvf ./ mongodb-linux-x86_64-rhel62-4.2.3.GZ -C /app/software/
2. mv /app/mongodb-linux-x86_64-rhel62-4.2.3 /app/software/mongo
3. touch /app/mongodb/slave.conf && vim /app/mongodb/conf/mongodb.conf
dbpath=/data/mongodb/slave
logpath=/log/mongolog/mongodb.log
pidfilepath= /app/mongodb/mongodb.pid
directoryperdb=true
logappend=true
replSet=hstr #集群名
bind_ip=192.168.0.2 #绑定IP
port=27017
oplogSize=10000
fork=true
4. 注意替换IP、端口、路径
5.启动数据库
/app/mongodb/bin/mongod -f /app/mongodb/conf/mongodb.conf
仲裁节点配置
1. tar -zxvf ./ mongodb-linux-x86_64-rhel62-4.2.3.GZ -C /app/software/
2. mv /app/mongodb-linux-x86_64-rhel62-4.2.3 /app/software/mongo
3. touch /app/mongodb/arbiter.conf && vim /app/mongodb/conf/mongodb.conf
dbpath=/data/mongodb/arbiter
logpath=/log/mongolog/mongodb.log
pidfilepath= /app/mongodb/mongodb.pid
directoryperdb=true
logappend=true
replSet=hstr #集群名
bind_ip=192.168.0.3 #绑定IP
port=27017
oplogSize=10000
fork=true
4. 注意替换IP、端口、路径
5. 启动数据库
/app/mongodb/bin/mongod -f /app/mongodb/conf/mongodb.conf
使用主节点创建集群
1.登录主库
/app/software/mongo/bin/mongo 192.168.0.1:27017
2.进入admin库
use admin
3. 配置集群
cfg=( {_id : "hstr",members : [
{_id : 1, host : "192.168.0.1:27017", priority: 10},
{_id : 2, host : "192.168.0.2:27017", priority: 5},
{_id : 3, host : "192.168.0.3:27017", priority: 0, "arbiterOnly": true}
]
} );
4. 启用集群
rs.initiate(cfg)
5. 查看集群状态
rs.status()
附2、备份与恢复
mongodump -h IP --port 端口 -u 用户 -p 密码 -d 数据库名 -o 备份路径
mongodump -h 192.168.0.1 --port 27017 -u root -p 123456 -d test -o /bak/
mongorestore -h IP --port 端口 -u 用户 -p 密码 -d 数据库名 --drop 备份路径
mongorestore -h 192.168.0.1 --port 27017 -u root -p 123456 -d test --drop /bak/test
mongorestore -h 192.168.0.1 --port 27017 --drop /bak/test 全库恢复
参考:MongoDB 备份(mongodump)与恢复(mongorestore) | 菜鸟教程
附3、IPV6登录
查看是否支持IPv6
netstat -nlp|grep 27017
登录mongo
./mongo --ipv6 [ipv6地址]:27017