Thứ ba, 26/02/2013 | 00:00 GMT+7

Cách thiết lập database MongoDB có thể mở rộng

MongoDB là một database NoSQL với các tính năng tuyệt vời như sao chép và sharding được tích hợp sẵn. Điều này cho phép bạn mở rộng database của bạn đến bao nhiêu server tùy thích bằng cách phân phối nội dung giữa chúng.

 

Trước khi cài đặt bất kỳ thứ gì liên quan đến MongoDB, ta cần đảm bảo phần cứng của ta được chọn chính xác và phần mềm được tinh chỉnh.

1. Ổ cứng

Nếu bạn có quyền lựa chọn ổ cứng nào sẽ có, hãy sử dụng ổ SSD kép cấp doanh nghiệp trong RAID1. Như ta đã đề cập trước đây, chúng rất tuyệt vời về hiệu suất và thực sự giúp bạn tiết kiệm tiền.

Chỉnh sửa file / etc / fstab của bạn trong Linux và đảm bảo tắt tính năng ghi thời gian truy cập trên mount của bạn sẽ được sử dụng với MongoDB. Thêm noatime vào cột thứ 4:

Gắn lại phân vùng:

[root@mongodb1 ~]# mount -o remount /

Xác minh cài đặt mới đã có hiệu lực:

[root@mongodb1 ~]# mount
/dev/sda on / type ext4 (rw,noatime)

2. CPU và bộ nhớ

Đặt MongoDB làm VM trên hypervisor sẽ cho phép bạn mở rộng RAM và lõi CPU sau này. Số lượng lõi CPU và RAM nên được chỉ định tùy thuộc vào nhu cầu cơ sở hạ tầng và ngân sách của bạn.

3. Tối ưu hóa

Mẹo hữu ích nhất là tối ưu hóa các truy vấn database của bạn:

  • Thêm index cho các truy vấn thường được tìm kiếm hoặc được sắp xếp.
  • Sử dụng lệnh giải thích () của MongoDB.
  • Giới hạn kết quả tìm kiếm và giới hạn các trường đang được trả về.

Đối với mục đích thử nghiệm, ta sẽ quay 3 server :

Cài đặt

Quy trình này sẽ giống nhau trên mongodb1, mongodb2 và mongodb3. Cài đặt MongoDB trên CentOS rất đơn giản. Thêm repository sau bằng cách chỉnh sửa

/etc/yum.repos.d/10gen.repo
[10gen] name=10gen baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0 enabled=1

Bây giờ cài đặt các gói:

[root@mongodb1 ~]# yum -y install mongo-10gen mongo-10gen-server

Bật MongoDB để bắt đầu khi server khởi động lại và khởi động dịch vụ:

[root@mongodb1 ~]# chkconfig mongod on && service mongod start
Starting mongod: forked process: 1387 all output going to: /var/log/mongo/mongod.log child process started successfully, parent exiting                                                            [  OK  ]

Đến đây bạn sẽ có thể xem thống kê trên http: // MÁY CHỦ: 28017 /

Cài đặt bộ bản sao Master-Slave

Ta sẽ chỉ định mongodb1 làm server chính. Thêm “master = true” vào /etc/mongod.conf và thực hiện

service mongod restart

Trong khi mongodb2 và mongodb3 sẽ được cài đặt dưới dạng slaver . Thêm “slave = true”, “source = mongodb1” vào /etc/mongod.conf và thực hiện

service mongod restart

Bây giờ ta nên bảo mật database này bằng password hoặc thêm các luật iptables vào các cổng 27017 (MongoDB) và 28017 (Giao diện web).

Để tạo user có password :

> use test
> db.addUser('admin', 'password'); {         "user" : "admin",         "readOnly" : false,         "pwd" : "90f500568434c37b61c8c1ce05fdf3ae",         "_id" : ObjectId("50eaae88790af41ffffdcc58") }

Ta cũng nên thêm các luật firewall để hạn chế đối với các server MongoDB khác, IP của ta và lưu:

[root@mongodb1 ~]# iptables -N MongoDB [root@mongodb1 ~]# iptables -I INPUT -s 0/0 -p tcp --dport 27017 -j MongoDB [root@mongodb1 ~]# iptables -I INPUT -s 0/0 -p tcp --dport 28017 -j MongoDB [root@mongodb1 ~]# iptables -I MongoDB -s 127.0.0.1 -j ACCEPT [root@mongodb1 ~]# iptables -I MongoDB -s 192.34.57.64 -j ACCEPT [root@mongodb1 ~]# iptables -I MongoDB -s 192.34.56.123 -j ACCEPT [root@mongodb1 ~]# iptables -I MongoDB -s 192.34.57.162 -j ACCEPT [root@mongodb1 ~]# iptables -A MongoDB -s 0/0 -j DROP [root@mongodb1 ~]# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

Lặp lại quy trình này trên các server MongoDB khác của bạn (mongodb2, mongodb3).

Nếu bạn đang sử dụng PHP cho giao diện user của bạn , bạn cần cài đặt module MongoDB cho PHP:

[root@webserver ~]# pecl install mongo [root@webserver ~]# echo extension=mongo.so >> `php -i | grep /php.ini | awk '{print $5}'` [root@webserver ~]# service httpd restart

Điền vào database của bạn với dữ liệu

Bây giờ ta có thể bắt đầu thử nghiệm cài đặt mới của bạn . Bạn có thể truy cập database từ lệnh shell bằng lệnh mongo:

[root@mongodb1 ~]# mongo
MongoDB shell version: 2.2.2 connecting to: test

Cho phép nhập danh sách Sách bán chạy nhất của Thời báo New York vào database để kiểm tra:

> db.books.save( { title: 'Safe Haven', author: 'Nicholas Sparks' } ) > db.books.save( { title: 'Gone Girl', author: 'Gillian Flynn' } ) > db.books.save( { title: 'The Coincidence Of Callie And Kayden', author: 'Jessica Sorensen' } ) > db.books.save( { title: 'Fifty Shades of Grey', author: 'E.L. James' } ) > db.books.save( { title: 'Hopeless', author: 'Colleen Hoover' } )

Để hiển thị tất cả kết quả:

> db.books.find() { "_id" : ObjectId("50eaaa4b633625147f205994"), "title" : "Safe Haven", "author" : "Nicholas Sparks" } { "_id" : ObjectId("50eaaa62633625147f205995"), "title" : "Gone Girl", "author" : "Gillian Flynn" } { "_id" : ObjectId("50eaaa8d633625147f205996"), "title" : "The Coincidence Of Callie And Kayden", "author" : "Jessica Sorensen" } { "_id" : ObjectId("50eaaaa0633625147f205997"), "title" : "Fifty Shades of Grey", "author" : "E.L. James" } { "_id" : ObjectId("50eaaab3633625147f205998"), "title" : "Hopeless", "author" : "Colleen Hoover" }

Bạn có thể thấy các mục giống nhau trên mongodb2 và mongodb3 vì chúng là một tập hợp bản sao:

Bạn có thể đã nhập tất cả các loại giá trị cho những cuốn sách này, chẳng hạn như tên nhà xuất bản, số ISBN, xếp hạng khách hàng trung bình, ngôn ngữ viết, v.v. Tuy nhiên, để tối ưu hóa các truy vấn của bạn, cách tốt nhất là giới hạn số lượng kết quả và số trường được trả về.

Ví dụ, để chỉ trả về 2 kết quả, ta sẽ sử dụng giới hạn () ở cuối:

> db.books.find( {}, { title : 1 , author: 1 } ).sort( { timestamp : -1 } ).limit(2) { "_id" : ObjectId("50eaaa4b633625147f205994"), "title" : "Safe Haven", "author" : "Nicholas Sparks" } { "_id" : ObjectId("50eaaa62633625147f205995"), "title" : "Gone Girl", "author" : "Gillian Flynn" }

Khi bạn đã đạt đến dung lượng tối đa cho cài đặt hiện tại, bạn có thể bắt đầu sharding database của bạn . Ta sẽ đề cập đến vấn đề này trong một bài đăng trong tương lai.

Bởi Bulat Khamitov

Tags:

Các tin liên quan