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

Triển khai &định cấu hình các mảnh MongoDB với Ansible

Hệ thống cơ sở dữ liệu hoạt động tốt hơn khi có một khối lượng công việc phân tán giữa một số phiên bản đang chạy hoặc đúng hơn là dữ liệu được phân loại một cách dễ dàng. MongoDB sử dụng sharding để dữ liệu trong một cơ sở dữ liệu nhất định được nhóm theo một số khóa. Sharding nâng cao khả năng mở rộng theo chiều ngang, do đó mang lại hiệu suất tốt hơn và tăng độ tin cậy. Nói chung, MongoDB cung cấp tính năng mở rộng theo chiều ngang và chiều dọc, trái ngược với SQL DBMS, chẳng hạn như MySQL chỉ khuyến khích mở rộng theo chiều dọc.

MongoDB có mô hình nhất quán lỏng lẻo hơn, theo đó một tài liệu trong một bộ sưu tập có thể có một khóa bổ sung sẽ không có trong các tài liệu khác trong cùng một bộ sưu tập.

Mài sắc

Sharding về cơ bản là phân vùng dữ liệu thành các phần riêng biệt và sau đó xác định một loạt các phần cho các máy chủ phân đoạn khác nhau. Khóa phân đoạn thường là một trường có trong tất cả các tài liệu trong cơ sở dữ liệu được phân đoạn được sử dụng để nhóm dữ liệu. Sharding hoạt động song song với việc nhân rộng để tăng tốc độ đọc bằng cách đảm bảo khối lượng công việc phân tán giữa một số máy chủ thay vì phụ thuộc vào một máy chủ duy nhất. Bên cạnh đó, sao chép đảm bảo có sẵn các bản sao của dữ liệu đã viết.

Giả sử chúng tôi có 120 tài liệu trong một bộ sưu tập, những dữ liệu này có thể được chia nhỏ để chúng tôi có 3 bộ bản sao và mỗi bộ có 40 tài liệu như được mô tả trong thiết lập cấu hình bên dưới. Nếu hai máy khách gửi yêu cầu, một máy khách tìm nạp tài liệu nằm trong chỉ mục 35 và máy khách có chỉ mục 92, yêu cầu sẽ được nhận bởi bộ định tuyến truy vấn (một quy trình mongos) liên hệ với nút cấu hình giữ bản ghi phạm vi phân đoạn được phân phối như thế nào giữa các phân đoạn. Khi nhận dạng tài liệu được chỉ định được tìm thấy, nó sẽ được tìm nạp từ phân đoạn được liên kết. Ví dụ ở trên, tài liệu của ứng dụng khách đầu tiên sẽ được tìm nạp từ Shard A và đối với ứng dụng khách B, tài liệu sẽ được tìm nạp từ Shard C. Nói chung, sẽ có một khối lượng công việc phân tán được định nghĩa là chia tỷ lệ ngang.

Đối với các phân đoạn đã cho, nếu kích thước của một tập hợp trong một phân đoạn vượt quá chunk_size, thì tập hợp đó sẽ được tự động phân chia và cân bằng giữa các phân đoạn bằng cách sử dụng khóa phân đoạn đã xác định. Trong thiết lập triển khai, ví dụ dưới đây, chúng ta sẽ cần 3 bộ bản sao, mỗi bộ có một bộ chính và một số bộ phụ. Các nút chính cũng đóng vai trò là máy chủ sharding.

Cấu hình được đề xuất tối thiểu để triển khai sản xuất MongoDB sẽ là ít nhất ba máy chủ phân đoạn, mỗi máy chủ có một bộ bản sao. Để có hiệu suất tốt nhất, các máy chủ mongos được triển khai trên các máy chủ riêng biệt trong khi các nút cấu hình được tích hợp với các phân đoạn.

Triển khai các mảnh MongoDB với Ansible

Việc định cấu hình các phân đoạn và tập hợp bản sao của một cụm riêng biệt là một công việc phức tạp, do đó chúng tôi giải quyết thành các công cụ đơn giản như Ansible để đạt được kết quả cần thiết một cách dễ dàng. Playbook được sử dụng để viết các cấu hình và tác vụ cần thiết mà phần mềm Ansible sẽ thực thi.

Quy trình sách vở có hệ thống phải là:

  1. Cài đặt các gói cơ sở mongo (không có máy chủ, pymongo và giao diện dòng lệnh)
  2. Cài đặt máy chủ mongodb. Làm theo hướng dẫn này để bắt đầu.
  3. Thiết lập các phiên bản mongod và có các nhóm bản sao tương ứng.
  4. Định cấu hình và thiết lập máy chủ cấu hình
  5. Định cấu hình và thiết lập dịch vụ định tuyến Mongos.
  6. Thêm các phân đoạn vào cụm của bạn.

Playbook cấp cao nhất sẽ giống như thế này

- name: install mongo base packages include: mongod.yml
  tags: - mongod

- name: configure config server
  include: configServer.yml
  when: inventory_hostname in groups['mongoc-servers'] 
  tags:
  - cs

- name: configure mongos server
  include: configMongos.yml
  when: inventory_hostname in groups['mongos-server'] tags:
  - mongos

- name: add shards
  include: addShards.yml
  when: inventory_hostname in groups['mongos-servers'] 
  tags:
  - mongos
  - shards

Chúng tôi có thể lưu tệp ở trên dưới dạng mongodbCluster.yml.

Vài người trở thành MongoDB DBA - Đưa MongoDB vào Sản xuất Tìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng MongoDBDownload miễn phí

Tệp mongodb.yml đơn giản sẽ có dạng:

---
- hosts: ansible-test
  remote_user: root
  become: yes
  tasks:
  - name: Import the public key used by the package management system
    apt_key: keyserver=hkp://keyserver.ubuntu.com:80 id=7F0CEB10 state=present
  - name: Add MongoDB repository
    apt_repository: repo='deb <a class="vglnk" href="https://downloads-distro.mongodb.org/repo/ubuntu-upstart" rel="nofollow"><span>http</span><span>://</span><span>downloads</span><span>-</span><span>distro</span><span>.</span><span>mongodb</span><span>.</span><span>org</span><span>/</span><span>repo</span><span>/</span><span>ubuntu</span><span>-</span><span>upstart</span></a> dist 10gen' state=present
  - name: install mongodb
    apt: pkg=mongodb-org state=latest update_cache=yes
    notify:
    - start mongodb
  handlers:
    - name: start mongodb
      service: name=mongod state=started

Đối với các tham số chung cần thiết khi triển khai tập hợp bản sao, chúng tôi cần thêm hai tham số này để thêm các phân đoạn.

  • phân đoạn: theo mặc định, nó là null, Đây là một chuỗi kết nối phân đoạn phải ở định dạng / host:port. Ví dụ:replica0 / siteurl1.com:27017
  • trạng thái: theo mặc định, giá trị hiện diện cho biết phân đoạn phải có mặt, nếu không, người ta có thể đặt nó thành không có.

Sau khi triển khai một tập hợp bản sao như được giải thích trong blog này, bạn có thể tiến hành thêm các phân đoạn.

# add a replicaset shard named replica0 with a member running on port 27017 on mongodb0.example.net
- mongodb_shard:
    login_user: admin
    login_password: root
    shard: "replica0/mongodb1.example.net:27017"
    state: present

# add a standalone mongod shard running on port 27018 of mongodb2.example.net
- mongodb_shard:
    login_user: admin
    login_password: root
    shard: "mongodb2.example.net:27018"
    state: present

# Single node shard running on localhost
- name: Ensure shard replica0 exists
  mongodb_shard:
    login_user: admin
    login_password: root
    shard: "replica0/localhost:3001"
    state: present

# Single node shard running on localhost
- name: Ensure shard replica0 exists
  mongodb_shard:
    login_user: admin
    login_password: root
    shard: "replica0/localhost:3002"
    state: present

Sau khi thiết lập tất cả các cấu hình này, chúng tôi chạy playbook bằng lệnh

ansible-playbook -i hosts mongodbCluster.yml

Sau khi playbook hoàn tất, chúng tôi có thể đăng nhập vào bất kỳ máy chủ mongos nào và đưa ra lệnh sh.status (). Nếu đầu ra là một cái gì đó giống như bên dưới, các phân đoạn đã được triển khai. Ngoài ra, bạn có thể thấy khóa mongodb_shard nếu nó đã được đánh giá là thành công.

mongos> sh.status()
    --- Sharding Status --- 
      sharding version: { "_id" : 1, "version" : 3 }
      shards:
        {  "_id" : "shardA",  "host" : "locahhost1/web2:2017,locahhost3:2017" }
        {  "_id" : "shardB",  "host" : "locahhost3/web2:2018,locahhost3:2019" }
{  "_id" : "shardC",  "host" : "locahhost3/web2:2019,locahhost3:2019" }

    databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

Để xóa một phân đoạn có tên là replica0

- mongodb_shard:
    login_user: admin
    login_password: root
    shard: replica0
    state: absent

Kết luận

Ansible đã đóng một vai trò quan trọng trong việc làm cho quá trình triển khai trở nên dễ dàng vì chúng ta chỉ cần xác định các tác vụ cần được thực thi. Hãy tưởng tượng ví dụ nếu bạn có 40 thành viên tập hợp bản sao và bạn cần thêm các phân đoạn vào mỗi thành viên. Đi theo con đường bình thường sẽ khiến bạn già đi và dễ mắc phải rất nhiều lỗi do con người gây ra. Với ansible, bạn chỉ cần xác định các tác vụ này trong một tệp đơn giản có tên là playbook và ansible sẽ xử lý các tác vụ khi tệp được thực thi.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để kết nối với MongoDB trong Windows?

  2. MongoDB $ inc

  3. Cập nhật đường dẫn 'x' sẽ tạo ra xung đột tại 'x'

  4. Lấy một giá trị từ MongoDB theo tên khóa của nó

  5. Chỉ truy xuất phần tử được truy vấn trong một mảng đối tượng trong bộ sưu tập MongoDB