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遷移工具MongoshakeMongoDB
- 【Mongodb】往分片複製集新增複製成員MongoDB
- 【Mongodb】分片複製集環境新增新的分片MongoDB
- mongodb 分片叢集建立分片集合MongoDB
- mongodb分片物理搬遷方案MongoDB
- mongodb複製集(replica sets)+分片(sharding)環境搭建MongoDB
- mysql檔案複製遷移MySql
- 02 . MongoDB複製集,分片集,備份與恢復MongoDB
- Azure Storage 利用 azCopy 複製遷移資料
- MongoDB在不同主機間複製資料庫和集合MongoDB資料庫
- mongodb複製集MongoDB
- 遷移sqlserver資料到MongoDbSQLServerMongoDB
- MongoDB 搭建複製集MongoDB
- MongoDB 複製機制MongoDB
- MongoDB 分片管理MongoDB
- 在 TKE 中使用 Velero 遷移複製叢集資源
- MongoDB學習4:MongoDB複製集機制和原理,搭建複製集MongoDB
- 【Mongodb】 可複製集搭建MongoDB
- mongodb之shard分片MongoDB
- MongoDB 重新同步複製整合員MongoDB
- MongoDB學習之複製集MongoDB
- MongoDB搭建Replica Set複製集MongoDB
- 搭建MongoDB分片叢集MongoDB
- MongoDB 分片叢集搭建MongoDB
- MongoDB 資料遷移 備份 匯入(自用)MongoDB
- mongodb資料遷移2種方式比較MongoDB
- mongodb6.0.13 搭建複製集PSAMongoDB
- MongoDB複製集資料同步流程MongoDB
- 【Mongo】單節點升級為複製集再升級為分片加複製集Go
- mongodb 分片叢集設定MongoDB
- MongoDB分片鍵選擇指南MongoDB
- MongoDB分片叢集常用操作MongoDB
- 【Mongo】mongo分片加複製集的備份恢復Go
- 達夢資料庫遷移資料/複製表/匯入匯出2資料庫
- mongodb複製集(replica set)搭建及管理MongoDB
- 遷移 Express 到函式計算Express函式
- 遷移WSL Ubuntu到其他目錄Ubuntu
- 使用GoldenGate 遷移Oracle到PostgreSQL/LightDBGoOracleSQL