系统:CentOS 7.4
MongoDB 3.4
增加yum 源
vi /etc/yum.repos.d/mongodb-org-3.4.repo
复制以下内容:
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
安装:
yum install -y mongodb-org
启动方式
CentOS 7以上的使用:
#增加到系统启动:
systemctl daemon-reload
systemctl enable mongod
#启动控制命令
systemctl start mongod
systemctl restart mongod
systemctl stop mongod
CentOS 6版本:
sudo -i service mongod start
sudo -i service mongod stop
#增加到系统启动
sudo chkconfig --add mongod
mongodb的用户登录认证和基本使用
连接:
# mongo
>use admin
#增加管理员
db.createUser(
{
user: "myuser",
pwd: "yourpassword",
roles: [ { role: "root", db: "admin" } ]
}
)
#增加数据使用者
db.createUser(
{
user: "nurmaluser",
pwd: "youpassword",
roles: [ { role: "readWriteAnyDatabase", db: "admin" } ]
}
)
#测试是否成功
use admin
db.auth("username", "yourpassword")
#成功返回1
关于角色:
PS:roles角色官网中分为built-in roles and user-defined roles
Built-In Roles(内置角色):
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)- 内部角色:__system
启用连接验证:
vi /etc/mongod.conf
修改以下内容:
security:
authorization: enabled
重启数据库。
修改数据库目录:
注:修改目录后,原来的用户验证需要重新设置,先关掉验证,再进去添加用户
同样是/etc/mongod.conf
文件
storage:
dbPath: /deploy/mydata
对于这个目录,需要修改owner为 mongod:
chown mongod:mongod /deploy/mydata
连接数据库
mongo mongodb://username:password@127.0.0.1:27017/main?authSource=admin
修改alias方便连接:
vim ~/.bashrs
alias db='mongo mongodb://username:password@127.0.0.1:27017/main?authSource=admin'
连接出现警告:
** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
** We suggest setting it to 'never'
** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
** We suggest setting it to ‘never'
处理方法,先停掉mongo,然后:
sudo echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
sudo echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
其它方式启动MongoDB
例如需要使用集群,在同一台机增加多个节点,则不能用root启动。
增加用户并添加到mongod组:
useradd -G mongod muser
然后切换用户:
su -l muser
启动方式:
mongod --config <path-to-config>
数据集:
如果在单机,可以复制多个/etc/mongod.conf
出来,修改其中的关键配置:
/etc/mongod.conf
net:
port: 27017 #不同的.conf用不同的端口
security:
authorization: enabled # 该字段非主集不用开启
#数据集验证文件,把key复制给每个集,但一定要与集的启动用户的权限对应
keyFile: "/deploy/mongo/mongo-key"
replication:
replSetName: "rs0" #所有集用同一个名字
配置集合:
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "127.0.0.1:27017" },
{ _id: 1, host: "127.0.0.1:27027" },
{ _id: 2, host: "127.0.0.1:27037" }
]
})
查看集合配置:
rs.conf()
确保集合正常:
rs.status()
字段解释:
- self 这个信息出现在执行rs.status()函数的成员信息中
- stateStr用户描述服务器状态的字符串。有SECONDARY,PRIMARY,RECOVERING等
- uptime 从成员可到达一直到现在经历的时间,单位是秒。
- optimeDate 每个成员oplog最后一次操作发生的时间,这个时间是心跳报上来的,因此可能会存在延迟
- lastHeartbeat 当前服务器最后一次收到其他成员心跳的时间,如果网络故障等可能这个时间会大于2秒
- pinMs 心跳从当前服务器达到某个成员所花费的平均时间
- errmsg 成员在心跳请求中返回的状态信息,通过是一些状态信息,不全是错误信息。
state和stateStr是重复的,都表示成员状态,只是state是内部的叫法。
health 为1表示server正常,0表示server宕.- state 为1表明Primary,2表明secondary,3表示Recovering,7表示Arbiter,8表示Down.
- optime与optimeDate表达的信息也是一样的,只是表示的方式不同,一个是用新纪元开始的毫秒数表示的,一个是用一种更容易阅读的方式表示。
- syncingTo表示当前服务器从哪个节点在做同步。
注:由于rs.status()是从执行命令成员本身的角度得出的,由于网路等故障,这份报告可能不准确或者有些过时。
数据集文献:
https://www.linode.com/docs/databases/mongodb/create-a-mongodb-replica-set/
https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
网友评论