MongoDB mongoshake 遷移分片到複製集合
來源:AustinDatabases
Mongoshake 是阿里雲自研的開源工具,實現Mongodb 資料庫之間的資料同步,資料災備,資料多活,分庫分表,版本升級無間斷。
其中需要注意的一些事項
mongo_urls = mongodb://username:password@10.1.1.1:1001/admin?readPreference=secondary
filter.pass.special.db = admin 這裡主要指定的是一些特殊情況下,針對 admin system.views , mongoshake config 等資料庫在預設不遷移的情況下,因為某些問題,需要進行資料遷移的情況
filter.ddl_enable = false 這個選項是在複製中不對DDL的操作進行復制,所以資料遷移中為避免一些問題,可以使用false 而資料同步的情況就需要考慮開啟這個設定。
13 關於併發
full_sync.reader.collection_parallel =6 這個引數預設為 6 為一次最大併發拉取的表的數目,拉取一次過多,會導致IOPS 升高影響業務。
full_sync.reader.write_document_parallel = 8 ,對於一個表進行拉取的過程中,產生多少執行緒,來同時進行資料的拉取,這裡注意要有主鍵。
full_sync.reader.document_batch_size 一次將寫入多少檔案進行聚合 128 表示一次寫入 128個文件進行聚合 預設值為128
full_sync.executor.insert_on_dup_update = false
在目的庫存在同樣的資料庫和collation 是否要進行insert to update的轉換
use config
while( sh.isBalancerRunning() ) {
print("waiting...");
sleep(1000);
}
sh.stopBalancer()
sh.setBalancerState(true)
下面就將整體的工作情況進行一個流程化的記錄
1 登入到分片的mongodb 中,確認當前的工作狀態
這裡可以看到,balancer 是開啟的狀態,當前並未執行
[mongos] admin> sh.status()
shardingVersion
{ _id: 1, clusterId: ObjectId('5e1bdb2dbd7ea0ac43') }
---
shards
[
{
_id: 'd-2ze2fde064',
host: 'mgset-21218075/7:3044',
state: 1
},
{
_id: 'd-2ze77e7e4e38ad64',
host: 'mgset-21218077/',
state: 1
}
]
---
active mongoses
[ { '4.2.1': 1 }, { '4.2.10': 1 } ]
---
autosplit
{ 'Currently enabled': 'yes' }
---
balancer
{
'Currently enabled': 'yes',
'Currently running': 'no',
'Failed balancer rounds in last 5 attempts': 0,
'Migration Results for the last 24 hours': { '11': 'Success' }
}
---
databases
[
{
database: { _id: 'config', primary: 'config', partitioned: true },
collections: {
'config.system.sessions': {
shardKey: { _id: 1 },
unique: false,
balancing: true,
chunkMetadata: [
{ shard: 'd-2ze2fde06cf92d74', nChunks: 512 },
{ shard: 'd-2ze77e7e4e38ad64', nChunks: 512 }
],
chunks: [
'too many chunks to print, use verbose if you want to force print'
],
tags: []
}
}
},
{
database: {
_id: 'report',
primary: 'd-2ze77e7e4e38ad64',
partitioned: true,
version: {
uuid: UUID('a3efc46e-b05f-4557-af1b-ddfeb212dd5e'),
lastMod: 1
}
},
collections: {
'report.request_record_new': {
shardKey: { requestId: 'hashed' },
unique: false,
balancing: true,
chunkMetadata: [
{ shard: 'd-2ze2fde06cf92d74', nChunks: 42853 },
{ shard: 'd-2ze77e7e4e38ad64', nChunks: 42852 }
],
chunks: [
'too many chunks to print, use verbose if you want to force print'
],
tags: []
}
}
}
]
[mongos] config> sh.stopBalancer()
{
ok: 1,
operationTime: Timestamp({ t: 1701137103, i: 45 }),
'$clusterTime': {
clusterTime: Timestamp({ t: 1701137103, i: 45 }),
signature: {
hash: Binary.createFromBase64('9RIHAXxDGxhwvcAVNQw5N0/3w9g=', 0),
keyId: Long('7253280536863440980')
active mongoses
[ { '4.2.1': 1 }, { '4.2.10': 1 } ]
---
autosplit
{ 'Currently enabled': 'no' }
---
balancer
{
'Currently running': 'no',
'Currently enabled': 'no',
vi collector.conf
conf.version = 10
id = mongoshake
master_quorum = false
full_sync.http_port = 9190
incr_sync.http_port = 9190
system_profile_port = 820
log.level = info
log.dir = /mongoshake
log.file = collector.log
log.flush = false
sync_mode = all
mongo_urls = mongodb://mongosd:g_cs_1127@d-2183.mongodb.com:3797;mongodb://mongos:fe1127@d64952.mongodb.com:3797
mongo_cs_url = mongodb://mongocs:feg_cs_1127@ddee63.mongodb.rdscom:3719/admin
mongo_s_url = mongodb://ot9:%301%2318a4.mong.com:3719/admin
tunnel = direct
tunnel.address = mongodb://otg:B3X@dds-2ze220fb41051a641.moncom:377,1a642.mongodbs.com:377/admin?replicaSet=mset-73
tunnel.message = raw
tunnel.kafka.partition_number = 1
mongo_connect_mode = primary
1 在進行collectiion.conf 檔案的編寫中,分片作為源的情況下,需要注意需要填寫三個地址 1.1 普通連線分片的地址 1.2 config server 的primary的地址 1.3 mongos 的地址,並且注意urls 中的地址的寫法必須是每個sharding的primary的主地址,並且以 ;分號進行分割,有幾個sharding 就的寫幾個,差一個,就會丟資料。
剩下的就是啟動mongoshake 來同步資料,同步的速度比較快,尤其在開啟多執行緒的基礎上,預設是 8個,如果你的系統強悍,完全可以到16 24 只要IOPS 和CPU 可以支援的情況下。
2 在執行目錄執行 collector.linux -conf=collector.conf
在進行工作中遇到的一些問題,與相關的解答,當遇到oplog 無法進行初始化的錯誤時,同時你又是分片的情況下,請參看下面的回答。
Q: How to solve the "Oplog Tailer initialize failed: no oplog ns in mongo" error?
A: This is usually a problem with insufficient
account permissions, so, please check your permission of oplog table. If
the source is sharding, the account should be added into each shard
because there is no local
database in mongos
. When source is sharding, the mongo_urls
should be the shards address split by semicolon(;) like: mongo_urls: mongodb://user1:passwd1@10.1.1.1:20011,10.1.1.2:20112;mongodb://user2:passwd2@10.1.2.1:20011,10.1.2.2:20112
.
Since v2.0.6, MongoShake doesn't throw this error when sync mode is full sync(sync_mode = document
).
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2998115/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mongodb複製+分片MongoDB
- MongoDB遷移工具MongoshakeMongoDB
- 【Mongodb】分片加複製集MongoDB
- 【Mongodb】往分片複製集新增複製成員MongoDB
- 【Mongodb】分片複製集環境新增新的分片MongoDB
- mongodb 分片叢集建立分片集合MongoDB
- mongodb分片物理搬遷方案MongoDB
- mysql檔案複製遷移MySql
- mongodb複製集(replica sets)+分片(sharding)環境搭建MongoDB
- 02 . MongoDB複製集,分片集,備份與恢復MongoDB
- Mongodb主從複製/ 副本集/分片叢集介紹MongoDB
- MySQL Cluster 與 MongoDB 複製群集分片設計及原理MySqlMongoDB
- MongoDB叢集設定集合分片生效及檢視集合分片情況MongoDB
- Azure Storage 利用 azCopy 複製遷移資料
- MongoDB在不同主機間複製資料庫和集合MongoDB資料庫
- mongodb複製集MongoDB
- MongoDB分片MongoDB
- 遷移sqlserver資料到MongoDbSQLServerMongoDB
- mongoDB研究筆記:複製集故障轉移機制MongoDB筆記
- MongoDB 搭建複製集MongoDB
- MongoDB複製集原理MongoDB
- MongoDB 複製機制MongoDB
- MongoDB主從複製MongoDB
- mongodb複製集搭建MongoDB
- 【mongodb】mongodb 實現主從複製MongoDB
- 利用Mongodb的複製集搭建高可用分片,Replica Sets + Sharding的搭建過程MongoDB
- MongoDB 分片管理MongoDB
- MongoDB之分片MongoDB
- mongodb分片搭建MongoDB
- mongodb分片balanceMongoDB
- MongoDB 資料遷移和同步MongoDB
- 【Mongodb】Sharding 手工遷移chunkMongoDB
- MongoDB分片叢集新增分片(自用)MongoDB
- MongoDB學習4:MongoDB複製集機制和原理,搭建複製集MongoDB
- 在 TKE 中使用 Velero 遷移複製叢集資源
- 中關於虛擬機器複製與遷移(中)虛擬機
- 【Mongodb】 可複製集搭建MongoDB
- 深入淺出MongoDB複製MongoDB