Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

25.5. CouchDB 節點

整個 Hyperledger Fabric 技術棧中只有這個 CouchDB 是個外來戶,看到 CouchDB 我就非常興奮,這是一個NoSQL資料庫(它與MongoDB十分類似),所以CouchDB 100%可以獨立運行,且最容易分離。

CouchDB 在這裡有兩個方案可以選擇。

理論兩種方案對實際結果沒有什麼區別,只需提供IP地址,用戶名與密碼供其他節點訪問即可。但實際我們看到 Hyperledger Fabric 使用的鏡像是 hyperledger/fabric-couchdb 不清楚是否有修改過 CouchDB 資料庫。

如果你對 Docker 比較熟悉就採用 Docker 方案。如果不熟悉就採用本地安裝方式。總之選擇一種你能Hold住(掌控)的方案,一旦出現故障,你能第一時間排查並處理。

25.5.1. 安裝 Docker 鏡像

			
docker pull hyperledger/fabric-couchdb:x86_64-1.1.0
docker tag hyperledger/fabric-couchdb:x86_64-1.1.0 hyperledger/fabric-couchdb
			
			

25.5.2. 安裝 CouchDB

下面是 Docker 方案

			
[root@localhost netkiller]# vim docker-compose-couchdb.yml
		
version: '3'

networks:
  basic:

services:
  couchdb:
    container_name: couchdb
    image: hyperledger/fabric-couchdb
    # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password
    # for CouchDB.  This will prevent CouchDB from operating in an "Admin Party" mode.
    environment:
      - COUCHDB_USER=admin
      - COUCHDB_PASSWORD=passw0rd
    ports:
      - 172.16.0.17:5984:5984
    networks:
      - basic
			
			

25.5.3. 啟動 CouchDB

啟動 Docker 容器

			
docker-compose -f docker-compose-couchdb.yml up -d		
			
			

訪問CouchDB管理界面,http://172.16.0.17:5984/_utils/ 請使用上面設置的密碼進入。若想進入到容器內部可以使用下面命令:

			
docker-compose -f docker-compose-couchdb.yml exec couchdb bash	
			
			

至此 CouchDB 節點部署完畢。

25.5.4. 備份與恢復 CouchDB

既然是運維區塊鏈,對於運維工作我們最關心的就是如何備份數據,在出現故障的時候恢復數據。

			
npm install --save couchdb-backup-restore			
			
			
			
var cbr = require('couchdb-backup-restore');
 
var config = {credentials: 'http://localhost:5984'};
 
function done(err) {
  if (err) {
    return console.error(err);
  }
  console.log('all done!');
}
 
// backup 
cbr.backup(config, done).pipe(fs.createWriteStream('./db-backup.tar.gz'))

// restore 
fs.createReadStream('./db-backup.tar.gz').pipe(cbr.restore(config, done));