テクノロジーは日々変化しており、最新のアプリケーションは、組織の短納期の期待に応えるために、深刻な調整を行う必要があります。残念ながら、これにより、それらはより複雑になり、より洗練され、保守が難しくなります。
データベース管理に関しては、MongoDB内のデータ構造は、アプリケーションのニーズに応じて時間の経過とともに変化し、非常に高額になる可能性があります(またはかなりリスクが高くなります)。
長期的には、効率的なデータベースを簡単に構成し、適切なソフトウェア配信を確保する必要があります。これらすべてを手動で達成するには、
などの多くの挫折が伴います。- チームメンバー間の複雑な調整。
- タスクが繰り返される可能性が高い
- 多くの人為的ミスやエラーの影響を受けやすい
- 複雑さを克服するのは難しい
- コラボレーションと仕事に対する不満の軽減
- 時間がかかる
- 説明責任とコンプライアンスが不十分
データベース管理の難しさは主に
に集中しています- 展開
- 維持
- アップグレードすると、運用オーバーヘッドが最大95%削減される可能性があります。
これを達成するには、MongoDBにとって多くの時間と手作業が必要になる可能性があります。成功を確実にするには、上記のすべての挫折にタイムリーに単一のプラットフォームから対処できるシンプルなシステム、つまり、何らかの方法で自動化されたシステムが必要になります。かなりの数のオプションがありますが、この記事では、Ansibleの利用方法について説明します。
Ansibleとは
Ansibleは、作業がどのように行われるかという謎を解き明かす、単なる普遍的な言語です。つまり、アプリケーションの展開、構成管理を自動化し、ダウンタイムのローリング更新のゼロ化や継続的な展開など、より高度なITタスクを調整するITオーケストレーションエンジンです。
人間による「可聴性」を中心に設計された言語を使用することで、セキュリティと信頼性に重点を置いたエージェントレスの方法でマシンを簡単に管理できます。
MongoDBのデプロイはそれほど難しくないかもしれませんが、時間の経過とともに、メンテナンス、バックアップ、およびモニタリングが懸念事項の増加になります。さらに、データベース管理に不慣れな場合はそれほど簡単ではありません。 Ansibleの開発者は、アプリケーションを簡単にデプロイおよび構成できるため、あらゆるホスティングプラットフォームへの迅速な配信も可能になります。
Ansibleはデータベースクラスターシステムの一部ではないため、任意のリモートコンピューターにインストールしたり、データベースホストに対して構成を行ったりすることができます。ご使用のオペレーティングシステムに適したバージョンについては、インストールガイドを確認してください。
Ansibleは、デフォルトで、SSHプロトコルを介してデータベースホストに接続します。
Ansible Playbooks
プレイブックは、Ansibleコードが記述されているテンプレートであるため、Ansible自体にToDoリストのような方法で何を実行するかを指示します。それらはYAML(Yet Another Markup Language)形式で書かれています。それぞれに、順次実行される特定のマシン上のユーザーが従うステップバイステップの操作が含まれています。それらの構造は、1つ以上の演劇で構成されています。 Playは基本的に、特定のホストに対して定義された一連の命令をマップするコードブロックです。
Ansibleで一般的に使用されるYAMLタグ
-
名前
これは、Ansibleプレイブックの名前を定義するタグです。何をするかを正確に定義する名前を設定することをお勧めします。
-
ホスト
これは、定義されたタスクが実行されるホストグループまたはホストのリストを定義します。これは、リストされているタスクを実行するホストをAnsibleに指示する必須のタグです。タスクは同じマシンまたはリモートマシンの複数のマシンで実行できるため、このタグでホストエントリのグループを定義できます。
-
vars
他のプログラミング言語と同様に、変数が必要になります。このタグを使用すると、プレイブックで使用する変数を定義できます。
-
タスク
このタグを使用すると、実行する一連のタスクを一覧表示できます。タスクは、実際には実行する必要のあるアクションです。タスクフィールドは、プレイブックのデバッグ中にユーザーのテキストを本質的に支援するタスクの名前を定義します。モジュールとして定義されたコードは、各タスクによって内部的にリンクされ、モジュール内で使用される引数はすべて、tasksタグを介して渡されます。
シンプルなプレイブックの構造は次のようになります...
---
name: install and configure DB
hosts: testServer
become: yes
vars:
mongoDB_Port : 27017
tasks:
-name: Install the mongodb
yum: <code to install the DB>
-name: Ensure the installed service is enabled and running
service:
name: <your service name>
MongoDBをインストールして起動するための簡単なプレイブックの作成
-
ルートSSHアクセスの有効化
管理対象ノードの設定によっては、rootユーザーとしてログインできない場合があるため、これを解決するためにプレイブックを定義する必要があります。次のようなプレイブックenable-root-access.ymlを作成します
--- - hosts: ansible-test remote_user: ubuntu tasks: - name: Enable root login shell: sudo cp ~/.ssh/authorized_keys /root/.ssh/
コマンドを実行するとき
$ ansible-playbook -i inventory.txt -c ssh enable-root-access.yaml
PLAY [ansible-test] *********************************************************** GATHERING FACTS *************************************************************** TASK: [Enable root login] ***************************************************** PLAY RECAP ********************************************************************
-
mongodbInstall.yamlでホストとユーザーを選択する
--- - hosts: ansible-test remote_user: root become: yes
-
実行するタスクの追加
タスクは順番に実行されるため、順番に概要を説明する必要があります。つまり、
- apt_keyを使用してリポジトリキーを追加します。 MongoDB公開GPGキーを最初にインポートする必要があります
- name: Import the public key used by the package management system apt_key: keyserver=hkp://keyserver.ubuntu.com:80 id=7F0CEB10 state=present
- MongoDBapt_repositoryの追加
- name: Add MongoDB repository apt_repository: repo='deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' state=present
- パッケージをインストールしてmongodを起動し、ローカルパッケージデータベースをリロードします
- name: install mongodb apt: pkg=mongodb-org state=latest update_cache=yes notify: - start mongodb
- サービスの管理、ハンドラーを使用したサービスの開始と再起動
handlers: - name: start mongodb service: name=mongod state=started
- apt_keyを使用してリポジトリキーを追加します。 MongoDB公開GPGキーを最初にインポートする必要があります
一般的なプレイブックコードは次のようになります
---
- 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 http://downloads-distro.mongodb.org/repo/ubuntu-upstart 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
次に、コマンド
を使用してansibleでこのファイルを実行できます。ansible-playbook -i inventory.txt -c ssh mongodbInstall.yaml
プレイブックが正常に実行された場合は、端末にこれが表示されます
PLAY [ansible-test] ***********************************************************
GATHERING FACTS ***************************************************************
ok: [12.20.3.105]
ok: [12.20.3.106]
TASK: [Import the public key used by the package management system] ***********
changed: [12.20.3.105]
changed: [12.20.3.106]
TASK: [Add MongoDB repository] ************************************************
changed: [12.20.3.105]
changed: [12.20.3.106]
TASK: [install mongodb] *******************************************************
changed: [12.20.3.105]
changed: [12.20.3.106]
NOTIFIED: [start mongodb] *****************************************************
ok: [12.20.3.106]
ok: [12.20.3.105]
PLAY RECAP ********************************************************************
12.20.3.105 : ok=5 changed=3 unreachable=0 failed=0
12.20.3.106 : ok=5 changed=3 unreachable=0 failed=0
ここでmongoを実行すると、mongoシェルに移動します
MongoDB shell version v4.0.3
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("07c88442-0352-4b23-8938-fdf6ac66f253") }
MongoDB server version: 4.0.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
結論
Ansibleは、アプリケーションのデプロイ、サービスのオーケストレーション、クラウドのプロビジョニングを自動化するシンプルなオープンソースのITエンジンです。
これは、データベースノードを接続し、モジュールと呼ばれる定義命令をそれらにプッシュアウトすることで機能し、デフォルトでSSHを介して実行し、終了時にそれらを取り除きます。デーモンやサーバーを実行しないため、任意のリモートマシンから実行できます。次のチュートリアルでは、Ansibleを使用してクラウドでMongoDBレプリカセットを維持する方法について説明します。