NoSQL: MongoDB

发布时间 2023-03-26 12:57:09作者: ascertain

 

#---------------------------------------------------------------------
# Authentication  # https://www.mongodb.com/docs/manual/core/authentication/
#---------------------------------------------------------------------
mongod --auth --port 27017 --dbpath /var/lib/mongodb
mongosh --port 27017
use admin
db.createUser({ user: "root", pwd: "root", roles: ["root"]})
db.createUser(
  {
    user: "myadmin",
    pwd: "myadmin",
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" },
      { role: "root", db: "admin" }
    ]
  }
)
db.createUser(
  {
    user: "myTester",
    pwd:  passwordPrompt(),   // or cleartext password
    roles: [ 
        { role: "readWrite", db: "test" },
        { role: "read", db: "reporting" } 
    ]
  }
)
# grant role 
db.grantRolesToUser(
    "myadmin",
    [
      { role: "clusterAdmin", db: "admin" }
    ]
)
# 查看用户roles & privileges
db.getUser('myadmin')
db.getRole( "clusterAdmin", { showPrivileges: true } )

# change password
db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")

The userAdminAnyDatabase role allows this user to:
create users
grant or revoke roles from users
create or modify customs roles

# 关闭mongodb
db.adminCommand( { shutdown: 1 } )
# Authentication After Connection
use admin
db.auth("root", "root")
# List all users
use admin
db.system.users.find()
To list all users of a sharded cluster that were created through a mongos, connect to a mongos and run the preceding command. MongoDB stores users that are created through a mongos in the admin database of the config servers.
To list all shard local users, connect to the respective shard directly and run the preceding command. MongoDB stores shard local users in the admin database of the shard itself. These shard local users are independent from the users added to the sharded cluster through a mongos. Shard local users are local to the shard and are inaccessible to mongos.


#---------------------------------------------------------------------
# https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
#---------------------------------------------------------------------
mkdir -pv repl/instance{1..3}

mongod  --bind_ip 0.0.0.0 --port 27017 --dbpath repl/instance1 --replSet rs
mongod  --bind_ip 0.0.0.0 --port 27018 --dbpath repl/instance2 --replSet rs
mongod  --bind_ip 0.0.0.0 --port 27019 --dbpath repl/instance3 --replSet rs

mongosh --port 27017

let config={
   _id : "rs",
   members: [
      { _id: 0, host: "bemoan:27017" },
      { _id: 1, host: "bemoan:27018" },
      { _id: 2, host: "bemoan:27019" }
   ]
}

rs.initiate(config)
rs.conf()
rs.status()

use rty
show tables
for(let i=0;i<100;++i){
  db.user.insertOne({_id:i,name:'rty_'+i,age:10+i})
}

db.user.find().skip(10).limit(5)
db.user.countDocuments()
db.user.deleteMany({})
db.user.insertOne({name:'rty'})


mongosh --port 27018 (secondary)
# https://docs.mongodb.com/manual/reference/method/Mongo.setReadPref/
db.getMongo().setReadPref('primaryPreferred')

# /etc/mongod.conf
replication:
   replSetName: "rs0"
net:
   bindIp: localhost,<hostname(s)|ip address(es)>
#---------------------------------------------------------------------
# mongod
#---------------------------------------------------------------------
mongod --bind_ip localhost,My-Example-Associated-Hostname --config /etc/mongod.conf


#---------------------------------------------------------------------
# Sharding
#---------------------------------------------------------------------
mkdir -pv shard/{primary,secondary,config}{1..3}

mongod --dbpath shard/primary1 --bind_ip 0.0.0.0 --shardsvr --replSet rs1 --port 27017
mongod --dbpath shard/secondary1 --bind_ip 0.0.0.0 --shardsvr --replSet rs1 --port 27027
let config={
  _id: 'rs1',
  members: [
    {_id:0, host: 'bemoan:27017'},
    {_id:1, host: 'bemoan:27027'}
  ]
}

mongod --dbpath shard/primary2 --bind_ip 0.0.0.0 --shardsvr --replSet rs2 --port 27018
mongod --dbpath shard/secondary2 --bind_ip 0.0.0.0 --shardsvr --replSet rs2 --port 27028
let config={
  _id: 'rs2',
  members: [
    {_id:0, host: 'bemoan:27018'},
    {_id:1, host: 'bemoan:27028'}
  ]
}

mongod --dbpath shard/primary3 --bind_ip 0.0.0.0 --shardsvr --replSet rs3 --port 27019
mongod --dbpath shard/secondary3 --bind_ip 0.0.0.0 --shardsvr --replSet rs3 --port 27029
let config={
  _id: 'rs3',
  members: [
    {_id:0, host: 'bemoan:27019'},
    {_id:1, host: 'bemoan:27029'}
  ]
}

mongod --dbpath shard/config1 --bind_ip 0.0.0.0 --configsvr --replSet configsvr --port 27010
mongod --dbpath shard/config2 --bind_ip 0.0.0.0 --configsvr --replSet configsvr --port 27011
mongod --dbpath shard/config3 --bind_ip 0.0.0.0 --configsvr --replSet configsvr --port 27012
let config={
  _id: 'configsvr',
  configsvr: true,
  members: [
    {_id:0, host: 'bemoan:27010'},
    {_id:1, host: 'bemoan:27011'},
    {_id:2, host: 'bemoan:27012'}
  ]
}

mongos --port 27013 --configdb configsvr/bemoan:27010,bemoan:27011,bemoan:27012 --bind_ip 0.0.0.0

mongosh --port 27013

# 设置分片
sh.addShard( "rs1/bemoan:27017,bemoan:27027")
sh.addShard( "rs2/bemoan:27018,bemoan:27028")
sh.addShard( "rs3/bemoan:27019,bemoan:27029")

# 指定分片库
sh.enableSharding('vapour')

# Shard a Collection
sh.shardCollection("<database>.<collection>", { <shard key field> : "hashed" } )
sh.shardCollection('vapour.user',{_id:'hashed'})