MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Основите за разполагане на набор от реплики на MongoDB и парчета с помощта на Puppet

Системите за бази данни работят най-добре, когато са интегрирани с някои добре дефинирани подходи, които улесняват както операциите за четене, така и записване. MongoDB направи допълнителни усилия, като прегърна репликацията и споделянето с цел да даде възможност за хоризонтално и вертикално мащабиране, за разлика от релационните DBM, чиято същата концепция само подобрява вертикалното мащабиране.

 Разделянето гарантира разпределение на натоварването между членовете на клъстера на базата данни, така че операциите за четене да се извършват с малко забавяне. Без разделяне капацитетът на един сървър на база данни с голям набор от данни и операции с висока пропускателна способност може да бъде технически оспорен и може да доведе до повреда на този сървър, ако не се вземат предвид необходимите мерки. Например, ако процентът на заявките е много висок, капацитетът на процесора на сървъра ще бъде претоварен.

От друга страна, репликацията е концепция, при която различни сървъри на бази данни съхраняват едни и същи данни. Той гарантира висока наличност на данни, освен подобряване на целостта на данните. Вземете пример за приложение за социални медии с висока производителност, ако основната обслужваща база данни се повреди, както в случай на прекъсване на захранването, трябва да имаме друга система, която да обслужва същите данни. Един добър набор от реплики трябва да има повече от 3 члена, арбитър и оптимален избор TimeoutMillis. При репликация ще имаме главен/основен възел, където се правят всички операции по запис и след това се прилагат към Oplog. От Oplog всички направени промени се прилагат към другите членове, които в този случай се наричат ​​вторични възли или подчинени. В случай, че първичните възли не комуникират след известно време:selectionTimeoutMillis, другите възли получават сигнал за избор. Изборът TimeoutMillis трябва да бъде зададен не твърде високо, нито твърде ниско, поради причината, че системите ще бъдат изключени за дълго време, поради което ще загубят много данни или чести избори, което може да доведе дори до временна латентност на мрежата, следователно и несъответствие на данните. Арбитър се използва за добавяне на глас към печеливш член, за да стане главен, в случай че има равенство, но не носи никакви данни като другите членове.

Защо да използвате Puppet за внедряване на комплект реплики на MongoDB

По-често разделянето се използва ръка за ръка с репликацията. Процесът на конфигуриране и поддържане на набор от реплики не е лесен поради:

  1. Високи шансове за човешка грешка
  2. Неспособност за автоматично изпълнение на повтарящи се задачи
  3. Отнема много време, особено когато участват голям брой членове
  4. Възможност за неудовлетвореност от работата
  5. Огромна сложност, която може да се появи.

За да преодолеем очертаните пречки, ние се съгласяваме с автоматизирана система като Puppet, която разполага с много ресурси, които да ни помогнат да работим с лекота.

В предишния ни блог научихме процеса на инсталиране и конфигуриране на MongoDB с Puppet. Важно е обаче да разберем основните ресурси на Puppet, тъй като ще ги използваме при конфигурирането на нашия набор от реплики и фрагменти. В случай, че сте го пропуснали, това е манифестният файл за процеса на инсталиране и стартиране на вашия MongoDB на създадената от вас машина

​  package {'mongodb':

    ensure => 'installed',

  }

  service {'mongodb':

    ensure => 'running',

    enable => true

  }

Така че можем да поставим съдържанието по-горе във файл, наречен runMongoDB.pp и да го изпълним с командата 

$ sudo apply runMongoDB.pp

Изпълвайки модула и функциите 'mongodb', можем да настроим нашия набор от реплики със съответните параметри за всеки  mongodb ресурс.

Връзка с MongoDB

Трябва да установим mongodb връзка между възел и сървъра mongodb. Основната цел на това е да се предотврати прилагането на промени в конфигурацията, ако сървърът mongodb не може да бъде достигнат, но потенциално може да се използва за други цели, като наблюдение на базата данни. Използваме mongodb_conn_validator

mongodb_conn_validator{‘mongodb_validator’:

ensure => present,

     server: ‘127.0.0.1:27017’,

     timeout: 40,

     tcp_port:27017

    }

name:  в този случай името mongodb_validator определя самоличността на ресурса. Може също да се разглежда като низ за връзка

сървър:това може да бъде низ или масив от низове, съдържащи DNS имена/IP адреси на сървъра, където трябва да се изпълнява mongodb.

изчакване:това е максималният брой секунди, които валидаторът трябва да изчака, преди да реши, че puppetdb не се изпълнява.

tcp_port:  това е доставчик на ресурса, който потвърждава връзката mongodb чрез опит за https връзка със сървъра на mongodb. При удостоверяването се използва настройката на марионетния SSL сертификат от локалната среда на марионетки.

Създаване на базата данни

mongodb_database{‘databaseName’:

ensure => present,

     tries => 10

}

Тази функция приема 3 параметъра, а именно:

name:  в този случай името databaseName дефинира името на базата данни, която създаваме, което също би било декларирано като name => ‘databaseName’.

опит:това дефинира максималната сума от две секунди опити за изчакване на стартиране на MongoDB

Създаване на потребител на MongoDB

Модулът mongodb_user позволява да се създават и управляват потребители за дадена база данни в модула puppet.

mongodb_user {userprod:

  username => ‘prodUser’,

  ensure => present,

  password_hash => mongodb_password(‘prodUser’, ‘passProdser’),

  database => prodUser,

  roles => [‘readWrite’, ‘dbAdmin’],

  tries  => 10

}

Свойства

потребителско име:дефинира името на потребителя.

password_hash:това е хешът на паролата на потребителя. Функцията mongodb_password(), налична в MongoDB 3.0 и по-нови, се използва за създаване на хеша.

роли:това дефинира ролите, които потребителят има право да изпълнява в целевата база данни.

парола:това е обикновен текст на потребителска парола.

база данни:дефинира целевата база данни на потребителя.

Създаване на набор от реплики

Използваме модула mongodb_replset, за да създадем набор от реплики.

Mongodb_replset{'replicaset1':

   arbiter: 'host0:27017',

   ensure  => present,

   members => ['host0:27017','host1:27017', 'host2:27017', 'host3:27017'] 

   initialize_host: host1:27017

}

name:дефинира името на набора от реплика.

членове:масив от членове, които наборът от реплика ще  съдържа.

initialize_host:хост, който да се използва при инициализиране на набора реплики

арбитър:дефинира члена на набора реплика, който ще се използва като арбитър.

Създаване на MongoDB Shard

mongodb_shard{'shard1':

   ensure  => present,

   members => ['shard1/host1:27017', 'shard1/host2:27017', 'shard1/host3:27017'] 

   keys: 'price'

}

name:дефинира името на фрагмента.

членове:това е масивът  от членове, които шардът  ще съдържа.

ключове:дефинирайте ключа, който да се използва в разделянето, или масив от ключове, които могат да се използват за създаване на сложен ключ за фрагмент.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Извикване на съхранена функция в mongodb

  2. Можете ли да посочите ключ за $addToSet в Mongo?

  3. MongoDB $max оператор на конвейер за агрегиране

  4. Как най-добре да създадете RESTful API в Node.js

  5. Мангуста, Изберете конкретно поле с намиране