ผู้ใช้หลายๆ ท่านคงเคยใช้งาน Database กันมาแล้วหลายตัว อาทิเช่น Mysql , Oracle เป็นต้น และประโยชน์ของ Database ก็คือการจัดเก็บข้อมูลของเราเพื่อใช้ในการบริหารจัดการกับข้อมูลรวมถึงการใช้งานข้อมูลร่วมกัน โดยวันนี้เราจะมาพูดถึง MongoDB และแนะนำการติดตั้ง MongoDB

MongoDB คือ NoSQL ชนิดหนึ่ง โดยข้อดีของ NoSQL ก็คือความสามารถในการเขียนข้อมูลที่รวดเร็ว query ข้อมูลได้เร็ว ทำให้ลดการทำงานของ Database ลง โดยหากต้องการเก็บ Log แบบ Real-time และข้อมูลมีขนาดใหญ่มากๆ ยกตัวอย่างเช่น Facebook หรือ Twitter ที่มีการโพสข้อความ รวมถึงการแจ้งเตือน การอัพเดตตลอดเวลา การใช้งาน MongoDB ก็จะตอบโจทย์ได้เป็นอย่างดี  ***ข้อมูลเพิ่มเติมเรื่อง NOSQL

ในบทนี้เราจะแนะนำในการติดตั้งและกำหนดค่า MongoDB 3.2 บนเซิร์ฟเวอร์ CentOS 7 โดยเราจะเพิ่มการกำหนดค่าผู้ดูแลระบบสำหรับ MongoDB และค่าการพิสูจน์ตัวตนสำหรับบริการ MongoDB

ขั้นตอนที่ 1 – เพิ่ม Repository MongoDB ใน CentOS

เชื่อมต่อกับเซิร์ฟเวอร์ CentOS 7 ด้วย root และไปที่ไดเรกทอรี yum.repos.d แล้วทำการสร้างไฟล์ชื่อ mongodb-org-3.2.repo

# cd /etc/yum.repos.d/
# vi mongodb-org-3.2.repo

วางค่าดังนี้ในไฟล์

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1

จากนั้นทำการบันทึกไฟล์และออกจากไฟล์

ขั้นตอนที่ 2 – การติดตั้ง MongoDB

ตรวจสอบว่ามีการเพิ่ม Repository MongoDB ไว้พร้อมแล้วก่อนทำการติดตั้ง

# yum repolist

จะพบว่ามีการเพิ่มค่าเรียบร้อยแล้ว

จากนั้นติดตั้ง MongoDB ด้วยคำสั่ง yum

# yum -y install mongodb-org

เมื่อการติดตั้งเสร็จสิ้น สามารถเริ่มต้น MongoDB ด้วยคำสั่ง

# systemctl start mongod

และตรวจสอบสถานะของ mongodb ว่าเปิดใช้งานแล้ว

ขั้นตอนที่ 3 – แก้ไขข้อผิดพลาด MongoDB

เมื่อ MongoDB มีการติดตั้งแล้ว เราสามารถเข้าถึง mongodb โดยใช้คำสั่ง

# mongo

เราจะเห็นข้อผิดพลาดเกี่ยวกับการตั้งค่า ulimit บนเซิร์ฟเวอร์ : ** WARNING: soft rlimits too low. rlimits set to 4096 processes, 64000 files. Number of processes should be at least 32000…

เราจำเป็นต้องเพิ่มการกำหนดค่า ulimit ของ MongoDB บนเซิร์ฟเวอร์ จะทำงานภายใต้ “mongod” ของผู้ใช้

# cd /etc/security/
# vi limits.conf

เราจะเพิ่มขีดจำกัดของผู้ใช้ mongod เพิ่ม ‘64000’ – จำนวนของprocess หรือ nproc และจำนวนไฟล์ที่เปิดหรือ nofile ถึง 64000 โดยวางการกำหนดค่าใหม่ด้านล่างท้ายไฟล์

mongod soft nproc 64000
mongod hard nproc 64000
mongod soft nofile 64000
mongod hard nofile 64000

เมื่อเรียบร้อยแล้วทำการบันทึกไฟล์

ใช้คำสั่งดังนี้เพื่อเรียกใช้ขีดจำกัดที่เปลี่ยนแปลงไปกับระบบ

# systemctl -p

จากนั้นทำการรีสตาร์ทบริการ MongoDB และลองเข้าสู่ Mongo อีกครั้งจะพบว่าข้อผิดพลาดนี้หายไปแล้ว

# systemctl restart mongod
# mongo

ขั้นตอนที่ 4 – สร้างผู้ดูแลระบบ MongoDB

ในขั้นตอนนี้เราจะสร้างผู้ใช้ใหม่ “admin” สำหรับ MongoDB พร้อมด้วย ‘UserAdminAnyDatabase’ ด้วยการ ssh

# mongo

เราจะสร้างผู้ดูแลระบบผู้ใช้ใหม่ชื่อ ‘admin’ ด้วยรหัสผ่าน ‘admin123’ (ค่านี้เป็นเพียงตัวอย่าง แนะนำไม่ควรตั้ง Username/Password ที่คาดเดาง่ายจนเกินไป) จากนั้นเราจะกำหนดค่าบทบาทของผู้ใช้ให้เป็น ‘UserAdminAnyDatabase’ เปลี่ยนไปใช้ ‘admin’

use admin

ใส่ข้อมูลเพื่อสร้างผู้ดูแลระบบใหม่

db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

จากนั้นตรวจสอบให้แน่ใจว่าผู้ใช้ถูกสร้างแล้วด้วยคำสั่ง

show users

จากภาพแสดงว่าผู้ดูแลระบบ MongoDB ได้รับการสร้างเรียบร้อยแล้ว

ขั้นตอนที่ 5 – เปิดใช้การรับรองความถูกต้องของผู้ใช้ใน MongoDB

ในขั้นตอนนี้เราจะเปิดใช้งานการตรวจสอบสิทธิ์สำหรับผู้ใช้ เพื่อป้องกันไม่ให้ผู้ใช้รายอื่นที่ไม่มีสิทธิ์จะสามารถดูข้อมูลในฐานข้อมูลได้
ในเซิร์ฟเวอร์ CentOS 7 ของเรา MongoDB กำลังทำงานภายใต้ systemd พร้อมกับสคริปต์ init ในไดเร็กทอรี ‘/etc/init.d/’ เราจะแก้ไขสคริปต์นั้นเพื่อบังคับให้ mongodb ทำงานโดยใช้ตัวเลือก ‘–auth’ ไปที่ไดเร็กทอรี ‘/etc/init.d/’ และแก้ไขไฟล์ “mongod”

# cd /etc/init.d/
# vi mongod

ในบรรทัด 15 จะพบตัวแปร “OPTION” ให้เพิ่มข้อมูลดังนี้ แล้วกดบันทึกไฟล์

OPTIONS=" --auth -f $CONFIGFILE"

ทำการรีโหลดและรีสตารท์ MongoDB ใหม่อีกครั้งด้วยคำสั่ง

# systemctl daemon-reload
# systemctl restart mongod

ต่อไปเราจะต้องทดสอบการกำหนดค่าโดยเข้าสู่ ssh ของ Mongo และเปลี่ยนไปใช้ฐานข้อมูลของ admin แล้วลองแสดงรายละเอียด user

# mongo
# use admin
# show users

จะเห็นข้อผิดพลาดเกี่ยวกับการเรียกใช้คำสั่งไม่ได้รับอนุญาตในผู้ดูแลระบบฐานข้อมูล ตอนนี้เราต้องใช้คำสั่ง ‘db.auth ()’ สำหรับการพิสูจน์ตัวตน

db.auth('admin', 'admin123')

ตอนนี้เราสามารถแสดงรายละเอียด User ที่มีสิทธิเข้าใช้งานได้

เพียงเท่านี้ MongoDB 3.2 ก็ได้รับการติดตั้งและกำหนดค่าไว้ใน CentOS 7 Server เรียบร้อยแล้ว

***ข้อมูลเพิ่มเติม MongoDB