So sánh replica và shard mongodb năm 2024

Trong bài trước nói về begin MongoDB và triển khai MongoDB với 01 member. Do đó có thể tham khảo cài đặt và sử dụng các thao tác cơ bản trên MongoDB 3 tại: Cài đặt và các thao tác cơ bản MongoDB 3

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 server trong hệ thống làm Arbiter cho việc vote

So sánh replica và shard mongodb năm 2024

Về lý thuyết mình thấy 2 nguồn này rõ ràng và dễ hiểu:

https://docs.mongodb.com/manual/replication/

https://kipalog.com/posts/Replica-set-trong-MongoDB

Trong phạm vi bài viết sẽ triển khai replication 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

vim /etc/yum.repos.d/mongo.repo

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

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

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

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

firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="27017" protocol="tcp" 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 product 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 <

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 <

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

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

[root@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 ( ) – 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 <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)

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

0

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.

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

1

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

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

2

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

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

3

Step7: Kiểm tra Replication MongoDB

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

4

Do Arbiter chỉ chứa thông cấu hình nhân bản nên chỉ có db local

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

5

Bài tiếp theo chúng ta sẽ ứng dụng Replication MongoDB cho PHP Laravel framework, với các “Read Preference” khác nhau, để thấy Replication MongoDB có thể vừa đảm nhận nhiệm vụ Hight Available và Load Sharing.