EOS智能合約開發(十九)Ubuntu 安裝 Mongodb及問題彙總

上篇文章,我們講到了,使用EOS保存數據使用MongoDB插件,那麼我們今天看看MongoDB是如何安裝的。我參考了MongoDB官方文檔,介紹兩種方式安裝,供大家參考。
方式一:從apt-get安裝

  1. 添加mongodb簽名到APT
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
    
  2. 創建/etc/apt/sources.list.d/mongodb-org-4.0.list文件並寫入命令
    echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
    
  3. 更新軟件源列表
    sudo apt-get update
    
  4. 安裝mongodb(默認是安裝穩定版)
    sudo apt-get install -y mongodb-org
    
  5. 或者安裝指定版本:
    sudo apt-get install -y mongodb-org=4.0.1 mongodb-org-server=4.0.1 mongodb-org-shell=4.0.1 mongodb-org-mongos=4.0.1 mongodb-org-tools=4.0.1
    

方式二:從 .tar.gz 二進制包安裝
6. 下載最新安裝包
官網下載地址:https://www.mongodb.com/download-center?jmp=nav#community

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1404-3.2.9.tgz
  1. 解壓
tar -zxvf mongodb-linux-x86_64-ubuntu1404-3.2.9.tgz
  1. 重命名並移動到安裝目錄(可自定義)

    sudo mv mongodb-linux-x86_64-ubuntu1404-3.2.9/ /usr/local/mongodb   # 將解壓包拷貝到指定目錄進行安裝
    
  2. 創建 mongo 的數據目錄
    MongoDB 默認的數據目錄是 /data/db/ ,就直接使用默認的。

    sudo mkdir -p /data/db    #創建數據存儲目錄
    sudo chmod 755 /data/*    #賦予目錄權限
    
  3. 啓動

    mongod    #啓動服務端
    mongo    #啓動客戶端
    

配置MongoDB
控制的配置文件在:/etc/mongodb.conf
控制腳本在:/etc/init.d/mongodb
MongoDB實例會把數據存放在:/var/lib/mongodb
日誌存放在:/var/log/mongodb
我們需要限制Mongodb使用內存大小,如下配置:
打開/etc/mongodb.conf
增加如下:

...
storage:
  dbPath: /data/mongodb
  journal:
    enabled: true
storage :
   wiredTiger :
      engineConfig :
         cacheSizeGB : 4
...

默認由mongodb用戶運行。
如果顯示目錄不存在的話,需要運行下列命令指定文件夾:

```
mongod --dbpath /var/lib/mongodb
```

如果想要切換用戶運行MongoDB的話,需要設置 /var/lib/mongodb 、 /var/log/mongodb兩個目錄的權限
啓動、停止、重啓

```
sudo service mongodb start
sudo service mongodb stop
sudo service mongodb restart
```

通過mongodb shell測試安裝結果

```
mongodb
```

卸載MongoDB
停止MongoDB

```
sudo service mongod stop
```

移除包文件

```
sudo apt-get purge mongodb-org*
```

刪除存放數據的目錄

```
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
```

曾經我們要定義一個系統啓動時自啓動服務的方式是在/etc/init.d 目錄下寫一個腳本來執行,現在在ubuntu的服務模式下,我們可以丟棄那種方式,服務模式的命令是service,而現在的ubuntu系統推崇使用的systemctl命令,他倆的使用方法的區別就在於參數的順序。

  • 定義一個配置文件mongod.conf
  • 定義一個服務文件,放置在/etc/systemd/system/

參考文檔
MongoDB官方文檔:https://docs.mongodb.com/getting-started/shell/tutorial/install-mongodb-on-ubuntu/
Ubuntu下MongoDB 安裝教程及簡單操作:http://www.linuxidc.com/Linux/2016-07/133254.htm

如果我們在啓動mongoDb過程中發現如下問題:

Failed to start mongod.service: Unit not found

解決辦法如下:
服務模式啓動mongodb
我們也可以使用ubuntu系統的服務模式。
1、創建配置文件:

sudo vim   /etc/systemd/system/mongodb.service

2、在裏面追加文本:

[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
 
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
 
[Install]
WantedBy=multi-user.target

3、保存,退出
4、啓動服務

sudo systemctl start mongodb
sudo systemctl status mongodb

顯示如下:

eos@eos-VirtualBox:~$ sudo systemctl start mongodb
eos@eos-VirtualBox:~$ sudo systemctl status mongodb
● mongodb.service - High-performance, schema-free document-oriented database
   Loaded: loaded (/etc/systemd/system/mongodb.service; disabled; vendor preset: enabled)
   Active: active (running) since 二 2019-06-11 11:03:32 CST; 13s ago
 Main PID: 1610 (mongod)
   CGroup: /system.slice/mongodb.service
           └─1610 /usr/bin/mongod --quiet --config /etc/mongod.conf

6月 11 11:03:32 eos-VirtualBox systemd[1]: Started High-performance, schema-free document-oriented database.

mongoDB遇到的一些問題
service mongodb start 失敗

status顯示failed

eos@eos-VirtualBox~ # service mongod start
eos@eos-VirtualBox~ # service mongod status
● mongod.service - High-performance, schema-free document-oriented database
   Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2017-08-15 12:03:51 CEST; 2s ago
     Docs: https://docs.mongodb.org/manual
  Process: 26942 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=100)
 Main PID: 26942 (code=exited, status=100)
 
Aug 15 12:03:50 machine systemd[1]: Started High-performance, schema-free document-oriented database.
Aug 15 12:03:51 machine systemd[1]: mongod.service: Main process exited, code=exited, status=100/n/a
Aug 15 12:03:51 machine systemd[1]: mongod.service: Unit entered failed state.
Aug 15 12:03:51 machine systemd[1]: mongod.service: Failed with result 'exit-code'.

修復方法:

cd 到/var/lib/mongodb 文件夾下(我也不知道爲什麼非要cd到這個文件夾下,但是事實證明需要到這個目錄下才行)

chown -R mongodb:mongodb /var/lib/mongodb

然後重啓mongodb服務。

修改mongodb數據文件
修改配置文件

sudo vim /etc/mongo.conf

修改如下配置

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  #dbPath: /var/lib/mongodb
  dbPath:  /media/eos/hdd/mongodb  //修改爲指定位置
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  #path: /var/log/mongodb/mongod.log
  path: /media/eos/hdd/mongodblog/mongod.log //修改爲指定位置

首先用mongodb啓動mongo 指定數據庫文件後,帶上–repair參數

mongodb --dbpath /media/eos/hdd/mongodb  --repair

顯示如下:

eos@eos-B250M-D2V:/media/eos/hdd$ sudo mongod -dbpath /media/eos/hdd/mongodb --repair
2019-08-16T14:58:51.211+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten] MongoDB starting : pid=21206 port=27017 dbpath=/media/eos/hdd/mongodb 64-bit host=eos-B250M-D2V
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten] db version v4.0.1
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten] git version: 54f1582fc6eb01de4d4c42f26fc133e623f065fb
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten] modules: none
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten] build environment:
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten]     distmod: ubuntu1604
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten]     distarch: x86_64
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2019-08-16T14:58:51.215+0800 I CONTROL  [initandlisten] options: { repair: true, storage: { dbPath: "/media/eos/hdd/mongodb" } }
2019-08-16T14:58:51.216+0800 I STORAGE  [initandlisten] Detected data files in /media/eos/hdd/mongodb created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2019-08-16T14:58:51.216+0800 I STORAGE  [initandlisten]
2019-08-16T14:58:51.216+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine

恭喜你,安裝成功。可以,配置節點連接EOS了。

2018年11月10整理於深圳
2019年06月11修改與深圳

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章