Hướng dẫn cấu hình replication trong MongoDB 3

Trong bài trước giới thiệu tổng quan về Replica set trong MongoDB. Trong bài này, mô hình triển khai replica set MongoDB sử dụng 02 member, và tận dụng 01 trong hệ thống làm Arbiter cho việc vote.

Trong phạm vi bài viết sẽ triển khai MongoDB 3 trên các member là CentOS 7

I. Cài đặt MongoDB 3 trên 03 servers

Step1:  Tạo mongodb3 repository

# /etc/.repos.d/mongo.repo

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

Step2: Cài đặt MongoDB và các gói công cụ

yum  -y mongodb-org
systemctl start mongod
systemctl enable mongod

Step3: Cho phép truy cập mongodb từ một số IPAddress

Soạn tệp cấu hình /etc/mongod.conf trên các server

sed -i 's/127.0.0.1/0.0.0.0/' /etc/mongod.conf

Cho phép truy cập mongodb từ local network

-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="27017" protocol="" accept'
firewall-cmd --reload

2. Replication MongoDB

Trong điều kiện replication MongoDB với 2 server, khi primary unvailable, thì secondary cũng sẽ không tự động thành primary được, vì nó chỉ có 01 vote.
Thực tế trong môi trường thì luôn cần ghi vào database, và tất nhiên chỉ có Primary là có thể write, secondary thì chỉ có thể read. Do đó chúng ta sẽ tận dụng một máy nào đó trong hệ thống để làm Arbiter (trọng tài) vào replica set, để vote cho secondary thành primary.
– Arbiter chỉ có chức năng vote, không giữ data của hệ thống replica set, cũng như không thể trở thành primary.
– Arbiter yêu cầu cấu hình tối thiểu để cài đặt mongodb, do đó chúng ta có thể tận dụng một server nào nó trong hệ thống như: monitor, application

Với replica set MongoDB, member nào có priority cao hơn sẽ là primary. Do đó khi cấu hình chúng ta sẽ để server01 có priority cao hơn để làm default primary.

2.1 Replica set mà không access control

Step1: Enable replication on MongoDB

Trên 03 server mà cài đặt MongoDB, thêm nội dung sau vào tệp tin cấu hình mongod.conf để enable replication với tên replica set id là: mongo_rep

cat >>/etc/mongod.conf <<EOF
replication:
    #replica set id
    replSetName: mongo_rep
EOF

#Restart mongod
systemctl restart mongod

Step2: Thiết lập hosts.conf trên 03 servers

cat >>/etc/hosts <<EOF
192.168.10.111    mongo01
192.168.10.112    mongo02
192.168.10.113    mongo03
EOF

Step3: Khởi tạo MongoDB replica set trên primary

Cấu hình replica set trên primary (mongo01)

[@mongo01]# mongo
MongoDB shell version v3.4.13
connecting to: mongodb://127.0.0.1:27017
>rs.initiate( { _id: "mongo_rep", members: [ { _id: 0, host: "mongo01:27017", priority: 2 } ] } )
>rs.add({ _id:2,host:"mongo02:27017",priority:1 })
>rs.addArb({ _id:3,host:"mongo03:27017",priority:0 })

Note: Để sửa thông tin cấu hình replica set thực hiện như sau:

 >cfg = rs.conf()
 >cfg.members = [cfg.members[1]]
 >rs.reconfig(cfg, {force : true})
 >rs.reconfig({_id:"mongo_rep",members:[{_id:1,host:"mongo01:27017",priority:3},{_id:2,host:"mongo02:27017",priority:2}]})

2.2 Replication set MongoDB with access control

MongoDB cho phép chứng thực giữa các members của replica set with 2 phương thức:
– KeyFile ( https://docs.mongodb.com/manual/core/security-internal-authentication/#keyfiles )
– x.509 (https://docs.mongodb.com/manual/core/security-internal-authentication/#x-509)

Chúng ta thực hiện chứng thực với keyFile
Nội dung của keyFile giống như chia sẻ mật khẩu chung giữa các member servers

Step1: Trên primary MongoDB server
Tạo keyFile

mkdir -p /mongodb/data #Thư mục chứ keyFile
echo "sharedpassword" >/mongodb/data/keyfile
chown -R mongod:mongod /mongodb
chmod 400 /mongodb/data/keyfile

Step2: Enable chứng thực trên all member replica set
Để enable chứng thực chúng ta thêm đoạn sau vào tệp cấu hình mongodb

cat >>/etc/mongod.conf <<EOF
:
    authorization: enabled #Enable chứng thực password
    keyFile: /mongodb/data/keyfile #keyFile path
EOF

Step3: Tạo tài khoản chứng thực
Cách tạo tài khoản trong bài giới thiệu cũng có nói qua, hoặc tham khảo https://docs.mongodb.com/manual/tutorial/create-users/
#Ví dụ tạo tài khoản có quyền root (mức cao nhất)

mongo
>use admin
>db.createUser(
  {
    user: "keepwalking",
    pwd: "[email protected]",
    roles: [
    "root"
    ]
  }
)

Step4: Copy keyfile đến các MongoDB server khác

Ở đây chúng ta sẽ copy keyFile sang secondary và Arbiter member, sử dụng rsync để không phải tạo lại đường dẫn và quyền cho keyFile.

rsync -avzhP /mongodb [email protected]:/
rsync -avzhP /mongodb [email protected]:/

Step5: Copy mongod.conf đến các MongoDB server khác

Để đồng bộ thông tin cấu hình MongoDB thì chúng ta cũng sử dụng rsync để copy mongod.conf đến các member của replica set

rsync -avzhP /etc/mongod.conf [email protected]:/etc/
rsync -avzhP /etc/mongod.conf [email protected]:/etc/

Step6: Restart mongod từ các replica set servers

systemctl restart mongod

Step7: Kiểm tra Replication MongoDB

[[email protected] ~]# mongo -u keepwalking -p [email protected] admin
mongo_rep:PRIMARY>

[[email protected] ~]# mongo -u keepwalking -p [email protected] admin
mongo_rep:SECONDARY>

#Do Arbiter chỉ chứa thông cấu hình nhân bản nên chỉ có db local
[[email protected] ~]# mongo
mongo_rep:ARBITER>

 

Print Friendly, PDF & Email

Comments

comments

Bài viết liên quan

1 Trackback / Pingback

  1. Replica set trong MongoDB - Góc IT

Để lại lời nhắn