組織は、クラウドのインフラストラクチャを利用しています。これは、インフラストラクチャが速度、柔軟性、およびスケーラビリティを提供するためです。クリックするだけで新しいデータベースインスタンスを起動でき、準備が整うまでに数分かかると想像できます。また、オンプレミス環境と比較した場合よりも速くアプリケーションをデプロイできます。
MongoDB独自のクラウドサービスを使用している場合を除き、主要なクラウドプロバイダーはマネージドMongoDBサービスを提供していないため、単一のインスタンスまたはクラスターをデプロイするためのワンクリック操作ではありません。一般的な方法は、VMを起動して、それらをこれらにデプロイすることです。デプロイメントはAからZまで処理する必要があります。インスタンスを準備し、データベースソフトウェアをインストールし、いくつかの構成を調整して、インスタンスを保護する必要があります。これらのタスクは不可欠ですが、常に適切に実行されるとは限りません。悲惨な結果を招く可能性があります。
自動化は、インストール、構成、強化からデータベースサービスの準備が整うまでのすべてのタスクを確実にする上で重要な役割を果たします。このブログでは、MongoDBのデプロイの自動化について説明します。
エンジニアがインフラストラクチャを展開および管理するのに役立つ、多くの新しいソフトウェアツールがあります。構成管理は、エンジニアがより迅速かつ効果的に展開するのに役立ち、新しいサービスの展開時間を短縮します。人気のあるオプションには、Ansible、Saltstack、Chef、Puppetなどがあります。すべての製品には長所と短所がありますが、それらはすべて非常にうまく機能し、非常に人気があります。 MongoDBReplicaSetやShardedClusterのようなステートフルサービスのデプロイは、これらがマルチサーバーセットアップであり、ツールがインクリメンタルおよびクロスノード調整を十分にサポートしていないため、少し難しい場合があります。展開手順では通常、特定の順序でタスクを実行して、ノード間でオーケストレーションを行う必要があります。
MongoDBサーバーのデプロイには、いくつかのことが含まれます。 MongoDBリポジトリをローカルに追加し、MongoDBパッケージをインストールし、ポート、ユーザー名を構成して、サービスを開始します。
タスク:MongoDBをインストールする
- name: install mongoDB
apt:
name: mongodb
state: present
update_cache: yes
タスク:構成ファイルからmongod.confをコピーします。
- name: copy config file
copy:
src: mongodb.conf
dest: /etc/mongodb.conf
owner: root
group: root
mode: 0644
notify:
- restart mongodb
タスク:MongoDB制限構成を作成します:
- name: create /etc/security/limits.d/mongodb.conf
copy:
src: security-mongodb.conf
dest: /etc/security/limits.d/mongodb.conf
owner: root
group: root
mode: 0644
notify:
- restart mongodb
タスク:swappinessの構成
- name: config vm.swappiness
sysctl:
name: vm.swappiness
value: '10'
state: present
タスク:TCPキープアライブ時間を構成する
- name: config net.ipv4.tcp_keepalive_time
sysctl:
name: net.ipv4.tcp_keepalive_time
value: '120'
state: present
タスク:MongoDBが自動的に起動することを確認します
- name: Ensure mongodb is running and and start automatically on reboots
systemd:
name: mongodb
enabled: yes
state: started
これらすべてのタスクを1つのプレイブックに結合し、プレイブックを実行して展開を自動化できます。コンソールからAnsibleプレイブックを実行する場合:
$ ansible-playbook -b mongoInstall.yml
Ansibleスクリプトからデプロイの進行状況が表示されます。出力は、次のようになります。
PLAY [ansible-mongo] **********************************************************
GATHERING FACTS ***************************************************************
ok: [10.10.10.11]
TASK: [install mongoDB] *******************************************************
ok: [10.10.10.11]
TASK: [copy config file] ******************************************************
ok: [10.10.10.11]
TASK: [create /etc/security/limits.d/mongodb.conf]*****************************
ok: [10.10.10.11]
TASK: [config vm.swappiness] **************************************************
ok: [10.10.10.11]
TASK: [config net.ipv4.tcp_keepalive_time]*************************************
ok: [10.10.10.11]
TASK: [config vm.swappiness] **********************************************
ok: [10.10.10.11]
PLAY RECAP ********************************************************************
[10.10.10.11] : ok=6 changed=1 unreachable=0 failed=0
デプロイ後、ターゲットサーバー上のMongoDBサービスを確認できます。
ClusterControlGUIを使用したMongoDBのデプロイの自動化
ClusterControlを使用してMongoDBをデプロイする方法は2つあります。 ClusterControlのダッシュボードから使用できます。これはGUIベースであり、MongoDBの新しいデプロイのための新しいジョブをトリガーするまで2つのダイアログが必要です。
まず、SSHユーザーとパスワードを入力し、次に示すようにクラスター名を入力する必要があります。
次に、MongoDBのベンダーとバージョンを選択し、ユーザーを定義して、パスワード、最後はターゲットIPアドレスを入力する
s9sCLIを使用したMongoDBのデプロイ自動化
コマンドラインインターフェイスから、s9sツールを使用できます。 s9sを使用したMongoDBのデプロイは、以下のように1行のコマンドです。
$ s9s cluster --create --cluster-type=mongodb --nodes="10.10.10.15" --vendor=percona --provider-version=4.2 --db-admin-passwd="12qwaszx" --os-user=vagrant --cluster-name="MongoDB" --wait
Create Mongo Cluster
/ Job 183 FINISHED [██████████] 100% Job finished.
したがって、ReplicaSetであろうとSharded Clusterであろうと、MongoDBのデプロイは非常に簡単で、ClusterControlによって完全に自動化されています。