NoSQL-MongoDB文檔數(shù)據(jù)庫(kù)核心技術(shù)(運(yùn)維篇)

1. MongoDB邏輯結(jié)構(gòu)

MySQL MongoDB
庫(kù)(database) 庫(kù)(database)
表(table) 集合(collections)
列(col) 文檔(json)
行(row)

文檔

{
    id:101
    name:zhangsan
}

2. 安裝部署

mongodb-linux-x86_64-rhel70-3.6.12.tgz分享地址

1巡莹、系統(tǒng)準(zhǔn)備

(1)redhat或centos6.2以上系統(tǒng)
(2)系統(tǒng)開發(fā)包完整
(3)ip地址和hosts文件解析正常
(4)iptables防火墻&SElinux關(guān)閉
(5)關(guān)閉大頁(yè)內(nèi)存機(jī)制
########################################################################
root用戶下
在vi /etc/rc.local最后添加如下代碼
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
        
cat  /sys/kernel/mm/transparent_hugepage/enabled        
cat /sys/kernel/mm/transparent_hugepage/defrag  
其他系統(tǒng)關(guān)閉參照官方文檔:   

https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/
---------------
為什么要關(guān)閉腻异?
Transparent Huge Pages (THP) is a Linux memory management system 
that reduces the overhead of Translation Lookaside Buffer (TLB) 
lookups on machines with large amounts of memory by using larger memory pages.
However, database workloads often perform poorly with THP, 
because they tend to have sparse rather than contiguous memory access patterns. 
You should disable THP on Linux machines to ensure best performance with MongoDB.
############################################################################    

2扩灯、mongodb安裝

創(chuàng)建所需用戶和組

useradd mongod
passwd mongod

創(chuàng)建mongodb所需目錄結(jié)構(gòu)

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

上傳并解壓軟件到指定位置

[root@db01 data]# cd   /data
[root@db01 data]# tar xf mongodb-linux-x86_64-rhel70-3.6.12.tgz 
[root@db01 data]#  cp -r /data/mongodb-linux-x86_64-rhel70-3.6.12/bin/ /mongodb

設(shè)置目錄結(jié)構(gòu)權(quán)限

chown -R mongod:mongod /mongodb

設(shè)置用戶環(huán)境變量

su - mongod
vi .bash_profile
export PATH=/mongodb/bin:$PATH
source .bash_profile

啟動(dòng)mongodb

mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork 

登錄mongodb

[mongod@server2 ~]$ mongo

使用配置文件

YAML模式

NOTE:
YAML does not support tab characters for indentation: use spaces instead.

--系統(tǒng)日志有關(guān)  
systemLog:
   destination: file        
   path: "/mongodb/log/mongodb.log"    --日志位置
   logAppend: true                     --日志以追加模式記錄
  
--數(shù)據(jù)存儲(chǔ)有關(guān)   
storage:
   journal:
      enabled: true
   dbPath: "/mongodb/data"            --數(shù)據(jù)路徑的位置

-- 進(jìn)程控制  
processManagement:
   fork: true                         --后臺(tái)守護(hù)進(jìn)程
   pidFilePath: <string>              --pid文件的位置俐镐,一般不用配置筐喳,可以去掉這行贺待,自動(dòng)生成到data中
    
--網(wǎng)絡(luò)配置有關(guān)   
net:            
   bindIp: <ip>                       -- 監(jiān)聽地址
   port: <port>                       -- 端口號(hào),默認(rèn)不配置端口號(hào),是27017
   
-- 安全驗(yàn)證有關(guān)配置      
security:
  authorization: enabled              --是否打開用戶名密碼驗(yàn)證
  
------------------以下是復(fù)制集與分片集群有關(guān)----------------------  

replication:
 oplogSizeMB: <NUM>
 replSetName: "<REPSETNAME>"
 secondaryIndexPrefetch: "all"
 
sharding:
   clusterRole: <string>
   archiveMovedChunks: <boolean>
      
---for mongos only
replication:
   localPingThresholdMs: <int>

sharding:
   configDB: <string>
---
++++++++++++++++++++++
YAML例子
cat >  /mongodb/conf/mongo.conf <<EOF
systemLog:
   destination: file
   path: "/mongodb/log/mongodb.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/mongodb/data/"
processManagement:
   fork: true
net:
   port: 27017
   bindIp: 10.0.0.51,127.0.0.1
EOF
mongod -f /mongodb/conf/mongo.conf --shutdown
mongod -f /mongodb/conf/mongo.conf 

mongodb的關(guān)閉/啟動(dòng)方式

mongod -f /mongodb/conf/mongo.conf --shutdown
mongod -f /mongodb/conf/mongo.conf

mongodb 使用systemd管理

[root@db01 ~]# cat > /etc/systemd/system/mongod.service <<EOF
[Unit]
Description=mongodb 
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongod
Type=forking
ExecStart=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf --shutdown
PrivateTmp=true  
[Install]
WantedBy=multi-user.target
EOF

[root@db01 ~]# systemctl restart mongod
[root@db01 ~]# systemctl stop mongod
[root@db01 ~]# systemctl start mongod

注意:systemd是root用戶管理,使用前,首先關(guān)閉原來模式啟動(dòng)的mongodb,使用的時(shí)候還需要切換到mongod用戶

3临庇、mongodb常用基本操作

3.0 mongodb 默認(rèn)存在的庫(kù)

test:登錄時(shí)默認(rèn)存在的庫(kù)
管理MongoDB有關(guān)的系統(tǒng)庫(kù)
admin庫(kù):系統(tǒng)預(yù)留庫(kù),MongoDB系統(tǒng)管理庫(kù)
local庫(kù):本地預(yù)留庫(kù),存儲(chǔ)關(guān)鍵日志
config庫(kù):MongoDB配置信息庫(kù)

show databases/show dbs
show tables/show collections
use admin 
db/select database()

3.1 命令種類

db 對(duì)象相關(guān)命令

db.[TAB][TAB]
db.help()
db.oldboy.[TAB][TAB]
db.oldboy.help()

rs 復(fù)制集有關(guān)(replication set)

rs.[TAB][TAB]
rs.help()

sh 分片集群(sharding cluster)

sh.[TAB][TAB]
sh.help()

4. mongodb對(duì)象操作

mongo         mysql
庫(kù)    ----->  庫(kù)
集合  ----->  表
文檔  ----->  數(shù)據(jù)行

4.1 庫(kù)的操作

> use test
>db.dropDatabase()   
{ "dropped" : "test", "ok" : 1 }

4.2 集合的操作

db.createCollection('a')
db.createCollection('oldboy')
show tables 
db.oldboy.drop()

4.3 文檔操作

數(shù)據(jù)錄入:
for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new
Date()})}

查詢數(shù)據(jù)行數(shù):
> db.log.count()
全表查詢:
> db.log.find()
每頁(yè)顯示50條記錄:
> DBQuery.shellBatchSize=50; 
按照條件查詢
> db.log.find({uid:999})
以標(biāo)準(zhǔn)的json格式顯示數(shù)據(jù)
> db.log.find({uid:999}).pretty()
{
    "_id" : ObjectId("5cc516e60d13144c89dead33"),
    "uid" : 999,
    "name" : "mongodb",
    "age" : 6,
    "date" : ISODate("2019-04-28T02:58:46.109Z")
}

刪除集合中所有記錄
app> db.log.remove({})

查看集合存儲(chǔ)信息

app> db.log.totalSize() //集合中索引+數(shù)據(jù)壓縮存儲(chǔ)之后的大小    

MongoDB中文社區(qū)文檔
MongoDB中文社區(qū)文檔地址2
都不屬于官網(wǎng)

5. 用戶及權(quán)限管理

5.1 注意

驗(yàn)證庫(kù): 建立用戶時(shí)use到的庫(kù)反璃,在使用用戶時(shí),要加上驗(yàn)證庫(kù)才能登陸假夺。

對(duì)于管理員用戶,必須在admin下創(chuàng)建.
1. 建用戶時(shí),use到的庫(kù),就是此用戶的驗(yàn)證庫(kù)
2. 登錄時(shí),必須明確指定驗(yàn)證庫(kù)才能登錄
3. 通常,管理員用的驗(yàn)證庫(kù)是admin,普通用戶的驗(yàn)證庫(kù)一般是所管理的庫(kù)設(shè)置為驗(yàn)證庫(kù)
4. 如果直接登錄到數(shù)據(jù)庫(kù),不進(jìn)行use,默認(rèn)的驗(yàn)證庫(kù)是test,不是我們生產(chǎn)建議的.
5. 從3.6 版本開始淮蜈,不添加bindIp參數(shù),默認(rèn)不讓遠(yuǎn)程登錄已卷,只能本地管理員登錄梧田。

5.2 用戶創(chuàng)建語(yǔ)法

use admin            #選定驗(yàn)證庫(kù)
db.createUser     
{
    user: "<name>",
    pwd: "<cleartext password>",
    roles: [
       { role: "<role>",
     db: "<database>" } | "<role>",
    ...
    ]
}

基本語(yǔ)法說明:
user:用戶名
pwd:密碼
roles:
    role:角色名
    db:作用對(duì)象 
role:root, readWrite,read   
驗(yàn)證數(shù)據(jù)庫(kù):
mongo -u oldboy -p 123 10.0.0.53/oldboy

5.3 用戶管理例子

創(chuàng)建超級(jí)管理員:管理所有數(shù)據(jù)庫(kù)(必須use admin再去創(chuàng)建)
$ mongo
use admin
db.createUser(
{
    user: "root",
    pwd: "root123",
    roles: [ { role: "root", db: "admin" } ]
}
)

驗(yàn)證用戶

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

配置文件中,加入以下配置

security:
  authorization: enabled

重啟mongodb

mongod -f /mongodb/conf/mongo.conf --shutdown 
mongod -f /mongodb/conf/mongo.conf 

登錄驗(yàn)證

mongo -uroot -proot123  admin
mongo -uroot -proot123  10.0.0.51/admin

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

查看用戶

use admin
db.system.users.find().pretty()

創(chuàng)建應(yīng)用用戶

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

mongo  -uapp01 -papp01 10.0.0.51/oldboy

查詢mongodb中的用戶信息

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

5.4 刪除用戶(root身份登錄,use到驗(yàn)證庫(kù))

刪除用戶
db.createUser({user: "app02",pwd: "app02",roles: [{ role: "readWrite" , db: "oldboy" }])
mongo -uroot -proot123 10.0.0.51/admin
use oldboy
db.dropUser("app02")

5.5 用戶管理注意事項(xiàng)

1. 建用戶要有驗(yàn)證庫(kù)裁眯,管理員admin鹉梨,普通用戶是要管理的庫(kù)
2. 登錄時(shí),注意驗(yàn)證庫(kù)
mongo -uapp01 -papp01 10.0.0.51:27017/oldboy
3. 重點(diǎn)參數(shù)
net:
   port: 27017
   bindIp: 10.0.0.51,127.0.0.1
security:
   authorization: enabled

6. MongoDB復(fù)制集RS(ReplicationSet)

6.1 基本原理

基本構(gòu)成是1主2從的結(jié)構(gòu)穿稳,自帶互相監(jiān)控投票機(jī)制(Raft(MongoDB)  Paxos(mysql MGR 用的是變種))
如果發(fā)生主庫(kù)宕機(jī)存皂,復(fù)制集內(nèi)部會(huì)進(jìn)行投票選舉,選擇一個(gè)新的主庫(kù)替代原有主庫(kù)對(duì)外提供服務(wù)逢艘。同時(shí)復(fù)制集會(huì)自動(dòng)通知
客戶端程序旦袋,主庫(kù)已經(jīng)發(fā)生切換了。應(yīng)用就會(huì)連接到新的主庫(kù)它改。

6.2.2 環(huán)境準(zhǔn)備

多個(gè)端口

28017疤孕、28018、28019央拖、28020

多套目錄

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

多套配置文件

/mongodb/28017/conf/mongod.conf
/mongodb/28018/conf/mongod.conf
/mongodb/28019/conf/mongod.conf
/mongodb/28020/conf/mongod.conf

配置文件內(nèi)容

cat > /mongodb/28017/conf/mongod.conf <<EOF
systemLog:
  destination: file
  path: /mongodb/28017/log/mongodb.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/28017/data
  directoryPerDB: true
  #engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
processManagement:
  fork: true
net:
  bindIp: 10.0.0.51,127.0.0.1
  port: 28017
replication:
  oplogSizeMB: 2048
  replSetName: my_repl
EOF

\cp  /mongodb/28017/conf/mongod.conf  /mongodb/28018/conf/
\cp  /mongodb/28017/conf/mongod.conf  /mongodb/28019/conf/
\cp  /mongodb/28017/conf/mongod.conf  /mongodb/28020/conf/

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

啟動(dòng)多個(gè)實(shí)例備用

mongod -f /mongodb/28017/conf/mongod.conf
mongod -f /mongodb/28018/conf/mongod.conf
mongod -f /mongodb/28019/conf/mongod.conf
mongod -f /mongodb/28020/conf/mongod.conf
netstat -lnp|grep 280

6.3 配置普通復(fù)制集:

1主2從祭阀,從庫(kù)普通從庫(kù)
mongo --port 28017 admin
config = {_id: 'my_repl', members: [
                          {_id: 0, host: '10.0.0.51:28017'},
                          {_id: 1, host: '10.0.0.51:28018'},
                          {_id: 2, host: '10.0.0.51:28019'}]
          }                   
rs.initiate(config) 
查詢復(fù)制集狀態(tài)
rs.status();

6.4 1主1從1個(gè)arbiter

mongo -port 28017 admin
config = {_id: 'my_repl', members: [
                          {_id: 0, host: '10.0.0.51:28017'},
                          {_id: 1, host: '10.0.0.51:28018'},
                          {_id: 2, host: '10.0.0.51:28019',"arbiterOnly":true}]
          }                
rs.initiate(config) 

6.5 復(fù)制集管理操作

6.5.1 查看復(fù)制集狀態(tài)

rs.status();    //查看整體復(fù)制集狀態(tài)
rs.isMaster();  //查看當(dāng)前是否是主節(jié)點(diǎn)
rs.conf();     //查看復(fù)制集配置信息

6.5.2 添加刪除節(jié)點(diǎn)

rs.remove("ip:port"); // 刪除一個(gè)節(jié)點(diǎn)
rs.add("ip:port");    // 新增從節(jié)點(diǎn)
rs.addArb("ip:port"); // 新增仲裁節(jié)點(diǎn)
例子:
添加 arbiter節(jié)點(diǎn)
1爬泥、連接到主節(jié)點(diǎn)
[mongod@db03 ~]$ mongo --port 28018 admin
2柬讨、添加仲裁節(jié)點(diǎn)
my_repl:PRIMARY> rs.addArb("10.0.0.53:28020")
3崩瓤、查看節(jié)點(diǎn)狀態(tài)
my_repl:PRIMARY> rs.isMaster()
{
    "hosts" : [
        "10.0.0.53:28017",
        "10.0.0.53:28018",
        "10.0.0.53:28019"
    ],
    "arbiters" : [
        "10.0.0.53:28020"
    ],

rs.remove("ip:port"); // 刪除一個(gè)節(jié)點(diǎn)
例子:
my_repl:PRIMARY> rs.remove("10.0.0.53:28019");
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()
rs.add("ip:port"); // 新增從節(jié)點(diǎn)
例子:
my_repl:PRIMARY> rs.add("10.0.0.53:28019")
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()

6.5.3 特殊從節(jié)點(diǎn)

image
image

介紹:

arbiter節(jié)點(diǎn):主要負(fù)責(zé)選主過程中的投票袍啡,但是不存儲(chǔ)任何數(shù)據(jù),也不提供任何服務(wù)
hidden節(jié)點(diǎn):隱藏節(jié)點(diǎn)却桶,不參與選主境输,也不對(duì)外提供服務(wù)。
delay節(jié)點(diǎn):延時(shí)節(jié)點(diǎn)颖系,數(shù)據(jù)落后于主庫(kù)一段時(shí)間嗅剖,因?yàn)閿?shù)據(jù)是延時(shí)的,也不應(yīng)該提供服務(wù)或參與選主嘁扼,所以通常會(huì)配合hidden(隱藏)
一般情況下會(huì)將delay+hidden一起配置使用

配置延時(shí)節(jié)點(diǎn)(一般延時(shí)節(jié)點(diǎn)也配置成hidden)

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

取消以上配置
cfg=rs.conf() 
cfg.members[2].priority=1
cfg.members[2].hidden=false
cfg.members[2].slaveDelay=0
rs.reconfig(cfg)    
配置成功后信粮,通過以下命令查詢配置后的屬性
rs.conf(); 

6.5.4 副本集其他操作命令

查看副本集的配置信息
admin> rs.conf()
查看副本集各成員的狀態(tài)
admin> rs.status()
++++++++++++++++++++++++++++++++++++++++++++++++
--副本集角色切換(不要人為隨便操作)
admin> rs.stepDown()
注:
admin> rs.freeze(300) //鎖定從,使其不會(huì)轉(zhuǎn)變成主庫(kù)
freeze()和stepDown單位都是秒趁啸。
+++++++++++++++++++++++++++++++++++++++++++++
設(shè)置副本節(jié)點(diǎn)可讀:在副本節(jié)點(diǎn)執(zhí)行
admin> rs.slaveOk()
eg:
admin> use app
switched to db app
app> db.createCollection('a')
{ "ok" : 0, "errmsg" : "not master", "code" : 10107 }

查看副本節(jié)點(diǎn)(監(jiān)控主從延時(shí))
admin> rs.printSlaveReplicationInfo()
source: 192.168.1.22:27017
    syncedTo: Thu May 26 2016 10:28:56 GMT+0800 (CST)
    0 secs (0 hrs) behind the primary

OPlog日志(備份恢復(fù)章節(jié))

7. MongoDB Sharding Cluster 分片集群

7.1 規(guī)劃

10個(gè)實(shí)例:38017-38026
(1)configserver:38018-38020
3臺(tái)構(gòu)成的復(fù)制集(1主兩從强缘,不支持arbiter)38018-38020(復(fù)制集名字configsvr)
(2)shard節(jié)點(diǎn):
sh1:38021-23    (1主兩從,其中一個(gè)節(jié)點(diǎn)為arbiter不傅,復(fù)制集名字sh1)
sh2:38024-26    (1主兩從旅掂,其中一個(gè)節(jié)點(diǎn)為arbiter,復(fù)制集名字sh2)
(3) mongos:
38017

7.2 Shard節(jié)點(diǎn)配置過程

7.2.1 目錄創(chuàng)建:

mkdir -p /mongodb/38021/conf  /mongodb/38021/log  /mongodb/38021/data
mkdir -p /mongodb/38022/conf  /mongodb/38022/log  /mongodb/38022/data
mkdir -p /mongodb/38023/conf  /mongodb/38023/log  /mongodb/38023/data
mkdir -p /mongodb/38024/conf  /mongodb/38024/log  /mongodb/38024/data
mkdir -p /mongodb/38025/conf  /mongodb/38025/log  /mongodb/38025/data
mkdir -p /mongodb/38026/conf  /mongodb/38026/log  /mongodb/38026/data

7.2.2 修改配置文件:

第一組復(fù)制集搭建:21-23(1主 1從 1Arb)

cat >  /mongodb/38021/conf/mongodb.conf  <<EOF
systemLog:
  destination: file
  path: /mongodb/38021/log/mongodb.log   
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/38021/data
  directoryPerDB: true
  #engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
net:
  bindIp: 10.0.0.51,127.0.0.1
  port: 38021
replication:
  oplogSizeMB: 2048
  replSetName: sh1
sharding:
  clusterRole: shardsvr
processManagement: 
  fork: true
EOF
\cp  /mongodb/38021/conf/mongodb.conf  /mongodb/38022/conf/
\cp  /mongodb/38021/conf/mongodb.conf  /mongodb/38023/conf/

sed 's#38021#38022#g' /mongodb/38022/conf/mongodb.conf -i
sed 's#38021#38023#g' /mongodb/38023/conf/mongodb.conf -i

第二組節(jié)點(diǎn):24-26(1主1從1Arb)

cat > /mongodb/38024/conf/mongodb.conf <<EOF
systemLog:
  destination: file
  path: /mongodb/38024/log/mongodb.log   
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/38024/data
  directoryPerDB: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
net:
  bindIp: 10.0.0.51,127.0.0.1
  port: 38024
replication:
  oplogSizeMB: 2048
  replSetName: sh2
sharding:
  clusterRole: shardsvr
processManagement: 
  fork: true
EOF

\cp  /mongodb/38024/conf/mongodb.conf  /mongodb/38025/conf/
\cp  /mongodb/38024/conf/mongodb.conf  /mongodb/38026/conf/
sed 's#38024#38025#g' /mongodb/38025/conf/mongodb.conf -i
sed 's#38024#38026#g' /mongodb/38026/conf/mongodb.conf -i

7.2.3 啟動(dòng)所有節(jié)點(diǎn)访娶,并搭建復(fù)制集

mongod -f  /mongodb/38021/conf/mongodb.conf 
mongod -f  /mongodb/38022/conf/mongodb.conf 
mongod -f  /mongodb/38023/conf/mongodb.conf 
mongod -f  /mongodb/38024/conf/mongodb.conf 
mongod -f  /mongodb/38025/conf/mongodb.conf 
mongod -f  /mongodb/38026/conf/mongodb.conf  
ps -ef |grep mongod

mongo --port 38021
use  admin
config = {_id: 'sh1', members: [
                          {_id: 0, host: '10.0.0.51:38021'},
                          {_id: 1, host: '10.0.0.51:38022'},
                          {_id: 2, host: '10.0.0.51:38023',"arbiterOnly":true}]
           }

rs.initiate(config)

 mongo --port 38024 
 use admin
config = {_id: 'sh2', members: [
                          {_id: 0, host: '10.0.0.51:38024'},
                          {_id: 1, host: '10.0.0.51:38025'},
                          {_id: 2, host: '10.0.0.51:38026',"arbiterOnly":true}]
           }

rs.initiate(config)

7.3 config節(jié)點(diǎn)配置

7.3.1 目錄創(chuàng)建

mkdir -p /mongodb/38018/conf  /mongodb/38018/log  /mongodb/38018/data
mkdir -p /mongodb/38019/conf  /mongodb/38019/log  /mongodb/38019/data
mkdir -p /mongodb/38020/conf  /mongodb/38020/log  /mongodb/38020/data

7.3.2修改配置文件:

cat > /mongodb/38018/conf/mongodb.conf <<EOF
systemLog:
  destination: file
  path: /mongodb/38018/log/mongodb.conf
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/38018/data
  directoryPerDB: true
  #engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
net:
  bindIp: 10.0.0.51,127.0.0.1
  port: 38018
replication:
  oplogSizeMB: 2048
  replSetName: configReplSet
sharding:
  clusterRole: configsvr
processManagement: 
  fork: true
EOF

\cp /mongodb/38018/conf/mongodb.conf /mongodb/38019/conf/
\cp /mongodb/38018/conf/mongodb.conf /mongodb/38020/conf/
sed 's#38018#38019#g' /mongodb/38019/conf/mongodb.conf -i
sed 's#38018#38020#g' /mongodb/38020/conf/mongodb.conf -i

7.3.3啟動(dòng)節(jié)點(diǎn)商虐,并配置復(fù)制集

mongod -f /mongodb/38018/conf/mongodb.conf 
mongod -f /mongodb/38019/conf/mongodb.conf 
mongod -f /mongodb/38020/conf/mongodb.conf 

mongo --port 38018
use  admin
 config = {_id: 'configReplSet', members: [
                          {_id: 0, host: '10.0.0.51:38018'},
                          {_id: 1, host: '10.0.0.51:38019'},
                          {_id: 2, host: '10.0.0.51:38020'}]
           }
rs.initiate(config)  

注:configserver 可以是一個(gè)節(jié)點(diǎn),官方建議復(fù)制集。configserver不能有arbiter秘车。
新版本中典勇,要求必須是復(fù)制集。
注:mongodb 3.4之后叮趴,雖然要求config server為replica set痴柔,但是不支持arbiter

7.4 mongos節(jié)點(diǎn)配置:

7.4.1創(chuàng)建目錄:

mkdir -p /mongodb/38017/conf  /mongodb/38017/log 

7.4.2配置文件:

cat > /mongodb/38017/conf/mongos.conf <<EOF
systemLog:
  destination: file
  path: /mongodb/38017/log/mongos.log
  logAppend: true
net:
  bindIp: 10.0.0.51,127.0.0.1
  port: 38017
sharding:
  configDB: configReplSet/10.0.0.51:38018,10.0.0.51:38019,10.0.0.51:38020
processManagement: 
  fork: true
EOF

7.4.3啟動(dòng)mongos

 mongos -f /mongodb/38017/conf/mongos.conf 

7.5 分片集群添加節(jié)點(diǎn)

 連接到其中一個(gè)mongos(10.0.0.51),做以下配置
(1)連接到mongs的admin數(shù)據(jù)庫(kù)
# su - mongod
$ mongo 10.0.0.51:38017/admin
(2)添加分片
db.runCommand( { addshard : "sh1/10.0.0.51:38021,10.0.0.51:38022,10.0.0.51:38023",name:"shard1"} )
db.runCommand( { addshard : "sh2/10.0.0.51:38024,10.0.0.51:38025,10.0.0.51:38026",name:"shard2"} )
(3)列出分片
mongos> db.runCommand( { listshards : 1 } )
(4)整體狀態(tài)查看
mongos> sh.status();

7.6 使用分片集群

7.6.1 RANGE分片配置及測(cè)試

1疫向、激活數(shù)據(jù)庫(kù)分片功能

mongo --port 38017 admin
#admin>  ( { enablesharding : "數(shù)據(jù)庫(kù)名稱" } )
#eg:
admin> db.runCommand( { enablesharding : "test" } )

2咳蔚、指定分片鍵對(duì)集合分片

### 創(chuàng)建索引
use test
> db.vast.ensureIndex( { id: 1 } )  #1是順序,-1是倒序
### 開啟分片
use admin
> db.runCommand( { shardcollection : "test.vast",key : {id: 1} } )

3、集合分片驗(yàn)證

admin> use test
test> for(i=1;i<1000000;i++){ db.vast.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()}); }
test> db.vast.stats()

4搔驼、分片結(jié)果測(cè)試

shard1:
mongo --port 38021
db.vast.count();

shard2:
mongo --port 38024
db.vast.count();

7.6.2 Hash分片例子:

對(duì)oldboy庫(kù)下的vast大表進(jìn)行hash
創(chuàng)建哈希索引
(1)對(duì)于oldboy開啟分片功能
mongo --port 38017 admin
use admin
admin> db.runCommand( { enablesharding : "oldboy" } )
(2)對(duì)于oldboy庫(kù)下的vast表建立hash索引
use oldboy
oldboy> db.vast.ensureIndex( { id: "hashed" } )
(3)開啟分片 
use admin
admin > sh.shardCollection( "oldboy.vast", { id: "hashed" } )
(4)錄入10w行數(shù)據(jù)測(cè)試
use oldboy
for(i=1;i<100000;i++){ db.vast.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()}); }
(5)hash分片結(jié)果測(cè)試
mongo --port 38021
use oldboy
db.vast.count();
mongo --port 38024
use oldboy
db.vast.count();

7.7 分片集群的查詢及管理

7.7.1 判斷是否Shard集群

admin> db.runCommand({ isdbgrid : 1})

7.7.2 列出所有分片信息

admin> db.runCommand({ listshards : 1})

7.7.3 列出開啟分片的數(shù)據(jù)庫(kù)

admin> use config
config> db.databases.find( { "partitioned": true } )
或者:
config> db.databases.find() //列出所有數(shù)據(jù)庫(kù)分片情況

7.7.4 查看分片的片鍵

config> db.collections.find().pretty()
{
    "_id" : "test.vast",
    "lastmodEpoch" : ObjectId("58a599f19c898bbfb818b63c"),
    "lastmod" : ISODate("1970-02-19T17:02:47.296Z"),
    "dropped" : false,
    "key" : {
        "id" : 1
    },
    "unique" : false
}

7.7.5 查看分片的詳細(xì)信息

admin> sh.status()

7.7.6 刪除分片節(jié)點(diǎn)(謹(jǐn)慎)

(1)確認(rèn)blance是否在工作
sh.getBalancerState()
(2)刪除shard2節(jié)點(diǎn)(謹(jǐn)慎)
mongos> db.runCommand( { removeShard: "shard2" } )
注意:刪除操作一定會(huì)立即觸發(fā)blancer谈火。

7.8 balancer操作

7.8.1 介紹

mongos的一個(gè)重要功能,自動(dòng)巡查所有shard節(jié)點(diǎn)上的chunk的情況舌涨,自動(dòng)做chunk遷移糯耍。
什么時(shí)候工作?
1囊嘉、自動(dòng)運(yùn)行温技,會(huì)檢測(cè)系統(tǒng)不繁忙的時(shí)候做遷移
2、在做節(jié)點(diǎn)刪除的時(shí)候扭粱,立即開始遷移工作
3舵鳞、balancer只能在預(yù)設(shè)定的時(shí)間窗口內(nèi)運(yùn)行

有需要時(shí)可以關(guān)閉和開啟blancer(備份的時(shí)候)
mongos> sh.stopBalancer()
mongos> sh.startBalancer()

7.8.2 自定義 自動(dòng)平衡進(jìn)行的時(shí)間段

https://docs.mongodb.com/manual/tutorial/manage-sharded-cluster-balancer/#schedule-the-balancing-window
// connect to mongos

use config
sh.setBalancerState( true )
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "3:00", stop : "5:00" } } }, true )

sh.getBalancerWindow()
sh.status()

關(guān)于集合的balancer(了解下)
關(guān)閉某個(gè)集合的balance
sh.disableBalancing("students.grades")
打開某個(gè)集合的balancer
sh.enableBalancing("students.grades")
確定某個(gè)集合的balance是開啟或者關(guān)閉
db.getSiblingDB("config").collections.findOne({_id : "students.grades"}).noBalance;

說明:

  1. 業(yè)務(wù)業(yè)務(wù)空閑期
  2. 避開備份時(shí)間窗口

8. 備份恢復(fù)

8.1 備份恢復(fù)工具介紹:

(1)**   mongoexport/mongoimport
(2)***** mongodump/mongorestore

8.2 備份工具區(qū)別在哪里?

應(yīng)用場(chǎng)景總結(jié):
mongoexport/mongoimport:json csv 
1琢蛤、異構(gòu)平臺(tái)遷移  mysql  <---> mongodb
2蜓堕、同平臺(tái),跨大版本:mongodb 2  ----> mongodb 3
mongodump/mongorestore
日常備份恢復(fù)時(shí)使用.

8.3 導(dǎo)出工具mongoexport

mongoexport具體用法如下所示:
$ mongoexport --help  
參數(shù)說明:
-h:指明數(shù)據(jù)庫(kù)宿主機(jī)的IP
-u:指明數(shù)據(jù)庫(kù)的用戶名
-p:指明數(shù)據(jù)庫(kù)的密碼
-d:指明數(shù)據(jù)庫(kù)的名字
-c:指明collection的名字
-f:指明要導(dǎo)出那些列
-o:指明到要導(dǎo)出的文件名
-q:指明導(dǎo)出數(shù)據(jù)的過濾條件
--authenticationDatabase admin

1.單表備份至json格式
mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log -o /mongodb/log.json

注:備份文件的名字可以自定義博其,默認(rèn)導(dǎo)出了JSON格式的數(shù)據(jù)套才。

2\. 單表備份至csv格式
如果我們需要導(dǎo)出CSV格式的數(shù)據(jù),則需要使用----type=csv參數(shù):

 mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -c log --type=csv -f uid,name,age,date  -o /mongodb/log.csv

8.4 導(dǎo)入工具mongoimport

$ mongoimport --help
參數(shù)說明:
-h:指明數(shù)據(jù)庫(kù)宿主機(jī)的IP
-u:指明數(shù)據(jù)庫(kù)的用戶名
-p:指明數(shù)據(jù)庫(kù)的密碼
-d:指明數(shù)據(jù)庫(kù)的名字
-c:指明collection的名字
-f:指明要導(dǎo)入那些列
-j, --numInsertionWorkers=<number>  number of insert operations to run concurrently                                                  (defaults to 1)
//并行
數(shù)據(jù)恢復(fù):
1.恢復(fù)json格式表數(shù)據(jù)到log1
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log1 /mongodb/log.json
強(qiáng)制導(dǎo)入()危險(xiǎn):
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log --drop /mongodb/log.json
2.恢復(fù)csv格式的文件到log2
上面演示的是導(dǎo)入JSON格式的文件中的內(nèi)容慕淡,如果要導(dǎo)入CSV格式文件中的內(nèi)容背伴,則需要通過--type參數(shù)指定導(dǎo)入格式,具體如下所示:
錯(cuò)誤的恢復(fù)

注意:
(1)csv格式的文件頭行峰髓,有列名字
mongoimport   -uroot -proot123 --port 27017 --authenticationDatabase admin   -d oldboy -c log2 --type=csv --headerline --file  /mongodb/log.csv

(2)csv格式的文件頭行傻寂,沒有列名字
mongoimport   -uroot -proot123 --port 27017 --authenticationDatabase admin   -d oldboy -c log3 --type=csv -f id,name,age,date --file  /mongodb/log.csv
--headerline:指明第一行是列名,不需要導(dǎo)入儿普。

8.5 異構(gòu)平臺(tái)遷移案例

mysql   -----> mongodb  
world數(shù)據(jù)庫(kù)下city表進(jìn)行導(dǎo)出崎逃,導(dǎo)入到mongodb

(1)mysql開啟安全路徑
vim /etc/my.cnf   --->添加以下配置
secure-file-priv=/tmp

--重啟數(shù)據(jù)庫(kù)生效
/etc/init.d/mysqld restart

(2)導(dǎo)出mysql的city表數(shù)據(jù)
source /root/world.sql

select * from world.city into outfile '/tmp/city1.csv' fields terminated by ',';

(3)處理備份文件
desc world.city
  ID          | int(11)  | NO   | PRI | NULL    | auto_increment |
| Name        | char(35) | NO   |     |         |                |
| CountryCode | char(3)  | NO   | MUL |         |                |
| District    | char(20) | NO   |     |         |                |
| Population

vim /tmp/city.csv   ----> 添加第一行列名信息

ID,Name,CountryCode,District,Population

(4)在mongodb中導(dǎo)入備份
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d world  -c city --type=csv -f ID,Name,CountryCode,District,Population --file  /tmp/city1.csv

use world
db.city.find({CountryCode:"CHN"});

-------------
world共100張表,全部遷移到mongodb

select table_name ,group_concat(column_name) from columns where table_schema='world' group by table_name;

select * from world.city into outfile '/tmp/world_city.csv' fields terminated by ',';

select concat("select * from ",table_schema,".",table_name ," into outfile '/tmp/",table_schema,"_",table_name,".csv' fields terminated by ',';")
from information_schema.tables where table_schema ='world';

導(dǎo)入:
提示眉孩,使用infomation_schema.columns + information_schema.tables

mysql導(dǎo)出csv:
select * from test_info   
into outfile '/tmp/test.csv'   
fields terminated by ','    ------字段間以,號(hào)分隔
optionally enclosed by '"'   ------字段用"號(hào)括起
escaped by '"'           ------字段中使用的轉(zhuǎn)義符為"
lines terminated by '\r\n';  ------行以\r\n結(jié)束

mysql導(dǎo)入csv:
load data infile '/tmp/test.csv'   
into table test_info    
fields terminated by ','  
optionally enclosed by '"' 
escaped by '"'   
lines terminated by '\r\n'; 

8.6 mongodump和mongorestore

8.6.1介紹

mongodump能夠在Mongodb運(yùn)行時(shí)進(jìn)行備份个绍,它的工作原理是對(duì)運(yùn)行的Mongodb做查詢勒葱,然后將所有查到的文檔寫入磁盤。
但是存在的問題時(shí)使用mongodump產(chǎn)生的備份不一定是數(shù)據(jù)庫(kù)的實(shí)時(shí)快照巴柿,如果我們?cè)趥浞輹r(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行了寫入操作凛虽,
則備份出來的文件可能不完全和Mongodb實(shí)時(shí)數(shù)據(jù)相等。另外在備份時(shí)可能會(huì)對(duì)其它客戶端性能產(chǎn)生不利的影響广恢。

8.6.2 mongodump用法如下:

$ mongodump --help
參數(shù)說明:
-h:指明數(shù)據(jù)庫(kù)宿主機(jī)的IP
-u:指明數(shù)據(jù)庫(kù)的用戶名
-p:指明數(shù)據(jù)庫(kù)的密碼
-d:指明數(shù)據(jù)庫(kù)的名字
-c:指明collection的名字
-o:指明到要導(dǎo)出的文件名
-q:指明導(dǎo)出數(shù)據(jù)的過濾條件
-j, --numParallelCollections=  number of collections to dump in parallel (4 by default)
--oplog  備份的同時(shí)備份oplog

8.6.3 mongodump和mongorestore基本使用

全庫(kù)備份

mkdir /mongodb/backup
mongodump  -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup

備份world庫(kù)

$ mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -o /mongodb/backup/

備份oldboy庫(kù)下的log集合

$ mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log -o /mongodb/backup/

壓縮備份

$ mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldguo -o /mongodb/backup/ --gzip
 mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup/ --gzip
$ mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -d app -c vast -o /mongodb/backup/ --gzip

全庫(kù)恢復(fù)(--drop最好不要是使用,是刪除之前的庫(kù))

$ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin --drop /mongodb/backup/full --gzip

恢復(fù)world庫(kù)

$ mongorestore   -uroot -proot123 --port 27017 --authenticationDatabase admin -d world  /mongodb/backup/world

恢復(fù)oldguo庫(kù)下的t1集合

[mongod@db03 oldboy]$ mongorestore   -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -c t1  --gzip  /mongodb/backup.bak/oldboy/log1.bson.gz 

drop表示恢復(fù)的時(shí)候把之前的集合drop掉(危險(xiǎn))

$ mongorestore  -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy --drop  /mongodb/backup/oldboy

8.7 mongodump和mongorestore高級(jí)企業(yè)應(yīng)用(--oplog)

注意:這是replica set或者master/slave模式專用
--oplog
 use oplog for taking a point-in-time snapshot

8.7.1 oplog介紹

在replica set中oplog是一個(gè)定容集合(capped collection)凯旋,它的默認(rèn)大小是磁盤空間的5%(可以通過--oplogSizeMB參數(shù)修改).

位于local庫(kù)的db.oplog.rs,有興趣可以看看里面到底有些什么內(nèi)容钉迷。
其中記錄的是整個(gè)mongod實(shí)例一段時(shí)間內(nèi)數(shù)據(jù)庫(kù)的所有變更(插入/更新/刪除)操作至非。
當(dāng)空間用完時(shí)新記錄自動(dòng)覆蓋最老的記錄。
其覆蓋范圍被稱作oplog時(shí)間窗口糠聪。需要注意的是荒椭,因?yàn)閛plog是一個(gè)定容集合,
所以時(shí)間窗口能覆蓋的范圍會(huì)因?yàn)槟銌挝粫r(shí)間內(nèi)的更新次數(shù)不同而變化舰蟆。
想要查看當(dāng)前的oplog時(shí)間窗口預(yù)計(jì)值趣惠,可以使用以下命令:

 mongod -f /mongodb/28017/conf/mongod.conf 
 mongod -f /mongodb/28018/conf/mongod.conf 
 mongod -f /mongodb/28019/conf/mongod.conf 
 mongod -f /mongodb/28020/conf/mongod.conf 

 use local 
 db.oplog.rs.find().pretty()
"ts" : Timestamp(1553597844, 1),           #定位唯一操作,在當(dāng)前秒鐘的第幾個(gè)操作(相當(dāng)于GTID)
"op" : "n"                                 #操作類型
"o"  :                                     #具體的操作

"i": insert
"u": update
"d": delete
"c": db cmd

test:PRIMARY> rs.printReplicationInfo()
configured oplog size:   1561.5615234375MB <--集合大小
log length start to end: 423849secs (117.74hrs) <--預(yù)計(jì)窗口覆蓋時(shí)間
oplog first event time:  Wed Sep 09 2015 17:39:50 GMT+0800 (CST)
oplog last event time:   Mon Sep 14 2015 15:23:59 GMT+0800 (CST)
now:                     Mon Sep 14 2015 16:37:30 GMT+0800 (CST)

8.7.2 oplog企業(yè)級(jí)應(yīng)用

(1)實(shí)現(xiàn)熱備,在備份時(shí)使用--oplog選項(xiàng)
注:為了演示效果我們?cè)趥浞葸^程身害,模擬數(shù)據(jù)插入
(2)準(zhǔn)備測(cè)試數(shù)據(jù)
[mongod@db01 conf]$ mongo --port 28018
use oldboy
for(var i = 1 ;i < 100; i++) {
    db.foo.insert({a:i});
}

my_repl:PRIMARY> db.oplog.rs.find({"op":"i"}).pretty()

oplog 配合mongodump實(shí)現(xiàn)熱備
mongodump --port 28018 --oplog -o /mongodb/backup
作用介紹:--oplog 會(huì)記錄備份過程中的數(shù)據(jù)變化味悄。會(huì)以oplog.bson保存下來
恢復(fù)
mongorestore  --port 28018 --oplogReplay /mongodb/backup

8.8 oplog高級(jí)應(yīng)用

背景:每天0點(diǎn)全備,oplog恢復(fù)窗口為48小時(shí)
某天塌鸯,上午10點(diǎn)world.city 業(yè)務(wù)表被誤刪除侍瑟。
恢復(fù)思路:
    0、停應(yīng)用
    2界赔、找測(cè)試庫(kù)
    3丢习、恢復(fù)昨天晚上全備
    4、截取全備之后到world.city誤刪除時(shí)間點(diǎn)的oplog淮悼,并恢復(fù)到測(cè)試庫(kù)
    5、將誤刪除表導(dǎo)出揽思,恢復(fù)到生產(chǎn)庫(kù)

恢復(fù)步驟:
模擬故障環(huán)境:

1袜腥、全備數(shù)據(jù)庫(kù)
模擬原始數(shù)據(jù)

mongo --port 28017
use wo
for(var i = 1 ;i < 20; i++) {
    db.ci.insert({a: i});
}

全備:
rm -rf /mongodb/backup/*
mongodump --port 28018 --oplog -o /mongodb/backup

--oplog功能:在備份同時(shí),將備份過程中產(chǎn)生的日志進(jìn)行備份
文件必須存放在/mongodb/backup下,自動(dòng)命令為oplog.bson

再次模擬數(shù)據(jù)
db.ci1.insert({id:1})
db.ci2.insert({id:2})

2、上午10點(diǎn):刪除wo庫(kù)下的ci表
10:00時(shí)刻,誤刪除
db.ci.drop()
show tables;

3钉汗、備份現(xiàn)有的oplog.rs表
mongodump --port 28018 -d local -c oplog.rs  -o /mongodb/backup

4羹令、截取oplog并恢復(fù)到drop之前的位置
更合理的方法:登陸到原數(shù)據(jù)庫(kù)
[mongod@db03 local]$ mongo --port 28018
my_repl:PRIMARY> use local
db.oplog.rs.find({op:"c"}).pretty();

{
    "ts" : Timestamp(1553659908, 1),
    "t" : NumberLong(2),
    "h" : NumberLong("-7439981700218302504"),
    "v" : 2,
    "op" : "c",
    "ns" : "wo.$cmd",
    "ui" : UUID("db70fa45-edde-4945-ade3-747224745725"),
    "wall" : ISODate("2019-03-27T04:11:48.890Z"),
    "o" : {
        "drop" : "ci"
    }
}

獲取到oplog誤刪除時(shí)間點(diǎn)位置:
"ts" : Timestamp(1553659908, 1)

 5、恢復(fù)備份+應(yīng)用oplog
[mongod@db03 backup]$ cd /mongodb/backup/local/
[mongod@db03 local]$ ls
oplog.rs.bson  oplog.rs.metadata.json
[mongod@db03 local]$ cp oplog.rs.bson ../oplog.bson 
rm -rf /mongodb/backup/local/

mongorestore --port 38021  --oplogReplay --oplogLimit "1553659908:1"  --drop   /mongodb/backup/

8.9 分片集群的備份思路(了解)

1损痰、你要備份什么福侈?
config server
shard 節(jié)點(diǎn)

單獨(dú)進(jìn)行備份
2、備份有什么困難和問題
(1)chunk遷移的問題
    人為控制在備份的時(shí)候卢未,避開遷移的時(shí)間窗口
(2)shard節(jié)點(diǎn)之間的數(shù)據(jù)不在同一時(shí)間點(diǎn)肪凛。
    選業(yè)務(wù)量較少的時(shí)候       
  (3)   手工備份
         1. 停balancer
         2. 從configserver和所有shard節(jié)點(diǎn),備份時(shí),臨時(shí)摘下來
         3. 備份完成后再把節(jié)點(diǎn)加回去
Ops Manager 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末堰汉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子伟墙,更是在濱河造成了極大的恐慌翘鸭,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戳葵,死亡現(xiàn)場(chǎng)離奇詭異就乓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拱烁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門生蚁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人戏自,你說我怎么就攤上這事守伸。” “怎么了浦妄?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵尼摹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我剂娄,道長(zhǎng)蠢涝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任阅懦,我火速辦了婚禮和二,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耳胎。我一直安慰自己惯吕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布怕午。 她就那樣靜靜地躺著废登,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郁惜。 梳的紋絲不亂的頭發(fā)上堡距,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音兆蕉,去河邊找鬼羽戒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛虎韵,可吹牛的內(nèi)容都是我干的易稠。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼包蓝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼驶社!你這毒婦竟也來了企量?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤衬吆,失蹤者是張志新(化名)和其女友劉穎梁钾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逊抡,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姆泻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冒嫡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拇勃。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖孝凌,靈堂內(nèi)的尸體忽然破棺而出方咆,到底是詐尸還是另有隱情,我是刑警寧澤蟀架,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布瓣赂,位于F島的核電站,受9級(jí)特大地震影響片拍,放射性物質(zhì)發(fā)生泄漏煌集。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一捌省、第九天 我趴在偏房一處隱蔽的房頂上張望苫纤。 院中可真熱鬧,春花似錦纲缓、人聲如沸卷拘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)栗弟。三九已至,卻和暖如春褂策,著一層夾襖步出監(jiān)牢的瞬間横腿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工斤寂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人揪惦。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓遍搞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親器腋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子溪猿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容