MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách triển khai máy chủ Percona cho MongoDB để có tính khả dụng cao

Tính sẵn sàng cao là yếu tố bắt buộc khi bạn chạy các dịch vụ quan trọng trong môi trường sản xuất của mình. Nó có thể đạt được bằng cách loại bỏ tất cả các điểm lỗi đơn lẻ, bao gồm cả tầng cơ sở dữ liệu. Vì vậy, bạn có thể tưởng tượng sự ngạc nhiên của chúng tôi mỗi khi chúng tôi bắt đầu thiết lập với nhiều máy chủ web / ứng dụng đều đánh vào một phiên bản cơ sở dữ liệu duy nhất.

Dịch vụ sẵn có cao trong MongoDB có thể đạt được thông qua nhân rộng. Thuật ngữ tập hợp bản sao mô tả một thiết lập trong đó nhiều quy trình MongoDB chạy và duy trì cùng một dữ liệu. Trong blog này, chúng ta sẽ thảo luận về cách triển khai Máy chủ Percona cho MongoDB để đạt được tính khả dụng cao.

Triển khai Máy chủ Percona cho MongoDB

Chúng ta cần ít nhất 3 nút để có tính khả dụng cao, một tập hợp bản sao sẽ bao gồm 1 nút chính và 2 nút phụ. Bạn có thể sử dụng 2 nút, 1 nút chính và 1 nút phụ, nhưng bạn vẫn cần một trọng tài viên làm nút thứ ba. Trọng tài viên là một nút MongoDB không sao chép và lưu trữ dữ liệu, nhưng tham gia vào quá trình bầu cử của Chính mới khi chuyển đổi dự phòng xảy ra.

Trong ví dụ này, chúng tôi đang chạy 3 môi trường ảo với CentOS Linux phiên bản 7.3 làm hệ điều hành và sẽ sử dụng Máy chủ Percona cho MongoDB phiên bản 4.2 để cài đặt. Địa chỉ IP như sau:

  • mongo-node8:10.10.10.17
  • mongo-node9:10.10.10.18
  • mongo-node10:10.10.10.19

Trước khi chúng tôi bắt đầu cài đặt, hãy đảm bảo rằng tất cả các nút đã được định cấu hình trong tệp / etc / hosts trên mỗi nút.

[[email protected] ~]# cat /etc/hosts

127.0.0.1 mongo-node9 mongo-node9

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.10.10.17 mongo-node8

10.10.10.18 mongo-node9

10.10.10.19 mongo-node10

Sau đó, chúng ta cần định cấu hình Kho lưu trữ Percona trên mỗi nút. Sau đó, kích hoạt kho lưu trữ cho psmdb42 như hình dưới đây:

[[email protected] ~]# percona-release setup psmdb42

* Disabling all Percona Repositories

* Enabling the Percona Server for MongoDB 4.2 repository

* Enabling the Percona Tools repository

<*> All done!

Và sau đó tiếp tục cài đặt Máy chủ Percona cho gói MongoDB:

[[email protected] ~]# yum install percona-server-mongodb*

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

 * base: centos.mirror.angkasa.id

 * extras: centos.mirror.angkasa.id

 * updates: centos.mirror.angkasa.id

Resolving Dependencies

--> Running transaction check

---> Package percona-server-mongodb.x86_64 0:4.2.9-10.el7 will be installed

--> Processing Dependency: cyrus-sasl-gssapi for package: percona-server-mongodb-4.2.9-10.el7.x86_64

--> Processing Dependency: numactl for package: percona-server-mongodb-4.2.9-10.el7.x86_64

---> Package percona-server-mongodb-debuginfo.x86_64 0:4.2.9-10.el7 will be installed

---> Package percona-server-mongodb-mongos.x86_64 0:4.2.9-10.el7 will be installed

--> Processing Dependency: libcrypto.so.10(OPENSSL_1.0.2)(64bit) for package: percona-server-mongodb-mongos-4.2.9-10.el7.x86_64

---> Package percona-server-mongodb-server.x86_64 0:4.2.9-10.el7 will be installed

---> Package percona-server-mongodb-shell.x86_64 0:4.2.9-10.el7 will be installed

---> Package percona-server-mongodb-tools.x86_64 0:4.2.9-10.el7 will be installed

--> Running transaction check

---> Package cyrus-sasl-gssapi.x86_64 0:2.1.26-23.el7 will be installed

--> Processing Dependency: cyrus-sasl-lib(x86-64) = 2.1.26-23.el7 for package: cyrus-sasl-gssapi-2.1.26-23.el7.x86_64

---> Package numactl.x86_64 0:2.0.12-5.el7 will be installed

---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be updated

--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for package: 1:openssl-1.0.1e-60.el7_3.1.x86_64

---> Package openssl-libs.x86_64 1:1.0.2k-19.el7 will be an update

--> Running transaction check

---> Package cyrus-sasl-lib.x86_64 0:2.1.26-20.el7_2 will be updated

---> Package cyrus-sasl-lib.x86_64 0:2.1.26-23.el7 will be an update

---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be updated

---> Package openssl.x86_64 1:1.0.2k-19.el7 will be an update

--> Finished Dependency Resolution



Dependencies Resolved



================================================================

 Package                      Arch   Version         Repository

                                                           Size

================================================================

Installing:

 percona-server-mongodb       x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                          4.9 k

 percona-server-mongodb-debuginfo

                              x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                          885 M

 percona-server-mongodb-mongos

                              x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                           10 M

 percona-server-mongodb-server

                              x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                           22 M

 percona-server-mongodb-shell x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                           12 M

 percona-server-mongodb-tools x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                           30 M

Installing for dependencies:

 cyrus-sasl-gssapi            x86_64 2.1.26-23.el7   base  41 k

 numactl                      x86_64 2.0.12-5.el7    base  66 k

Updating for dependencies:

 cyrus-sasl-lib               x86_64 2.1.26-23.el7   base 155 k

 openssl                      x86_64 1:1.0.2k-19.el7 base 493 k

 openssl-libs                 x86_64 1:1.0.2k-19.el7 base 1.2 M



Transaction Summary

================================================================

Install  6 Packages (+2 Dependent packages)

Upgrade             ( 3 Dependent packages)



Total download size: 960 M

Is this ok [y/d/N]:

. . . .

Installed:

  percona-server-mongodb.x86_64 0:4.2.9-10.el7

  percona-server-mongodb-debuginfo.x86_64 0:4.2.9-10.el7

  percona-server-mongodb-mongos.x86_64 0:4.2.9-10.el7

  percona-server-mongodb-server.x86_64 0:4.2.9-10.el7

  percona-server-mongodb-shell.x86_64 0:4.2.9-10.el7

  percona-server-mongodb-tools.x86_64 0:4.2.9-10.el7



Dependency Installed:

  cyrus-sasl-gssapi.x86_64 0:2.1.26-23.el7

  numactl.x86_64 0:2.0.12-5.el7



Dependency Updated:

  cyrus-sasl-lib.x86_64 0:2.1.26-23.el7

  openssl.x86_64 1:1.0.2k-19.el7

  openssl-libs.x86_64 1:1.0.2k-19.el7

Lặp lại cài đặt trên các nút khác. Sau khi cài đặt xong, vui lòng thay đổi cấu hình bindIP trên /etc/mongod.conf từ Địa chỉ IP localhost thành tất cả Địa chỉ IP riêng như hình dưới đây:

# network interfaces

net:

  port: 27017

  bindIp: 0.0.0.0

Bạn cũng có thể hạn chế Địa chỉ IP trên tham số bindIP vì lý do bảo mật, chỉ cần thêm địa chỉ IP với dấu chấm phẩy làm dấu phân tách.

Đảm bảo chúng ta có thể kết nối vào phiên bản MongoDB giữa ba nút như ví dụ minh họa bên dưới:

[[email protected] ~]# mongo --host 10.10.10.19 --port 27017

Percona Server for MongoDB shell version v4.2.9-10

connecting to: mongodb://10.10.10.19:27017/?compressors=disabled&gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("99afee8f-a194-4d0a-963a-6dfdc17f5bee") }

Percona Server for MongoDB server version: v4.2.9-10

Server has startup warnings:

2020-10-30T04:38:46.244+0000 I  CONTROL  [initandlisten]

2020-10-30T04:38:46.244+0000 I  CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.

2020-10-30T04:38:46.244+0000 I  CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.

2020-10-30T04:38:46.244+0000 I  CONTROL  [initandlisten] **          You can use percona-server-mongodb-enable-auth.sh to fix it.

2020-10-30T04:38:46.244+0000 I  CONTROL  [initandlisten]

Bước tiếp theo là định cấu hình tập bản sao trong MongoDB. Chúng ta cần chỉnh sửa tệp /etc/mongod.conf và bỏ ghi chú phần nhân bản và thêm tham số replSetName như hình dưới đây:

replication:

  replSetName: "my-mongodb-rs"

Chúng tôi sử dụng tên tập hợp bản sao my-mongodb-rs trong cài đặt này. Sau khi cấu hình sao chép được thêm, hãy khởi động lại dịch vụ mongodb.

$ service mongod restart

Lặp lại cấu hình trên các nút khác.

Sau khi hoàn tất, chúng ta cần khởi tạo bản sao ở một trong các nút. Kết nối với mongodb và chạy lệnh rs.initiate () như hình dưới đây:

> rs.initiate()

{

"info2" : "no configuration specified. Using a default configuration for the set",

"me" : "mongo-node8:27017",

"ok" : 1,

"$clusterTime" : {

"clusterTime" : Timestamp(1604036305, 1),

"signature" : {

"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId" : NumberLong(0)

}

},

"operationTime" : Timestamp(1604036305, 1)

}

my-mongodb-rs:OTHER>

my-mongodb-rs:PRIMARY>

Như chúng ta có thể thấy trong các nút, nút đầu tiên mà chúng ta bắt đầu sao chép sẽ trở thành một nút CHÍNH. Chúng ta cần thêm phần còn lại của các nút để tham gia nhân rộng.

Thêm các nút khác bằng lệnh rs.add () trên các nút CHÍNH như bên dưới:

my-mongodb-rs:PRIMARY> rs.add("mongo-node9:27017");

{

"ok" : 1,

"$clusterTime" : {

"clusterTime" : Timestamp(1604037158, 1),

"signature" : {

"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId" : NumberLong(0)

}

},

"operationTime" : Timestamp(1604037158, 1)

}

my-mongodb-rs:PRIMARY> rs.add("mongo-node10:27017");

{

"ok" : 1,

"$clusterTime" : {

"clusterTime" : Timestamp(1604037170, 1),

"signature" : {

"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId" : NumberLong(0)

}

},

"operationTime" : Timestamp(1604037170, 1)

}

Một tùy chọn khác để bắt đầu Tập hợp bản sao bằng lệnh khởi chạy () là chuyển thông tin địa chỉ IP của nút cho tất cả các nút như được hiển thị bên dưới:

rs.initiate( {

       _id: "my-mongodb-rs",

       members: [

       { _id: 0, host: "mongo-node8:27017" },

       { _id: 1, host: "mongo-node9:27017" },

       { _id: 2, host: "mongo-node10:27017" }

       ] })

Chúng tôi có thể kiểm tra cụm tập hợp bản sao hiện tại bằng cách sử dụng lệnh rs.status () trên bất kỳ nút cụm nào:

my-mongodb-rs:PRIMARY> rs.status()

{

"set" : "my-mongodb-rs",

"date" : ISODate("2020-10-30T06:27:41.693Z"),

"myState" : 1,

"term" : NumberLong(1),

"syncingTo" : "",

"syncSourceHost" : "",

"syncSourceId" : -1,

"heartbeatIntervalMillis" : NumberLong(2000),

"majorityVoteCount" : 2,

"writeMajorityCount" : 2,

"optimes" : {

"lastCommittedOpTime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"lastCommittedWallTime" : ISODate("2020-10-30T06:27:28.305Z"),

"readConcernMajorityOpTime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"readConcernMajorityWallTime" : ISODate("2020-10-30T06:27:28.305Z"),

"appliedOpTime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"durableOpTime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"lastAppliedWallTime" : ISODate("2020-10-30T06:27:28.305Z"),

"lastDurableWallTime" : ISODate("2020-10-30T06:27:28.305Z")

},

"lastStableRecoveryTimestamp" : Timestamp(1604039245, 1),

"lastStableCheckpointTimestamp" : Timestamp(1604039245, 1),

"electionCandidateMetrics" : {

"lastElectionReason" : "electionTimeout",

"lastElectionDate" : ISODate("2020-10-30T05:38:25.155Z"),

"electionTerm" : NumberLong(1),

"lastCommittedOpTimeAtElection" : {

"ts" : Timestamp(0, 0),

"t" : NumberLong(-1)

},

"lastSeenOpTimeAtElection" : {

"ts" : Timestamp(1604036305, 1),

"t" : NumberLong(-1)

},

"numVotesNeeded" : 1,

"priorityAtElection" : 1,

"electionTimeoutMillis" : NumberLong(10000),

"newTermStartDate" : ISODate("2020-10-30T05:38:25.171Z"),

"wMajorityWriteAvailabilityDate" : ISODate("2020-10-30T05:38:25.180Z")

},

"members" : [

{

"_id" : 0,

"name" : "mongo-node8:27017",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 3014,

"optime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2020-10-30T06:27:28Z"),

"syncingTo" : "",

"syncSourceHost" : "",

"syncSourceId" : -1,

"infoMessage" : "",

"electionTime" : Timestamp(1604036305, 2),

"electionDate" : ISODate("2020-10-30T05:38:25Z"),

"configVersion" : 7,

"self" : true,

"lastHeartbeatMessage" : ""

},

{

"_id" : 1,

"name" : "mongo-node9:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 226,

"optime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"optimeDurable" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2020-10-30T06:27:28Z"),

"optimeDurableDate" : ISODate("2020-10-30T06:27:28Z"),

"lastHeartbeat" : ISODate("2020-10-30T06:27:40.520Z"),

"lastHeartbeatRecv" : ISODate("2020-10-30T06:27:40.519Z"),

"pingMs" : NumberLong(0),

"lastHeartbeatMessage" : "",

"syncingTo" : "mongo-node8:27017",

"syncSourceHost" : "mongo-node8:27017",

"syncSourceId" : 0,

"infoMessage" : "",

"configVersion" : 7

},

{

"_id" : 2,

"name" : "mongo-node10:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 201,

"optime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"optimeDurable" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2020-10-30T06:27:28Z"),

"optimeDurableDate" : ISODate("2020-10-30T06:27:28Z"),

"lastHeartbeat" : ISODate("2020-10-30T06:27:40.520Z"),

"lastHeartbeatRecv" : ISODate("2020-10-30T06:27:40.688Z"),

"pingMs" : NumberLong(0),

"lastHeartbeatMessage" : "",

"syncingTo" : "mongo-node8:27017",

"syncSourceHost" : "mongo-node8:27017",

"syncSourceId" : 0,

"infoMessage" : "",

"configVersion" : 7

}

],

"ok" : 1,

"$clusterTime" : {

"clusterTime" : Timestamp(1604039248, 1),

"signature" : {

"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId" : NumberLong(0)

}

},

"operationTime" : Timestamp(1604039248, 1)

}

Triển khai Máy chủ Percona cho MongoDB bằng ClusterControl

ClusterControl hỗ trợ triển khai Máy chủ Percona cho MongoDB. Các phiên bản được hỗ trợ bao gồm 3.4, 3.6, 4.0 và 4.2. Việc triển khai rất đơn giản, bạn chỉ cần vào Deploy và chọn tab MongoDB Replicaset như hình dưới đây:

Điền người dùng SSH, mật khẩu, cổng và tên cụm. ClusterControl yêu cầu bạn thiết lập SSH không mật khẩu giữa nút bộ điều khiển và nút cơ sở dữ liệu đích trước khi cài đặt. Sau khi điền đầy đủ thông tin, hãy nhấp vào Tiếp tục. Sẽ có một trang khác như hình bên dưới:

Chọn Percona làm Nhà cung cấp, chọn Phiên bản bạn muốn cài đặt. Nếu bạn có một thư mục dữ liệu MongoDB tùy chỉnh, bạn cần chỉ định nó. Đặt người dùng và mật khẩu quản trị viên cho MongoDB của bạn. Nếu bạn muốn sử dụng một cổng khác thay vì sử dụng mặc định (re. 27017), bạn có thể thay đổi nó thành một số cổng khác. Bước cuối cùng là điền địa chỉ IP của nút cơ sở dữ liệu mục tiêu của bạn vào hộp tổ hợp Thêm nút.

Sau khi hoàn tất, chỉ cần nhấp vào nút Triển khai. Nó sẽ kích hoạt một công việc để triển khai một cụm MongoDB như được hiển thị bên dưới:

Sau khi triển khai xong, bạn có thể xem trang Tổng quan mà bạn đã có 3 phiên bản Máy chủ Percona cho MongoDB đang hoạt động.

Chế độ xem cấu trúc liên kết bên dưới cho thấy rằng bạn có 1 nút Chính và 2 nút phụ:


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao chúng ta cần một 'trọng tài viên' trong việc nhân rộng MongoDB?

  2. MongoDB $ kéo

  3. MongoDB / NoSQL:Giữ lịch sử thay đổi tài liệu

  4. MongoDB + nodejs:Làm thế nào để truy vấn các trường ISODate?

  5. Xây dựng truy vấn MongoDb C # GeoNear