一、yum安裝
1、到阿里云源下載最新rpm安裝包到服務器安裝
#wget https://mirrors.aliyun.com/mongodb/yum/redhat/7/mongodb-org/4.0/x86_64/RPMS/mongodb-org-server-4.0.1-1.el7.x86_64.rpm
#rpm -ivh mongodb-org-*.rpm
#systemctl start mongod #啟動mongod服務
#systemctl enable mongod #設置開機啟動
相關文件路徑

二、二進制安裝
1、下載二進制安裝包解壓安裝
#wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.1.tgz
#tar -zxvf mongodb-linux-x86_64-rhel70-4.0.1.tgz
#mv mongodb-linux-x86_64-rhel70-4.0.1 /usr/local/mongodb
#cd /usr/local/mongodb
#mkdir -pv {conf,log,data/db1} #創建配置文件、日志、數據目錄
# echo "export PATH=$PATH:/usr/local/mongodb/bin" > /etc/profile.d/mongodb.sh #設置環境變量
#source /etc/profile #讓環境變量生效
#useradd mongod -s /bin/false #新建MongoDB運行賬戶
#chown -R mongod:mongod /usr/local/mongodb/ #更改mongod目錄用戶和屬組
2、新建配置文件mongodb.conf
#vim /usr/local/mongodb/conf/mongodb.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /usr/local/mongodb/log/mongod-log-1.log
# Where and how to store data.
storage:
dbPath: /usr/local/mongodb/data/db1
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /usr/local/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: master # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
3、新建service服務文件
#vim /usr/lib/systemd/system/mongod.service
[Unit]
Description=MongoDB Database Server
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /usr/local/mongodb/conf/mongodb.conf"
ExecStart=/usr/local/mongodb/bin/mongod $OPTIONS
PermissionsStartOnly=true
PIDFile=/usr/local/mongodb/mongod.pid
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
4、設置內核參數
#echo 0 > /proc/sys/vm/zone_reclaim_mode
#sysctl -w vm.zone_reclaim_mode=0 #永久設置
#echo never > /sys/kernel/mm/transparent_hugepage/enabled
#echo never > /sys/kernel/mm/transparent_hugepage/defrag
5、啟動測試
#systemctl start mongod #啟動服務
#systemctl enable mongod #設置開機啟動
三、副本集配置
Master 192.168.133.128
Node1 192.168.133.129
Node2 192.168.133.130
1、三節點分別設置hosts
#cat <<EOF >> /etc/hosts
192.168.133.128 master
192.168.133.129 node1
192.168.133.130 node2
EOF
2、編輯配置文件
#Vim /etc/mongod.conf #所有節點配置文件添加如下兩行
replication:
replSetName: rs1
#systemctl restart mongod #重啟服務讓配置生效
3、連接master節點MongoDB
# mongo --host=master
>use admin
>rs.initiate() #初始化副本集
>rs.conf() #確認設定
>rs.add(‘node1:27017’) #添加node1到rs1副本集
>rs.add({host:’node2:27017’,priority:5}) #添加node2到rs1副本集,并設置priority優先級為5
>rs.conf() #確認設定
>rs.status() #查看狀態
設置priority優先級
>var config = rs.config()
>config.members[0].priority=6
>rs.reconfig(config) //重新更新配置

刪除節點
>rs.remove(‘node1:27017’)
4、數據同步測試
a. 在主庫插入數據
rs1:PRIMARY> db.user.insert({"姓名":"張三","年齡":20,"性別":"男"})
rs1:PRIMARY> db.user.find()
{ "_id" : ObjectId("5b7bca2a40d8bd576c4e3c54"), "姓名" : "張三", "年齡" : 20, "性別" : "男" }
b.登陸從節點查詢數據
# mongo --host=node1
rs1:SECONDARY>use admin
rs1:SECONDARY>rs.slaveOk() #開啟從庫讀取
rs1:SECONDARY> db.user.find()
{ "_id" : ObjectId("5b7bca2a40d8bd576c4e3c54"), "姓名" : "張三", "年齡" : 20, "性別" : "男" }
5、故障轉移測試
a.關閉master MongoDB服務
# systemctl stop mongod
b.登陸任意從節點數據庫,查看狀態
# mongo --host=node2
>use admin
>rs.status()


可以看到priority優先級為5的節點已經變成了主節點。
c.在新的主節點添加數據。
rs1:PRIMARY> db.user2.insert({"姓名":"李四","年齡":25,"性別":"女"})
WriteResult({ "nInserted" : 1 })
rs1:PRIMARY> db.user2.find()
{ "_id" : ObjectId("5b7bd44c6129560c71cc22e0"), "姓名" : "李四", "年齡" : 25, "性別" : "女" }
d.啟動故障節點的MongoD服務
#systemctl start mongod
#mongo --host=master
> use admin
>rs.stauts()

可以看到故障服務器上線以后,又變成了主庫。
> db.user2.find() #查詢剛才添加的數據
{ "_id" : ObjectId("5b7bd44c6129560c71cc22e0"), "姓名" : "李四", "年齡" : 25, "性別" : "女" }


