mongo集群的搭建,至少需要3个节点,2两个数据节点和1个仲裁节点,所以这里使用三台机器搭建一个包含3节点的replicationSet。
1. 下载解压安装:
mkdir -P /opt/install
cd /opt/install/
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.3.tgz
#从远程服务器copy到本地安装目录
rsync -avzh root@47.92.212.35:/data/install/mongodb-linux-x86_64-rhel70-4.0.3.tgz /data/install/
#解压copy
tar -xvf xxx
mv mongodb-linux-x86_64-rhel70 /usr/local/mongodb
#添加到环境变量
echo 'export PATH=/usr/local/mongodb/bin:$PATH' >> /etc/profile
source /etc/profile
#测试
mongo --version
2. 配置文件修改
#创建数据、配置文件及日志目录
mkdir -p /data/mongodb/data
mkdir -p /data/mongodb/logs
mkdir -p /data/mongodb/conf
vim /data/mongodb/conf/mongod.conf
systemLog:
destination: file
path: "/data/mongodb/logs/mongod.log"
logAppend: true
storage:
dbPath: "/data/mongodb/data"
journal:
enabled: true
processManagement:
fork: true
pidFilePath: "/usr/local/mongodb/mongod.pid"
net:
bindIp: 127.0.0.1,172.26.27.70
port: 20467
#security:
keyFile: "/data/mongodb/conf/access.key"
authorization: enabled
#setParameter:
authenticationMechanisms: SCRAM-SHA-1
replication:
oplogSizeMB: 500
replSetName: rs_mongo_88
#添加防火墙端口
firewall-cmd --zone=public --permanent --add-port=20467/tcp
systemctl restart firewalld.service
3. 启动并创建集群
#分别启动三台实例
ln -s /data/mongodb/conf/mongod.conf /etc/mongod.conf
mongod -f /etc/mongod.conf
#进入任意一台实例,初始化集群
mongo 127.0.0.01:20467
cfg={_id: 'rs_mongo_88', members:[{_id: 1, host: '172.26.27.70:20467'},
{_id: 2, host: '172.26.27.71:20467'},{_id: 3, host: '172.26.27.72:20467'}
]}
##添加单个节点
cfg.members.push({_id: 1, host: '172.26.27.70:20467'})
cfg.members.push({_id: 2, host: '172.26.27.71:20467'})
cfg.members.push({_id: 3, host: '172.26.27.72:20467'}, arbiterOnly: true)
rs.initiate(cfg)
rs.isMaster()
rs.status()
#永久设置slaveOk
vim /root/.mongorc.js
rs.slaveOk();
- 创建用户
use admin
#创建数据库管理员
db.createUser(
{
"user":"root",
"pwd":"88gongxiangds",
"roles":[
{
"role":"readWriteAnyDatabase",
"db":"admin"
},
{
"role":"dbAdminAnyDatabase",
"db":"admin"
},
{
"role":"userAdminAnyDatabase",
"db":"admin"
}
]
}
)
#管理员登录,可进行数据库操作
mongo admin -uroot -p --port 20467
#创建集群管理员
db.createUser(
{
"user":"suroot",
"pwd":"88gongxiangds",
"roles":[
{
"role":"clusterAdmin",
"db":"admin"
},
{
"role":"clusterManager",
"db":"admin"
},
{
"role":"clusterMonitor",
"db":"admin"
}
]
}
)
#集群管理员登录,可进行集群状态查看和操作
mongo admin -usuroot -p --port 20467
#创建特定库的特定用户
user testdb
db.createUser(
{
"user":"test",
"pwd":"testpwd",
"roles":[
{
"role":"readWrite",
"db":"testdb"
},
{
"role":"dbAdmin",
"db":"testdb"
},
{
"role":"userAdmin",
"db":"testdb"
}
]
}
)
#查看创建的用户
use admin
db.system.users.find()
5. 开启认证
mongodb有2个认证环节:客户端与mongod或者mongos之间,以及集群环境中每个mongod之间。
用户添加完成后需要关闭所有节点(先关闭仲裁和从节点, 再关闭主节点, 避免主节点切换):
#shutdown
#登录前关闭
mongod -f conf/mongod.conf --shutdown
#登录后关闭服务:
db.shutdownServer()
#生成keyFile(keyFile的用途是作为所有mongod后台进程允许加入集群的凭证, 所有集群中的节点共用一个keyFile, 避免其他mongod非法加入集群):
#生成keyFile, keyFile的长度必须在6-1024个字符之间
openssl rand -base64 756 > /data/mongodb/conf/access.key
#key只读
chmod 600 /data/mongodb/conf/access.key
#copy到另外两台服务器conf目录
scp access.key root@101.132.100.107:/data/mongodb/conf/
scp access.key root@47.101.61.131:/data/mongodb/conf/
#更换SSH默认端口(22 -> 20462)后的同步方式
rsync -azvh -e 'ssh -p 20462' access.key root@172.26.27.72:/data/mongodb/conf/
#取消三个节点mongod.conf文件中security部分的注释,并重启实例
use admin
db.auth('root','88gongxiangds')
6. 停止mongod,创建mongodb用户替代root
useradd mongo -s /sbin/nologin
passwd mongo
mongopwd
登录权限也可添加后修改:
usermod -s /sbin/nologin mongo
usermod -s /bin/bash mongo
chown -R mongo:mongo /data/mongodb/
chown -R mongo:mongo /usr/local/mongodb/
chown mongo:mongo /etc/mongod.conf
su mongo
mongod -f /data/mongod.conf
##跳板机设置
ssh -CfNg -L 20462:127.0.0.1:20467 mongo@47.92.212.35
ssh -CfNg -R 20467:127.0.0.1:20462 mongo@47.92.212.35
##启动停止服务
关闭:mongod -f conf/mongod.conf --shutdown
启动: mongod -f conf/mongod.conf
##管理员登录
mongo admin -uroot -p88gongxiangds --port 20467
##集群管理员登录
mongo admin -usuroot -p88gongxiangds --port 20467
##集群状态监控
mongostat --uri=mongodb://suroot:88gongxiangds@172.26.27.70:20467/admin 5
mongostat --uri=mongodb://suroot:88gongxiangds@172.26.27.71:20467/admin 5
mongostat --uri=mongodb://suroot:88gongxiangds@172.26.27.72:20467/admin 5
##集群统计
mongotop --host 172.26.27.71 --port 20467 -usuroot -p88gongxiangds --authenticationDatabase=admin 5
##查看每个数据库的锁的使用
mongotop --host 172.26.27.71 --port 20467 -usuroot -p88gongxiangds --authenticationDatabase=admin --locks 5