##1. สร้าง Config file สำหรับ 3 daemon
สร้างไฟล์ node1.conf
storage:
dbPath: mongodb/db/node1
net:
bindIp: 192.168.103.100,localhost
port: 27001
security:
authorization: enabled
keyFile: mongodb/pki/keyfile
systemLog:
destination: file
path: mongodb/db/node1/mongod.log
logAppend: true
processManagement:
fork: true
replication:
replSetName: nf-example
key file จะถูกใช้เป็นกุญแจในการเชื่อมต่อ daemon เข้าในไปใน Replica Set เดียวกัน หาก daemon ไหน ไม่ได้กำหนดใช้ key file ชุดเดียวกัน จะไม่สามารถจัด set ได้
mkdir -p mongodb/pki/
chown vagrant:vagrant mongodb/pki/
openssl rand -base64 741 > mongodb/pki/keyfile
# ตั้งค่า permission ของไฟล์ SSL ให้รัดกุมกว่าปกติ ไม่งั้นจะรัน mongod ไม่ขึ้น
chmod 400 mongodb/pki/keyfile
สร้าง db path สำหรับ node 1
mkdir -p mongodb/db/node1
รัน mongod
ด้วยไฟล์ node1.conf
mongod -f node1.conf
Copy ไฟล์ node1.conf
เป็น node2.conf
และ node3.conf
cp node1.conf node2.conf
cp node2.conf node3.conf
แก้ไขไฟล์ node2.conf
ในส่วน dbpath
, port
, log path
storage:
dbPath: mongodb/db/node2
net:
bindIp: 192.168.103.100,localhost
port: 27002
security:
authorization: enabled
keyFile: mongodb/pki/keyfile
systemLog:
destination: file
path: mongodb/db/node2/mongod.log
logAppend: true
processManagement:
fork: true
replication:
replSetName: nf-example
แก้ไขไฟล์ node3.conf
ในส่วน dbpath
, port
, log path
storage:
dbPath: mongodb/db/node3
net:
bindIp: 192.168.103.100,localhost
port: 27003
security:
authorization: enabled
keyFile: mongodb/pki/keyfile
systemLog:
destination: file
path: mongodb/db/node3/mongod.log
logAppend: true
processManagement:
fork: true
replication:
replSetName: nf-example
สร้าง directory สำหรับ node2 และ node3
mkdir -p mongodb/db/node2
mkdir -p mongodb/db/node3
รัน mongod สำหรับ node2 และ node3
mongod -f node2.conf
mongod -f node3.conf
ต่อ shell เข้ากับ node1 (port 27001 ตามที่กำหนดไว้ใน config)
mongo --port 27001
ใช้คำสั่งเริ่ม replica set
rs.initiate()
สร้าง user เพื่อใช้ในการเชื่อมต่อ Replica Set
use admin
db.createUser({
user: "nfadmin",
pwd: "nfpass",
roles: [
{role: "root", db: "admin"}
]
})
ออกจาก shell
exit
ใช้ shell sign-in เข้า node1 ใน replica set “nf-example” (ตามที่ตั้งไว้ใน config file)
mongo --host "nf-example/192.168.103.100:27001" -u "nfadmin" -p "nfpass" --authenticationDatabase "admin"
รันคำสั่ง เช็คสถานะของ Replica Set
rs.status()
เพิ่ม node 2 และ node 3 เข้า replica set
rs.add("192.168.103.100:27002")
rs.add("192.168.103.100:27003")
เช็ค Replica Set topology
rs.isMaster()
สละตำแหน่ง primary node
rs.stepDown()
เช็ค Replica Set topology
rs.isMaster()
ให้เปิด terminal ขึ้นมาอีกอัน และใช้คำสั่งด้านล่าง เพื่อค้นหา และทำลาย daemon1
ps -ef | grep mongod
kill <pid>
สังเกตการเปลี่ยนแปลงของ Replica Set เช่น ถ้าตอนแรกเราใช้ Client อย่าง Mongo shell ต่อ daemon1 (port 27001) อาจจะไม่สามารถใช้งานได้อีกต่อไป
ให้ออกจาก mongo shell และ login ใหม่เข้าไปใน daemon ที่เหลืออยู่ เช่น port 27002
mongo --host "nf-example/192.168.103.100:27002" -u "nfadmin" -p "nfpass" --authenticationDatabase "admin"