MongoDB筆記

1、上傳軟件

mkdir /data

cd /data

# 使用xshell上傳軟件

2、解壓軟件

tar xf mongodb-linux-x86_64-rhel62-3.2.10.tgz

mv mongodb-linux-x86_64-rhel62-3.2.10 mongodb

3、建立mongodb管理用戶

useradd mongod  #添加用戶

passwd  mongod  # 爲用戶設置密碼

4、修改目錄受權

chown -R mongod.mongod  /data/mongodb

5、切換或登陸mongod用戶

su - mongod

6、建立mongod的關鍵目錄mysql

mkdir -p /data/mongodb/data /data/mongodb/log
 
/data/mongodb/conf

cd /data/mongodb

ls -l

7、修改環境變量

# 編輯文件
vim ~/.bash_profile
#內容
# 添加一行:
export PATH=/data/mongodb/bin:$PATH

#配置生效一下:
source ~/.bash_profile

8、啓動mongodb

mongod --logpath=/data/mongodb/log/mongodb.log --dbpath=/data/mongodb/data/ --fork

9、登陸mongodb測試

mongo

++++++++++++++++++++++++++++++
#root用戶下:
#編輯文件
vim /etc/rc.local
#最後添加以下代碼:linux

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
View Code

#編輯配置文件redis

vim /etc/security/limits.confsql

#*               -       nofile          65535
View Code

+++++++++++++++++++++++++++++++mongodb

#都修改完成後 重啓虛擬機rebootshell

#vim

su - mongod

mongod --logpath=/data/mongodb/log/mongodb.log --dbpath=/data/mongodb/data/ --fork

10、配置文件使用

#編輯配置文件數組

vim /data/mongodb/conf/mongo.confbash

systemLog:

   destination: file

   path: "/data/mongodb/log/mongodb.log"

   logAppend: true

storage:

   journal:

      enabled: true

   dbPath: "/data/mongodb/data/"

processManagement:

   fork: true

net:

   port: 27017
View Code

11、mongodb的關閉

#關閉
mongod -f /data/mongodb/conf/mongo.conf --shutdown
#啓動:
mongod -f /data/mongodb/conf/mongo.conf 

12、幫助的使用

 1 help
 2 KEYWORDS.help()
 3 KEYWORDS.[TAB]
 4 db.help()
 5 db.stu.help()
 6 show
 7 use
 8 db.help()
 9 db.a.help()
10 rs.help()
11 sh.help()
View Code

十3、集合的操做    

(一)建立集合

方法1:架構

admin> use app
switched to db app
app> db.createCollection('a')
{ "ok" : 1 }
app> db.createCollection('b')
{ "ok" : 1 }
> show collections //查看當前數據下的全部集合
a b 或
> db.getCollectionNames()
[ "a", "b" ]
View Code

方法2:當插入一個文檔的時候,一個集合就會自動建立。

> use oldboy
> db.test.insert({name:"zhangsan"})
> db.stu.insert({id:101,name:"zhangsan",age:20,gender:"m"})
> show tables;
> db.stu.insert({id:102,name:"lisi"})
> db.stu.insert({a:"b",c:"d"})
> db.stu.insert({a:1,c:2})
> db.stu.find({}).pretty()
db.stu.find({id:101}).pretty();
{
"_id" : ObjectId("5b470168cfdebc16a5a82a97"),
"id" : 101,
"name" : "zhangsan",
"age" : 20,
"gender" : "m"
}

 
use test
db.createUser({
    user: "test",
    pwd: "123",
    roles: [ { role: "readWrite", db: "oldboy" } ]
})

use admin
db.createUser({
    user: "root",
    pwd: "root123",
    roles: [ { role: "root", db: "admin" } ]
})
View Code

#配置文件中,加入如下配置

vim /data/mongodb/conf/mongo.conf

#在配置文件中添加兩行信息:

security:
  authorization: enabled 

(二)登陸驗證

(1)用戶登陸:

mongo -utest -p123   10.0.0.200

(2)管理員用戶:

mongo -uroot -proot123  10.0.0.200/admin

或者

mongo
use admin
db.auth('root','root123')

(三)查詢mongodb中的用戶信息

mongo -uroot -proot123  10.0.0.53/admin
db.system.users.find().pretty()

(四)刪除用戶(root身份登陸,use到驗證庫)

# mongo -uroot -proot123  10.0.0.53/admin
use app
db.dropUser("app03")

十4、複製集

須要掌握:不一樣架構的鏈接方法

加上可選仲裁節點

延時節點:爲了邏輯錯誤

隱藏節點

越多從庫存在對主庫的壓力越大

一、規劃
三個以上的mongodb節點(或多實例)
多實例:
(1)多個端口:2801七、2801八、2801九、28020
(2)多套目錄:

mkdir -p /data/mongodb/28017/conf /data/mongodb/28017/data /data/mongodb/28017/log
mkdir -p /data/mongodb/28018/conf /data/mongodb/28018/data /data/mongodb/28018/log
mkdir -p /data/mongodb/28019/conf /data/mongodb/28019/data /data/mongodb/28019/log
mkdir -p /data/mongodb/28020/conf /data/mongodb/28020/data /data/mongodb/28020/log

 

vim  /data/mongodb/28017/conf/mongod.conf

systemLog:
  destination: file
  path: /data/mongodb/28017/log/mongodb.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /data/mongodb/28017/data
  directoryPerDB: true
  #engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
processManagement:
  fork: true
net:
  port: 28017
replication:
  oplogSizeMB: 2048
  replSetName: my_repl
View Code

 

MangoDB切分

和redis的切分不同的是,MangoDB的切分是能夠由咱們控制的,也就是咱們能夠定製切分規則。。。。。。。。。。。

應該對熱點數據進行切分,熱點數據就是常常訪問的數據。也有熱點表,熱點表也是常常被訪問的表。

分片集羣的構成:

  1. config server

(祕書)

存放節點信息,分片策略。默認須要配置三個這種節點。

  1. mongos

(老闆)

APP Router提供對外應用訪問。全部操做都經過mongos執行。

數據遷移

數據自動均衡(很耗IO性能)

  1. mongod

(真正幹活的)

存儲應用數據記錄。真正的數據是存在底層的shard節點上。

 

分片鍵shard key

能設置實現預分片

  1. 必須爲分片定義分片鍵(其實就是選某個字段,選有惟一值多的,精良選未來查詢中做爲查詢條件的鍵)
  2. 基於一個或多個列
  3. 分片鍵定義數據空間
  4. 分偏見進行range和hash分片:hash分片更均勻。枚舉類型也能夠做爲分片鍵

。。。。。。。

分片鍵是不可變的

必須有索引

大小限制512bytes

不接受插入爲空,不然分片失效

 

 

MongoDB的邏輯結構

MySQL                    MongoDB

庫                                       庫               

表                                       集合

列,數據行                           文檔

mongodb複製集RS

 

基本原理:

基本構成是1主2從的結構,自帶互相監控投票機制(Raft(MongoDB)  Paxos(mysql MGR 用的是變種))

若是發生主庫宕機,複製集內部會進行投票選舉,選擇一個新的主庫替代原有主庫對外提供服務。同時複製集會自動通知

客戶端程序,主庫已經發生切換了。應用就會鏈接到新的主庫。

 

 

Replcation Set配置過程詳解

一、規劃

三個以上的mongodb節點(或多實例)

多實例:

(1)多個端口:2801七、2801八、2801九、28020

(2)多套目錄:

mkdir -p /data/mongodb/28017/conf /data/mongodb/28017/data /data/mongodb/28017/log

mkdir -p /data/mongodb/28018/conf /data/mongodb/28018/data /data/mongodb/28018/log

mkdir -p /data/mongodb/28019/conf /data/mongodb/28019/data /data/mongodb/28019/log

mkdir -p /data/mongodb/28020/conf /data/mongodb/28020/data /data/mongodb/28020/log

 (3) 多套配置文件              

/data/mongodb/28017/conf/mongod.conf

/data/mongodb/28018/conf/mongod.conf

/data/mongodb/28019/conf/mongod.conf

/data/mongodb/28020/conf/mongod.conf

(4)配置文件內容

vim  /data/mongodb/28017/conf/mongod.conf

systemLog:

  destination: file

  path: /data/mongodb/28017/log/mongodb.log

  logAppend: true

storage:

  journal:

    enabled: true

  dbPath: /data/mongodb/28017/data

  directoryPerDB: true

  #engine: wiredTiger

  wiredTiger:

    engineConfig:

      cacheSizeGB: 1

      directoryForIndexes: true

    collectionConfig:

      blockCompressor: zlib

    indexConfig:

      prefixCompression: true

processManagement:

  fork: true

net:

  port: 28017

replication:

  oplogSizeMB: 2048

  replSetName: my_repl

 

cp  /data/mongodb/28017/conf/mongod.conf  /data/mongodb/28018/conf/

cp  /data/mongodb/28017/conf/mongod.conf  /data/mongodb/28019/conf/

cp  /data/mongodb/28017/conf/mongod.conf  /data/mongodb/28020/conf/

 

 

sed 's#28017#28018#g' /data/mongodb/28018/conf/mongod.conf -i

sed 's#28017#28019#g' /data/mongodb/28019/conf/mongod.conf -i

sed 's#28017#28020#g' /data/mongodb/28020/conf/mongod.conf -i

------------------------------------------------------------

(5)啓動多個實例備用

mongod -f /data/mongodb/28017/conf/mongod.conf

mongod -f /data/mongodb/28018/conf/mongod.conf

mongod -f /data/mongodb/28019/conf/mongod.conf

mongod -f /data/mongodb/28020/conf/mongod.conf

netstat -lnp|grep 280

 

二、配置複製集:

(1)1主2從,從庫普通從庫

mongo --port 28017 admin

config = {_id: 'my_repl', members: [

                          {_id: 0, host: '10.0.0.200:28017'},

                          {_id: 1, host: '10.0.0.200:28018'},

                          {_id: 2, host: '10.0.0.200:28019'}]

          }

         
rs.initiate(config)

三、複製集管理操做:

(1)查看複製集狀態:

rs.status();    //查看總體複製集狀態

rs.isMaster(); // 查看當前是不是主節點

(2)添加刪除節點

rs.add("ip:port"); // 新增從節點

rs.remove("ip:port"); // 刪除一個節點

rs.addArb("ip:port"); // 新增仲裁節點

--------------------------------

添加 arbiter節點

一、鏈接到主節點

[mongod@db03 ~]$ mongo --port 28017 admin

二、添加仲裁節點

my_repl:PRIMARY> rs.addArb("10.0.0.200:28020")

三、查看節點狀態

my_repl:PRIMARY> rs.isMaster()
#輸出結果
{

       "hosts" : [

              "10.0.0.200:28017",

              "10.0.0.200:28018",

              "10.0.0.200:28019"

       ],

       "arbiters" : [

              "10.0.0.200:28020"

       ],

 

四、刪除一個節點

rs.remove("ip:port"); 

例子:

my_repl:PRIMARY> rs.remove("10.0.0.200:28019");

{ "ok" : 1 }

my_repl:PRIMARY> rs.isMaster()

 

5.新增從節點

rs.add("ip:port");

例子:

my_repl:PRIMARY> rs.add("10.0.0.200:28019")

{ "ok" : 1 }

my_repl:PRIMARY> rs.isMaster()

---------------------------

注:

添加特殊節點時,

1>能夠在搭建過程當中設置特殊節點

2>能夠經過修改配置的方式將普通從節點設置爲特殊節點

/*找到須要改成延遲性同步的數組號*/;

 

特殊節點:

arbiter節點:主要負責選主過程當中的投票,可是不存儲任何數據,也不提供任何服務

hidden節點:隱藏節點,不參與選主,也不對外提供服務。

delay節點:延時節點,數據落後於主庫一段時間,由於數據是延時的,也不該該提供服務或參與選主,

因此一般會配合hidden(隱藏)

通常狀況下會將delay+hidden一塊兒配置使用

(3)配置延時節點(通常延時節點也配置成hidden)

cfg=rs.conf()

cfg.members[1].priority=0

cfg.members[1].hidden=true

cfg.members[1].slaveDelay=120

rs.reconfig(cfg)   

 

------------目前狀態-------------------

個人需求是:把28019設置爲hidden和delay

my_repl:PRIMARY> rs.status()
{ 
       "members" : [
              {
                     "_id" : 0,
                    "name" : "10.0.0.200:28017",
              },
              {
                     "_id" : 1,
                     "name" : "10.0.0.200:28018",                
              },
              {
                     "_id" : 3,
                     "name" : "10.0.0.200:28020",      
              },
              {
                     "_id" : 4,
                     "name" : "10.0.0.200:28019",          
              }
View Code

 ---------------------------

cfg=rs.conf()
cfg.members[2].priority=0
cfg.members[2].hidden=true
cfg.members[2].slaveDelay=120
rs.reconfig(cfg)  
View Code

取消以上配置

cfg=rs.conf()
cfg.members[3].priority=1
cfg.members[3].hidden=false
cfg.members[3].slaveDelay=0
rs.reconfig(cfg)   
View Code

配置成功後,經過如下命令查詢配置後的屬性

rs.conf();
相關文章
相關標籤/搜索