MongoDB master-slave

Gần đây, tôi có cơ hội cập bến một bộ bản sao MongoDB truyền thống. Hiện tại, tôi đang làm điều đó cho môi trường QA và UAT nơi bộ bản sao MongoDB được thiết lập trên một máy chủ duy nhất. Vì vậy, trong blog này, chúng tôi sẽ thực hiện trên một máy chủ duy nhất bằng cách sử dụng Docker Networking và Docker Compose. Kịch bản. Thiết lập bản sao MongoDB bằng phiên bản 3. 0. 5 bộ

MongoDB cung cấp các gói bản dựng MongoDB được hỗ trợ chính thức trong kho lưu trữ của chính nó. Kho lưu trữ này cung cấp bản phân phối MongoDB trong các gói sau

Định cấu hình hệ thống quản lý gói (yum)

==> Tạo một /etc/yum. repos. d/mongodb-org-3. 0. repo để bạn có thể cài đặt MongoDB trực tiếp, sử dụng yum

Sử dụng các kho lưu trữ được đề cập dưới đây theo yêu cầu của bạn tốt hơn để đi với 2. 6 vì nó sẽ tránh rs. SlaveOk() trên Máy Slave

[mongodb-org-3.0]
name=MongoDB Repository
baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1

Để hạn chế hệ thống của bạn ở 2. 6, hãy tạo một /etc/yum. repo. d/mongodb-org-2. 6. repo để chứa thông tin cấu hình sau cho MongoDB 2. 6 kho lưu trữ

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

các tệp repo cho mỗi bản phát hành cũng có thể được tìm thấy trong chính kho lưu trữ. Hãy nhớ rằng các phiên bản phát hành nhỏ được đánh số lẻ (e. g. 2. 5) là các phiên bản phát triển và không phù hợp để sử dụng trong sản xuất

2, Cài đặt các gói MongoDB và các công cụ liên quan

Khi bạn cài đặt các gói, bạn chọn cài đặt bản phát hành hiện tại hay bản phát hành trước đó. Bước này cung cấp các lệnh cho cả hai

==> Để cài đặt phiên bản ổn định mới nhất của MongoDB, hãy ra lệnh sau

sudo yum install -y mongodb-org

1, Bắt đầu MongoDB

Bạn có thể bắt đầu quá trình mongod bằng cách ban hành lệnh sau

# service mongod start

2, Xác minh rằng MongoDB đã bắt đầu thành công

Bạn có thể xác minh rằng quá trình mongod đã bắt đầu thành công bằng cách kiểm tra nội dung của tệp nhật ký tại /var/log/mongodb/mongod. đăng nhập để đọc một dòng

[initandlisten] waiting for connections on port 

đâu là cổng được cấu hình trong /etc/mongod. conf, 27017 theo mặc định

Bạn có thể tùy ý đảm bảo rằng MongoDB sẽ bắt đầu sau khi khởi động lại hệ thống bằng cách đưa ra lệnh sau

# chkconfig mongod on

3, Dừng MongoDB

Khi cần, bạn có thể dừng quá trình mongod bằng cách đưa ra lệnh sau

# service mongod stop

4, Khởi động lại MongoDB

Bạn có thể khởi động lại quá trình mongod bằng cách ban hành lệnh sau

# service mongod restart

Bạn có thể theo dõi trạng thái của quy trình để tìm lỗi hoặc thông báo quan trọng bằng cách xem đầu ra trong /var/log/mongodb/mongod. tệp nhật ký

Phần 2, Thiết lập bản sao MongoDB Master và Slave

Ghi chú. Sẽ tạo phiên bản mongo* thành 2. 6. 9 đến máy chủ và máy phụ để đảm bảo rằng rs. SlaveOk() sẽ không được yêu cầu trong bất kỳ trường hợp nào trong Máy chủ Slave

#, Phiên bản hiện tại được cài đặt trong máy cho Mongo* là -
1, [root@ip-172-20-12-115 ~]# mongo --version
MongoDB shell version: 2.6.6

2, [root@ip-172-20-12-115 ~]# mongod --version
db phiên bản v2. 6. 6
2015-05-14T08. 23. 25. Phiên bản git 446+0000. 608e8bc319627693b04cc7da29ecc300a5f45a1f

#, Trạng thái hiện tại trong Máy Mongo -
> db. printReplicationInfo()
{ "errmsg". "không phát hiện bản sao bộ chủ/tớ cũng như bản sao" }

==> Điều này được hiển thị vì không tìm thấy Thiết lập Master/Slave, nó sẽ được khắc phục khi chúng tôi thêm DNS của Master vào cơ sở dữ liệu cục bộ của Slave trong bộ sưu tập nguồn

#, Để biến một máy độc lập thành máy chính -

==> Các tham số cần thay đổi trong /etc/mongodb. tập tin conf -

Một, vim /etc/mongodb. conf

1, Bỏ comment dòng "#port = 27017" để bật port 27017

2, Chỉ định đường dẫn trong dbpath nơi bạn muốn giữ các tệp liên quan đến mongoDB. Đảm bảo rằng thư mục tồn tại và có quyền sở hữu là mongod. mongod

Thí dụ. dbpath=/data/mongo/mongo

3, Bỏ ghi chú dòng "#master = true" để đảm bảo rằng máy chủ này hoạt động như Master. [Nếu không tìm thấy dòng này, hãy nhập master = true ở cuối tệp cấu hình]

B, sau đó khởi động lại dịch vụ mongod -
1, khởi động lại dịch vụ mongod

C, Xác minh dịch vụ -
1, ps aux. grep -i mongo
2, ss -ntlp. grep -i mongo

#, Biến một cỗ máy độc lập thành nô lệ cho cỗ máy chủ -

1, Để đảm bảo rằng mongod đang hoạt động tốt với cùng một phiên bản (sẽ là 2. 6. 9)

#, Các bước làm Slave Mongo Machine -

1, Truy cập Mongo ClI Prompt bằng mongo -
a, sử dụng cục bộ

b, sử dụng lệnh "db" để xác minh rằng bạn đang ở trong cơ sở dữ liệu "cục bộ"

c, Sử dụng "db. nguồn. find()" để kiểm tra xem có tồn tại bất kỳ mục nào cho IP/Tên máy chủ không (Master One)

d, Sau đó sử dụng "db. nguồn. insert" như hình bên dưới, nhưng thay Public DNS Name theo Master's DNS.
==> db. nguồn. chèn ( {máy chủ. "ec2-54-151-144-8. ap-đông-nam-1. tính toán. amazonaws. com. 27017"} )

Lưu ý quan trọng

Trong trường hợp máy chủ sản xuất, hãy sử dụng bản ghi CNAME được liên kết với máy chủ chính thay vì DNS công cộng [Nếu phiên bản chính được khởi động lại thì DNS công cộng sẽ bị thay đổi và sao chép sẽ không xảy ra ở phía phụ]. Trong lệnh bên dưới, mongo1. cfteam. in là CNAME của một trong các máy chủ chính

==> db. nguồn. chèn ( {máy chủ. "mongo1. cfteam. Trong. 27017"} )

e. Xác minh mục nhập cho Máy chủ chính được thêm trong Cơ sở dữ liệu cục bộ phụ bằng cách sử dụng -
==> db. nguồn. tìm()

f, Thoát lời nhắc mongo cli bằng cách sử dụng "exit"

g, Khởi động lại dịch vụ Mongod

h, Thực hiện lại "bước e" để kiểm tra DNS IP của Master

i, Trong Mongo Cli Prompt bên trong cơ sở dữ liệu cục bộ, hãy sử dụng thông tin sau -
==> db. tôi. tìm()

==> Lệnh trên sẽ liệt kê tên máy cho Slave Machine

3, Các tham số cần thay đổi trong /etc/mongodb. conf dưới Slave Mongo Server -

Một, vim /etc/mongodb. conf

1, Bỏ comment dòng "#port = 27017" để bật port 27017

2, Chỉ định đường dẫn trong dbpath nơi bạn muốn giữ các tệp liên quan đến mongoDB. Đảm bảo rằng thư mục tồn tại và có quyền sở hữu là mongod. mongod

Thí dụ. dbpath=/data/mongo/mongo

3, Bỏ ghi chú dòng "#slave = true" để đảm bảo rằng máy chủ này hoạt động như Master. [Nếu không tìm thấy dòng này, hãy nhập Slave = true ở cuối tệp cấu hình]

4, autoresync = true
==> Cho mục đích tự động đồng bộ hóa từ chính.

5, tệp nhỏ = đúng

B, sau đó khởi động lại dịch vụ mongod -
1, khởi động lại dịch vụ mongod

C, Xác minh dịch vụ -
1, ps aux. grep -i mongo
2, ss -ntlp. grep -i mongo

#, Hiện đang Xác minh Sao chép Phía Chính -

1, trong Máy chủ chính -
==> Chạy các lệnh sau dưới dấu nhắc mongo cli -

a, db. isMaster()
==> Để kiểm tra trạng thái (Master/Slave).

b, db. printReplicationInfo()
==> để kiểm tra Thông tin sao chép liên quan đến Oplog (Thông tin kích thước và đồng bộ hóa. Thời gian).

c, sử dụng local
==> Đang chuyển sang DB cục bộ

d, trưng bày bộ sưu tập

e, db. nô lệ. find()
==> Để kiểm tra IP của Slave Server.

#, Đang xác minh phía nô lệ để sao chép -

1, Dưới Máy chủ Slave -
==> Chạy các lệnh sau dưới dấu nhắc mongo cli -
a, db. isMaster()
==> Để kiểm tra trạng thái (Master/Slave).

b, db. printSlaveReplicationInfo()
==> để kiểm tra Thông tin sao chép liên quan đến Oplog (Thông tin kích thước và đồng bộ hóa. Thời gian).

c, sử dụng cục bộ
==> Chuyển sang DB cục bộ

d, trưng bày bộ sưu tập

e, db. nguồn. find()
==> Để kiểm tra Địa chỉ IP Máy chủ của Master.

f, db. tôi. find()
==> Điều này sẽ tự động điền Tên máy chủ của Máy cục bộ (Tên máy chủ Slave).


#, Kiểm tra lần cuối để sao chép trong Master và Slave -

1, Dưới Máy chủ Chính -

a, sử dụng RP-TEST-FINAL
==> để tạo DB và chuyển trực tiếp sang cùng một.

b, đb. người dùng. chèn ({'tên người dùng'. 'Rohit','Tên đầy đủ'. 'Rohit-Patel','Web'. 'http. //www. rohitpatel. Trong điện thoại di động'. '+91-9663712170','Địa chỉ'. 'Koramangala Khối 8','Thành phố'. 'Bangalore','Bang'. 'Karnataka','Đất nước'. 'Ấn Độ','Nơi bản xứ'. 'Jabalpur/Madhya-Pradesh'})

c, đb. người dùng. tìm thấy()

2, Dưới Máy chủ nô lệ -

a, Đi theo dấu nhắc mongo cli

b, hiển thị dbs
==> vào danh sách cho cơ sở dữ liệu bạn đã tạo trong Mongo Master Server. (Nó sẽ được phản ánh ngay lập tức).

c, sử dụng RP-TEST-FINAL
==> Để di chuyển bên trong Cơ sở dữ liệu đó và để xác minh bộ sưu tập mà chúng tôi đã tạo trong Máy chủ chính có được sao chép trong Máy phụ hay không.

d, hiển thị bộ sưu tập
==> Nó sẽ liệt kê 2 bộ sưu tập dưới dạng (người dùng và chỉ mục), người dùng là những gì chúng ta đã tạo trong phần chính.

e, db. người dùng. find()
==> Điều này sẽ liệt kê thông tin thu thập người dùng mà chúng tôi đã tạo trong Master.

Ghi chú. Sau khi dữ liệu được sao chép từ Máy chủ chính và Máy chủ phụ và được xác minh từ nhật ký, bạn có thể yên tâm rằng quá trình thiết lập đã được thực hiện và hoạt động tốt


Mẹo bảo mật

Trong thiết lập master-slave mongoDB, bất kỳ máy chủ nào cũng có thể trở thành nô lệ của bất kỳ máy chủ chính nào nếu các điều kiện bên dưới được thỏa mãn.  

* Máy chủ phụ có quyền truy cập vào mạng máy chủ chính (tức là) không bị chặn trong tường lửa

* Chủ sở hữu máy chủ phụ biết DNS hoặc CNAME công khai của máy chủ chính có thể được thêm vào cục bộ. bộ sưu tập nguồn của máy chủ nô lệ

* Tham số "keyFile" không được kích hoạt trong /etc/mongod. conf trên máy chủ chính

Nếu các điều kiện trên được đáp ứng thì bất kỳ ai cũng có thể nhận được một bản sao của tất cả các cơ sở dữ liệu dưới một máy chủ chính. Để tránh điều này, bạn nên bật tùy chọn keyFile trong máy chủ chính

====

cú pháp. keyFile=/path/to/keyfile

====

Đường dẫn đến tệp khóa là một vị trí có bí mật chung mà các phiên bản MongoDB sử dụng để xác thực lẫn nhau trong thiết lập bản sao hoặc thiết lập chính-phụ

Tạo một tệp khóa trong một số thư mục con khác và thêm đường dẫn tệp vào/etc/mongod. conf của máy chủ cũng như máy phụ

Độ dài của khóa phải nằm trong khoảng từ 6 đến 1024 ký tự và chỉ có thể chứa các ký tự trong bộ base64. Tệp khóa không được có quyền nhóm hoặc thế giới trên hệ thống UNIX (tức là) tệp khóa chmod 600. Quyền truy cập tệp chính không được kiểm tra trên hệ thống Windows

Để tạo khóa ngẫu nhiên, hãy sử dụng lệnh bên dưới

====

openssl rand -base64 500

====

Sau khi thực hiện bất kỳ thay đổi nào đối với/etc/mongod. conf, chúng ta phải khởi động lại dịch vụ mongod

Nhược điểm được chú ý

keyFile không nên có Biểu tượng = trong đó. Nếu không, dịch vụ mongoDB sẽ không khởi động được với lỗi bên dưới

2015-05-25T07. 58. 51. 971+0000 ký tự không hợp lệ trong tệp khóa /var/lib/mongo/secure/keyfile. =

Sau khi xóa biểu tượng = khỏi tệp khóa, nó đã hoạt động nên KHUYẾN NGHỊ kiểm tra nội dung của keyFile trong tài khoản hộp cát trước khi sử dụng nó trong máy chủ sản xuất

MongoDB có phải là bậc thầy không

Phương pháp Chính/Slave của MongoDB đang sử dụng một bộ bản sao với cơ chế sao chép và bầu cử của nó, trong đó chỉ có một Chính và một số phụ tại bất kỳ thời điểm nào .

MongoDB có phải là đa chủ không?

MongoDB thực hiện bộ bản sao và phân đoạn. Theo như tôi biết nó không hỗ trợ kiến ​​trúc nhiều chủ hoặc đồng bộ hóa dữ liệu . Ngay cả việc phân phối dữ liệu toàn cầu theo kiểu Atlas cũng đang phân mảnh, phải không?

Bản sao MongoDB là gì?

Bộ bản sao trong MongoDB là một nhóm các quy trình mongod duy trì cùng một bộ dữ liệu . Các bộ bản sao cung cấp khả năng dự phòng và tính sẵn sàng cao, đồng thời là cơ sở cho tất cả các triển khai sản xuất. Phần này giới thiệu về bản sao trong MongoDB cũng như các thành phần và kiến ​​trúc của bộ bản sao.

Bản sao MongoDB hoạt động như thế nào?

Bản sao MongoDB là gì? . Điều này có thể đạt được bằng cách sử dụng Bộ bản sao. Bộ bản sao là một nhóm các phiên bản MongoDB duy trì cùng một tập dữ liệu và liên quan đến bất kỳ quy trình mongod nào. the process of creating a copy of the same data set in more than one MongoDB server. This can be achieved by using a Replica Set. A replica set is a group of MongoDB instances that maintain the same data set and pertain to any mongod process.