自動化された操作および保守ツール
要件:数百または数千のマシンが特定のコマンドをバッチで実行し、特定のサービスをバッチでアップグレードします。
Shell and Expectスクリプトは自動化できますが、スクリプトを自分で手動で作成する必要があります。これは、学習と保守に非効率的でコストがかかります。
主流の自動化された操作および保守ツール:Puppet、Saltstack、Ansibleなど。
傀儡
Puppetの概要:https://blog.51cto.com/ixdba/1149055
Puppetは、C / Sデプロイメントアーキテクチャに基づく、オープンソースのRubyベースのシステム構成管理ツールです。データセンターの自動管理を実現するために設計された構成管理ソフトウェアであり、クロスプラットフォーム言語仕様を使用して、構成ファイル、ユーザー、ソフトウェアパッケージ、システムサービスなどを管理します。デフォルトでは、クライアントは30分ごとにサーバーと通信して、更新があるかどうかを確認します。もちろん、アクティブトリガーを構成して、クライアントを強制的に更新することもできます。このようにして、日常のシステム管理タスクがコーディングされます。コーディングの利点は、それらを共有、保存、作業の重複を回避できること、および迅速に復元して大規模に迅速に展開できることです。
ソルトスタック
SaltstackはPythonで開発されており、非常に使いやすく軽量な管理ツールです。C / Sアーキテクチャは、マスターとミニオンで構成され、ZeroMQを介して通信します。Saltstackのマスターはポート4505と4506をリッスンし、4505はsaltメッセージ公開システム、4506はsaltクライアントとサーバー間の通信用のポートです。saltクライアントプログラムはポートを監視しません。クライアントが起動すると、ポートは監視されます。マスターにアクティブに接続して登録すると、TCP接続が維持され、マスターはこのTCP接続を介してクライアントを制御します。接続が切断されている場合、マスターはクライアントとは何の関係もありません。もちろん、クライアントが切断されたことを検出した場合、クライアントは定期的にマスターに接続し続けます。
Ansible
Ansibleとは何ですか?正式なタイトルは次のとおりです。AnsibleはシンプルなIT自動化です。中国語の説明:シンプルなIT自動化ツール。
このツールの目標は次のとおりです。APPの自動展開、構成アイテムの自動管理、自動継続的インタラクション、自動(AWS)クラウドサービス管理。
これらのターゲットはすべて、基本的に1つまたは複数のサーバーで一連のコマンドを実行しています。素人の言葉で言えば、リモートサーバー上でコマンドをバッチで実行することです。もちろん、最も重要なことは、それがparamikoに基づいて開発されているということです。このパラミコは何ですか?これは、sshプロトコルライブラリの純粋なPython実装です。したがって、ファブリックとansibleには、リモートホストと通信するためのsshに基づいているため、リモートホストにクライアント/エージェントをインストールする必要がないという共通点が1つあります。簡単な要約:Python paramikoに基づく開発、分散、クライアント不要、軽量、YMALおよびJinja2テンプレート言語を使用した構成構文、より強力なリモートコマンド実行操作。
SaltstackとAnsible
Saltstackはエージェント(ミニオン)をインストールする必要があるため、デプロイプロセスはもう1つのステップであり、Ansibleはエージェントをインストールする必要はありません。
SaltStackはマスターとミニオンを備えたC / Sアーキテクチャであり、Ansibleには中央ノードがあれば十分です。
SaltstackはZeroMQ通信に基づいており、Ansibleはsshに基づいており、Saltstackの実行効率はAnsibleよりも高速です。マシンの数が多い(> 200)場合は、Saltstackを使用することをお勧めします。
AnsibleはSaltstackよりも習得が簡単です
他の側面のより詳細な比較については、を参照してください。
https://www.cnblogs.com/huang0925/p/4664608.html
Ansible
公式ウェブサイトwww.ansible.com
オンライン電子書籍:https://getansible.com
Ansibleは、RedHatがスポンサーとなっているオープンソースソフトウェアです。これは、システムからネットワーク、開発に至るまで、ITチーム全体で使用できる自動化言語です。仮想化(Vmware、RHEV、Xenなど)、ネットワーク機器(Cisco、F5、OpenSwitch)、コンテナー(Docker、LXC)、パブリッククラウド(Amazon Cloud AWS、Microsoft Azure)、DEVOPS(Gitlab、Githubなど)が統合されています。 。)Jenkins)、監視/分析(Splunk、InfluxDB)および他の多くのフィールド。
Ansibleをインストールする
ドキュメント:https://docs.ansible.com/ansible/latest/index.html
CentOS7にAnsibleをインストールします。
yum install -y epel-release
yum install -y ansible
さらに、ansibleはpipのインストールもサポートしています
yum install python-pip
pip install ansible
ログインが成功したことを確認し、バージョンを確認します
ansible --version
Ansibleはエンジェルレスであるため、コントロールセンターは1つしかなく、他のマシンはソフトウェアパッケージをインストールする必要がありません。ただし、リモートマシンを制御する場合は、キー認証を構成する必要があります。
1)コントロールセンターでキーペアを生成します
最初にls / root / .ssh /をチェックして、このディレクトリにid_rsaとid_rsa.pubの2つのファイルがあるかどうかを確認することをお勧めします。次のコマンドが実行されない場合
`` `
ssh-keygen
[root @ jinkai01〜]#ssh-keygen
[root @ jinkai01〜] #ls /root/.ssh/
authorized_keys id_rsa id_rsa.pubknown_hosts
`` `
2)キー認証を構成します
コントロールセンターで、ssh-copy-idを実行します
ssh-copy-id [user @]リモートマシンIP
[root @ jinkai01〜]#ssh-copy-id 192.168.111.140
パスワードなしのリモートログインを確認する
[root @ jinkai01〜] #ssh 192.168.111.140
最終ログイン:月12月7日21:51:422020からjinkai01
[root @ jinkai05〜]#
3)ホストファイルを編集します
Ansibleは、デバイスリストを/ etc / ansible / hostsファイルにグループ化して追加することでデバイスの管理を実現します。したがって、正式な管理を行う前に、まずホストファイルを書き込む必要があります。ホストファイルでは、[]に含まれる部分がグループ名を表し、デバイスリストはホスト名とIPアドレスをサポートします。
デフォルトでは、デバイスはポート22(SSH)にアクセスすることによって管理されます。ターゲットホストがデフォルト以外のSSHポートを使用している場合は、ホスト名の後にコロンとポートを使用して構成を示し、構成を行単位で区切ることもできます。さらに、hostsファイルはワイルドカードもサポートしています。
#フォーマットは以下の通りです
vim / etc / ansible / hosts
## [テスト]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
テスト
Ansibleによって返される結果は非常にわかりやすく、通常、実行結果を示すために3つの色が使用されます。
赤:実行中に異常があることを示します。
オレンジ色:コマンドの実行後にターゲットのステータスが変化したことを示します。
緑:実行が成功し、ターゲットマシンに変更がないことを示します。
ansible all -m ping
[root @ jinkai01〜] #cat / etc / ansible / hosts
[テスト]
192.168.111.140
jinkai05
[root @ jinkai01〜] #ansible all -m ping
jinkai05 | 成功=> {
"ansible_facts":{
"discovered_interpreter_python": "/ usr / bin / python"
}、
「変更された」:false、
"卓球"
}
192.168.111.140 | 成功=> {
"ansible_facts":{
"discovered_interpreter_python": "/ usr / bin / python"
}、
「変更された」:false、
"卓球"
}
[root @ jinkai01〜]#
#ここで、allはhostsファイル内のすべてのホストを表すか、単一のホストを指定できます
ansible jinkai05 -m ping
[root @ jinkai01〜] #ansible jinkai05 -m ping
jinkai05 | 成功=> {
"ansible_facts":{
"discovered_interpreter_python": "/ usr / bin / python"
}、
「変更された」:false、
"卓球"
}
コマンドをリモートで実行する
コマンドモジュール
コマンドモジュールはリモートホスト上でコマンドを実行し、パイプやリダイレクトなどのシェル機能をサポートしていません。一般的に使用されるパラメータは次のとおりです。
chdir:リモートホストでコマンドを実行する前に事前に入力するディレクトリ。
作成:コマンドの実行時にファイルを作成します。ファイルが既に存在する場合、作成タスクは実行されません。削除:コマンドの実行時にファイルを削除します。ファイルが存在しない場合、削除タスクは実行されません。 ;実行可能:コマンドシェルプログラムを実行することを示します
[root @ jinkai01〜] #ansible test -m command -a "chdir = / ls ./"
ansible test -m command -a'hostname '
[root @ jinkai01〜] #ansible test -m command -a'hostname '
jinkai05 | 変更| rc = 0 >>
jinkai05
192.168.111.140 | 変更| rc = 0 >>
jinkai05
#ここでのテストは、ホスト構成ファイルで構成されたホストグループ名であり、モジュール名は-mの後に指定され、ここでのコマンドはコマンドをリモートで実行するモジュールであり、-aの後に特定のコマンドが続きます
ansible 127.0.0.1 -m shell -a'w '
[root @ jinkai01〜] #ansible 127.0.0.1 -m shell -a'w '
127.0.0.1 | 変更| rc = 0 >>
22:07:31アップ2:17、1ユーザー、負荷平均:0.20、0.13、0.09
LOGIN @ IDLE JCPUPCPUからのユーザーTTY
ルートpts / 0 192.168.111.1 19:56 3.00s 0.95s 0.01sw
#コマンドモジュールに加えて、シェルモジュールを使用してリモートコマンド実行を実装することもできます。シェルは、リモートホストでのシェルスクリプトの実行もサポートします。
リモートスクリプトの実行
シェルモジュール
シェルモジュールは、リモートホストでコマンドを実行します。これは、リモートホストのシェルプロセスを呼び出すのと同じです。次に、サブシェルを開いて、シェルの下でコマンドを実行します。コマンドモジュールとの違いは、パイプ、リダイレクトなどのシェル機能をサポートしていることです。
まず、次の内容のシェルスクリプト/tmp/1.shを作成します。
#!/ bin / bash
エコーdate
> /tmp/ansible_test.txt
次に、スクリプトを各マシンに配布します
ansible test -m copy -a "src = / tmp / 1.sh dest = /tmp/test.sh mode = 0755"
最後に、シェルスクリプトをバッチで実行します
ansible test -m shell -a "/tmp/test.sh"
シェルモジュール、コマンドのリモート実行とパイプもサポート
ansible test -m shell -a "cat / etc / passwd | wc -l"
ファイルまたはディレクトリをコピーする
コピーモジュール
コピーモジュールは、指定されたホストファイルをリモートホストの指定された場所にコピーするために使用されます。一般的なパラメータは次のとおりです。
dest:絶対パスを使用して、ファイルをコピーするためのターゲットディレクトリの場所を示します。ソースがディレクトリの場合、ターゲットもディレクトリである必要があります。ターゲットファイルがすでに存在する場合、元のコンテンツは上書きされます。
src:ソースファイルのパスを指定します。相対パスと絶対パスを使用できます。ディレクトリを直接指定することをサポートします。ソースがディレクトリの場合、ターゲットもディレクトリである必要があります。
モード:コピー時のターゲットファイルの許可を示します。オプションです。
所有者:コピー時のターゲットファイルの所有者を示します。オプションです。
group:コピー時のターゲットファイルのグループを示します。オプションです。
content:ターゲットホストにコピーされたコンテンツを指摘します。srcでは使用できません。これはコピーと同等です。
コンテンツによってターゲットファイルに指定されたデータ。
ansible jinkai05 -m copy -a "src = / etc / passwd dest = / tmp / test123 owner = root group = root mode = 0755"
[root @ jinkai01〜] #ansible jinkai05 -m copy -a "src = / etc / passwd dest = / tmp / test123 owner = root group = root mode = 0755"
jinkai05 | 変更=> {
"ansible_facts":{
"discovered_interpreter_python": "/ usr / bin / python"
}、
「変更された」:true、
"チェックサム": "75a4463c380b111d3bf0f2dae9787bc339b2f86e"、
"dest": "/ tmp / test123"、
「gid」:0、
"グループ": "ルート"、
"md5sum": "4b94e9c4fce7a5a255401706b959b739"、
「モード」:「0755」、
「所有者」:「ルート」、
「サイズ」:1030、
"src": "/root/.ansible/tmp/ansible-tmp-1607350135.26-8003-211914668409808/source"、
"状態": "ファイル"、
「uid」:0
}
#注:ソースディレクトリはターゲットディレクトリの下に配置されます。ターゲットで指定されたディレクトリが存在しない場合は、自動的に作成されます。コピーがファイルの場合、destで指定された名前がソースと異なり、既存のディレクトリでない場合は、コピー後に名前を変更するのと同じです。ただし、逆に、descがターゲットマシンにすでに存在するディレクトリである場合、ファイルはディレクトリに直接コピーされます。
ansible test -m copy -a "src = / etc / passwd dest = / tmp / 123"
#ここでの/ tmp / 123は、ソースマシンの/ etc / passwdと同じですが、ターゲットマシンにすでに/ tmp / 123ディレクトリがある場合、passwdファイルは/ tmp / 123ディレクトリの下に作成されます。
参照リンク:https://www.cnblogs.com/keerya/p/7987886.html
拡張機能:Ansible共通モジュール
1)モジュールヘルプの表示:ansible-docモジュール名:ansible-docシェル検索:/ EXケースの表示
2)pingモジュール:ターゲットホストに接続されているsshポートが正常に通信できるかどうかをテストします
[root@jinkai01 ~]#
ansible` test -m ping -o```
3)コマンドモジュール:リモートホストコマンドに使用されます。デフォルトモジュール、シェルモジュールをお勧めします
[root@jinkai01 ~]# ansible test -m
コマンド-a
'uptime' ``
4)シェルモジュール:リモートコマンド、いくつかの簡単なシェルコマンドを実行します
`[root @ jinkai01〜]#` `ansible test -m shell -a'cat / etc / passwd | grep root '` ``
5)コピーモジュール:ファイルをリモートホストにコピーします
[root@jinkai01 ~]# ansible test -m
copy -a'src = / etc / hosts dest = / tmp / hosts '``
[root@jinkai01 ~]# ansible test -m
copy -a'src = / etc / hosts dest = / tmp / hosts backup = yes'``
6)ユーザーモジュール:ユーザーの作成と削除
创建用户:ansible test -m user -a
'name = jack shell = / sbin / nologin'``
删除用户:ansible test -m user -a
'名前=ジャック状態=不在' ``
echo
123 | openssl passwd
-1` -stdin```
ansible test -m user -a
'name = jack password = "$ 1 $ Ec9OCYTb $ OJtUgRRglXNuEMmSCLfPl /"' ``
7)yumモジュール:ソフトウェアパッケージをインストールおよびアンインストールします
安装:ansible test -m yum -a
'name = httpd state = latest' ``
卸载:ansible test -m yum -a
'name = httpd state = Absent'``
8)サービスモジュール:サービスの実行ステータスを制御します
ansible'name test -m service -a
= httpd state = started enabled = yes '`\ state``はサービスの開始、再起動、およびシャットダウンです。enabledはサーバーの起動です` ``
ansible test -m service -a
'name = httpd state = stopped enabled = no'` `` `
9)ファイルモジュール:ファイルまたはディレクトリを作成します
创建文件:ansible test -m file -a '
パス=/tmp/
1.log
モード=
777`state = touch'`` `
创建目录:ansible test -m file -a '
パス=/tmp/dir1
モード=
777`状態=ディレクトリ '`` `
10)cronモジュール:定義されたタスクを作成および削除します
ansible test -m cron -a
'name =
"test" minute=
"* / 10" job=
"/ bin / echo hello" `'` ``
ansible test -m cron -a
'name =
"test2" minute=
"00" hour=
"03" job=
"/ bin / echo hello" `'` ``
移除:ansible test -m cron -a `'name`=`"test2"` minute=`"00"` hour=`"03"` job=`"/bin/echo hello"` state=absent'