一、安装
1.制作yum文件
# vim /etc/yum.repos.d/mongodb.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
2.yum 安装
# yum makecache && yum install -y mongodb-org
3.启动
# systemctl restart mongod
# systemctl enable mongod
4.连接,使用mongo即可连接到数据库,但是会有警告,提示我们禁用大内存页面,解决方法如下
(1)方法一:临时解决,机器重启失效
# echo never >> /sys/kernel/mm/transparent_hugepage/enabled
# echo never >> /sys/kernel/mm/transparent_hugepage/defrag
step1 编辑 /etc/default/grub,在GRUB_CMDLINE_LINUX加入选项 transparent_hugepage=never
# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_disTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_disABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"
GRUB_disABLE_RECOVERY="true"
step2 重新生成grub配置文件
# grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
step3 重启你的系统
# reboot
> use admin #切换到admin库
switched to db admin
> db.createuser( { user: "admin", customData: {describtion: "superuser"}, pwd: "admin123", roles:[ {role: "root", db: "admin"}]})
> db.system.users.find() #列出所有用户,需要切换到admin库下
> show users; #查看当前库下所有用户
> db.createuser({user:"test", pwd: "test123", roles:[{role: 'read', db: "admin"}]})
> db.dropUser('test') #删除用户
2.添加完用户之后需要重启mongo,在重启前在启动文件/usr/lib/systemd/system/mongod.service 中OPTIONS= 后面添加 --auth
# cat /usr/lib/systemd/system/mongod.service
Environment="OPTIONS=-f /etc/mongod.conf --auth"
# systemctl daemon-reload
# systemctl restart mongod
# mongo --host 127.0.0.1 --port 27017 -u admin -p 'admin123' --authenticationDatabase "admin" #连接数据库
三、创建集合
> use db3 #创建数据库
> db.createCollection("mycol", {capped: true, autoIndexId:true, size:6142800, max:10000}) #创建集合
# 解释:
# capped true/false(可选)如果为true则启用封顶集合。封顶集合时固定集合的大小,当他达到其最大大小时会自动覆盖最早的条目,如果您指定为true需要指定尺寸参数
# autoIndexId true/false(可选)如果为true,自动创建索引_id字段的默认值为false
# size:指定最大大小字节封顶集合。如果封顶为true,还需要指定这个字段。单位为B
# max:指定封顶集合允许在文件的最大数量
> show collections; #查看集合
> db.Account.insert({AccountID:2, username:"zhangsan", password:"zhangsan123"}) #如果集合不存在,则会创建集合并插入数据,此时Account 集合不存在则会创建
> db.Account.insert({AccountID:1, username:"xiaoming", password:"xiaoming123"})
> db.Account.update({AccountID:1}, {"$set":{"Age":20}}) #当AccountID=1时,再添加一个字段Age并且Age=20
> db.Account.find() #查看数据
{ "_id" : ObjectId("5cac9febf40482b03949a35b"), "AccountID" : 2, "username" : "zhangsan", "password" : "zhangsan123" }
{ "_id" : ObjectId("5caca05df40482b03949a35c"), "AccountID" : 1, "username" : "xiaoming", "password" : "xiaoming123", "Age" : 20 }
> db.Account.find({AccountID:2}) #根据条件查找
{ "_id" : ObjectId("5cac9febf40482b03949a35b"), "AccountID" : 2, "username" : "zhangsan", "password" : "zhangsan123" }
> db.Account.find({AccountID:1}) #根据条件删除
> db.Account.find()
{ "_id" : ObjectId("5cac9febf40482b03949a35b"), "AccountID" : 2, "username" : "zhangsan", "password" : "zhangsan123" }
> db.Account.drop() #删除所有文档,即删除集合
true
> show tables; #查看集合
mycol
> db.mycol.insert({'id': 1, 'name': 'z3', pwd:'z3123'})
WriteResult({ "nInserted" : 1 })
> db.mycol.find()
{ "_id" : ObjectId("5caca2f8f62fd0e0effa3a27"), "id" : 1, "name" : "z3", "pwd" : "z3123" }
> db.printCollectionStats() #查看集合状态
三、副本集
1.ip分配: 192.168.19.101 192.168.19.102 1982.168.19.103
2.修改配置文件/etc/mongod,监听本机IP 以及配置replication
# cat /etc/mongod.conf |grep -A 2 'net:'
net:
port: 27017
bindIp: 127.0.0.1,192.168.19.101 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
# cat /etc/mongod.conf |grep -A 2 'repli'
replication:
oplogSizeMB: 20 #oplog 文件大小,可以不用配置
replSetName: sxg #副本集名称
3.在其中一台机器进行配置,则这台机器会会变成主
> use admin
> config={_id:"sxg", members:[{_id:101, host:"192.168.19.101:27017"},{_id:102, host:"192.168.19.102:27017"},{_id:103, host:"192.168.19.103:27017"}]}
> rs.initiate(config) #配置后等一会会发现当前机器的状态变为PRIMARY
sxg:PRIMARY> rs.status()
四、测试副本集
1.在从节点上是没有查看等操作的, 若想操作执行命令 rs.slaveOk()即可
sxg:SECONDARY> show dbs
2019-04-10T21:49:50.226+0800 E QUERY [js] Error: listDatabases Failed:{
"operationTime" : Timestamp(1554904188, 1),
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk",
"$clusterTime" : {
"clusterTime" : Timestamp(1554904188, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:139:1
shellHelper.show@src/mongo/shell/utils.js:882:13
shellHelper@src/mongo/shell/utils.js:766:15
@(shellhelp2):1:1
sxg:SECONDARY> rs.slaveOk()
sxg:SECONDARY> show dbs
admin 0.000GB
config 0.000GB
db1 0.000GB
db2 0.000GB
db3 0.000GB
local 0.000GB
2.修改权重:若主节点(192.168.19.101)宕机了,则会从19.102 或19.103中选择一个作为主节点,当再次启动19.101时,主从关系并不会改变
sxg:PRIMARY> rs.config() #查看权重 发现个节点的priority 均为1
#修改权重,将主节点重启,然后在新的主节点上操作
sxg:PRIMARY> cfg=rs.config()
sxg:PRIMARY> cfg.members[0].priority=3
sxg:PRIMARY> cfg.members[1].priority=2
sxg:PRIMARY> cfg.members[2].priority=1
#等一会后,发现主节点会变到权重最大的那个节点