1.關閉selinux
vi /etc/selinux/config
SELINUX=disabled
setenforce 0
2.配置mongodb源
#yum安裝mongodb
vi /etc/yum.repos.d/mongodb.repo
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
3.yum安裝mongodb
yum install mongodb-org (目前安裝的版本是3.6.7)
4.關閉這三台機器的防火牆
service iptables stop
chkconfig iptables off
service firewalld stop
chkconfig firewalld off
5.分别配置三台機器的/etc/mongod.conf
vi /etc/mongod.conf 添加如下内容
replication: # 取消這行的注釋
oplogSizeMB: 20 # 增加這一行配置定義oplog的大小,注意前面需要有兩個空格
replSetName: zero # 定義複制集的名稱,同樣的前面需要有兩個空格
在每台機器的/etc/mongod.conf中配置各自ip位址,如下面的0.0.0.0
vi /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1, 0.0.0.0
6.叢集初始化
systemctl start mongod.service #分别啟動三台機器的MongoDB服務
進入到其中一台機器,執行下面的指令
mongo
use admin
config={_id:"zero",members:[{_id:0,host:"0.0.0.0:27017"},{_id:1,host:"0.0.0.0:27017"},{_id:2,host:"0.0.0.0:27017"}]}
rs.initiate(config) # 初始化
rs.status() # 檢視狀态
注意:如果在slave上出現show dbs報錯,not master and slaveOk=false
rs.slaveOk() # 如果出現以上錯誤,需要執行這條指令
7. 建立具有叢集管理權限的使用者
use admin
db.createUser({user:"root",pwd:"123456", roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"clusterAdmin",db:"admin" }]})
clusterAdmin具有管理叢集的權限
db.auth("root", "123456") #如果傳回1,則表示成功。
8. 給叢集添加安全keyfile安全認證
#生成key
mkdir -p /var/lib/mongo/authkey/ #在每個節點建立該檔案夾
#在主節點上執行以下指令
openssl rand -base64 745 > /var/lib/mongo/authkey/mongodb-keyfile
chmod 600 /var/lib/mongo/authkey/mongodb-keyfile
cd /var/lib/mongo/authkey/
chown mongod:mongod mongodb-keyfile
# 該key的權限必須是600,且所有者是mongod
# 将該key放到叢集中機器的每一台上,記住必須保持一緻,權限設定成600;
scp mongodb-keyfile [email protected]:/var/lib/mongo/authkey/
登入修改/var/lib/mongo/authkey/,修改權限
9. 分别配置三台機器的/etc/mongod.conf,添加keyfile認證
取消security的注釋,并在下面添加
keyFile: /var/lib/mongo/authkey/mongodb-keyfile
10. 重新啟動叢集節點的mongodb服務
systemctl restart mongod.service
11. 登入mongodb
mongo admin -u root -p
輸入密碼,登入mongo後執行
rs.status() # 檢視狀态,如沒有unauth字樣,則說明安全認證添加成功
12. 測試副本叢集
db.printSlaveReplicationInfo() #檢視副本同步狀态
use testdb # 建立庫
switched to db testdb
zero:PRIMARY> db.test.insert({AccountID:1,UserName:"zero"})
#建立集合,并且插入一條資料
WriteResult({ "nInserted" : 1 })
zero:PRIMARY> show dbs # 檢視所有的庫
zero:PRIMARY> show tables # 檢視目前庫的集合
test
在slave上檢視資料集,是否已經有新加的資料
如果在slave上出現show dbs報錯,not master and slaveOk=false
添加配置
- 設定 /sys/kernel/mm/transparent_hugepage/enabled
echo never >> /sys/kernel/mm/transparent_hugepage/enabled
echo never >> /sys/kernel/mm/transparent_hugepage/defrag
添加到/etc/rc.local
#disable transparent_hugepage
重新開機後仍然好用
編輯 /etc/default/grub,在GRUB_CMDLINE_LINUX加入選項 transparent_hugepage=never
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/swap rd.lvm.lv=fedora/root rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
2.重新生成grub配置檔案
On BIOS-based machines, issue the following command as root:
# grub2-mkconfig -o /boot/grub2/grub.cfg
systemctl status mongod.service
6. 檢視是否啟動成功
$ sudo systemctl status mongod.service
若顯示 active(running)則啟動成功!或者
$ sudo cat /var/log/mongodb/mongod.log
如出現
[thread1] waiting for connections on port <port></port>
其中的預設為27017,在 /etc/mongod.conf中配置,則啟動成功
3)開機自啟動
systemctl start mongod.service
systemctl enable mongod.service