單機mongo安裝和權限問題解決

本文記錄了在centos7.3上安裝mongodb3.4,配置優化,設置權限,并解決了修改數據目錄后,由文件權限導致的mongo啟動問題。

一:mongo安裝

1、創建yum安裝源
創建 /etc/yum.repos.d/mongodb-org-3.4.repo

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

2、yum安裝

sudo yum install -y mongodb-org

參考文檔:centos 安裝mongo

3、rpm安裝
有時官方的鏡像訪問特別緩慢,可以通過阿里云的mongo rpm方式下載,然后手動安裝。
安裝過程:下載rpm包,總共4個rpm包,選擇版本為3.4,包括mongodb-org-mongos、mongodb-org-server、mongodb-org-shell、mongodb-org-tools、mongodb-org

安裝rpm包,包直接有依賴,需要安裝順序安裝

rpm -i mongodb-org-server-3.4.0-1.el7.x86_64.rpm 
rpm -i mongodb-org-shell-3.4.0-1.el7.x86_64.rpm 
rpm -i mongodb-org-mongos-3.4.0-1.el7.x86_64.rpm 
rpm -i mongodb-org-tools-3.4.0-1.el7.x86_64.rpm 
rpm -i mongodb-org-3.4.0-1.el7.x86_64.rpm

rpm安裝與yum安裝存在mongo管理上的問題,yum安裝能夠使用systemctl來管理mongo的運行狀態(啟動,關閉,重啟,狀態查詢),rpm安裝在沒有配置//usr/lib/systemd/system/mongod.service的情況下只能通過mongo自帶的命令管理運行狀態。
mongod命令操作

關閉:mongod --config /etc/mongod.conf --shutdown
啟動:mongod --config /etc/mongod.conf 

systemctl管理命令

systemctl (start|restart|stop|status) mongod.service
一般需要數據庫開機自動運行
systemctl enable mongod.service

重要文件位置:
配置文件:/etc/mongod.conf
日志文件:/var/log/mongodb/mongod.log
數據文件:/var/lib/mongo

二:優化配置

關閉THP

自CentOS6版本開始引入了Transparent Huge Pages(THP),從CentOS7版本開始,該特性默認就會啟用。盡管THP的本意是為提升內存的性能,不過某些數據庫廠商還是建議直接關閉THP(比如說Oracle、MariaDB、MongoDB等),否則可能會導致性能出現下降。
首先檢查THP的啟用狀態:

cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
這個狀態就說明都是啟用的。

禁用THP,編輯rc.local文件(http://www.jb51.net/LINUXjishu/115972.html):

vim /etc/rc.d/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

保存退出,然后賦予rc.local文件執行權限:

chmod +x /etc/rc.d/rc.local

最后重啟系統,以后再檢查THP應該就是被禁用了

cat /sys/kernel/mm/transparent_hugepage/enabled
    always madvise [never]
cat /sys/kernel/mm/transparent_hugepage/defrag 
    always madvise [never]

關閉數據庫文件所在硬盤的 atime

禁止系統對文件的訪問時間更新會有效提高文件讀取的性能。這個可以通過在 _etc_fstab 文件中增加 noatime 參數來實現

vim /etc/fstab
/dev/sdb1     /mnt/data1       xfs     noatime        0 0

修改完文件后重新 mount就可以:

mount -o remount /mnt/data1 

提高默認文件描述符和進程/線程數限制

Linux默認的文件描述符數和最大進程數對于MongoDB來說一般會太低。建議把這個數值設為64000。因為MongoDB服務器對每一個數據庫文件以及每一個客戶端連接都需要用到一個文件描述符。如果這個數字太小的話在大規模并發操作情況下可能會出錯或無法響應。 你可以通過以下命令來臨時修改這些值(只對當前終端生效):

ulimit -n 64000
ulimit -u 64000

永久生效需要在/etc/security/limits.conf配置

/etc/security/limits.conf
mognod  -       nofile  32768
mognod  -       nproc   32000

三:安全設置

mongodb默認bindIp為127.0.0.1,端口為27017,沒有進行賬戶設置的。去年出現很多mongodb由于沒有設置密碼之類的被攻破,數據被盜的情況。因此需要對mongo進行安全的設置 。
初步安全措施為修改默認端口,創建賬戶開啟權限認證機制。
etc/mongodb.conf中修改port為其它端口。
設置賬號:

use admin;
db.createUser({"user":"root","pwd":"xxxx","roles":[{"role":"root","db":"admin"}]})

開啟權限驗證:

security:
    authorization:true

Mongo還可以給不同的數據庫創建不同的賬號,每個賬號分配不同的權限,實現更加細粒度的權限控制。具體可參看mongoDB Security

設置賬號后,可以使用賬戶和密碼登錄 mongo
第一種方式:

mongo —port 27071 -u “xxx” -p “xxxx” —authenticationDatabase “admin”

第二種方式:

use admin
db.auth(“xxx”,”xxxx”)

四:權限問題解決

安裝好后,默認的數據目錄位于/var/lib/mongo,由于存儲的數據量大,需要修改默認的存儲路徑為/mnt/data1
修改目錄后會遇到權限的問題,解決的關鍵點如下:
1、selinux,通過查看/var/log/message可以知道,selinux阻止訪問
2、用戶和用戶組
3、文件夾權限
官方給出的說明:

On RHEL 7.0, if you change the data path, the default SELinux  
 policies will prevent mongod from having write access on the new  
 data path if you do not change the security context.  

默認目錄/var/lib/mongo含有mongod_var_lib_t,這樣selinux的安全策略有關。

解決方法是修改對應文件夾的security context

chcon -Rv --type=mongod_var_lib_t /mnt/data1/mongo

跳過selinux的障礙后,需要繼續解決新建目錄的用戶和用戶組,以及文件夾的權限問題,保持與之前的目錄一致。接著就能啟動mongo.

三:參考資料:

chcon命令_Linux chcon 命令用法詳解:修改對象(文件)的安全上下文
mongoDB Security
centos 安裝mongo
MongoDB在Linux下常用優化設置 | MongoDB中文社區

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容