一. ansible#
ansible
とは何か?どのような構成になっているのか?
どのような役割があるのか?
paramiko --> このライブラリ / モジュールは ansible が ssh 機能を実現するためのもの
とは何か?
ansible は自動化運用ツールの名称です。
どのような構成になっているのか?
ansible の構成:
1、host inventory --# クライアントを定義し、クライアントを分類できます:db タイプ、web タイプ... など
2、playbook --# プレイブック ホストが私が指定したプレイブックに従っていくつかの作業を完了します。
3、module --# モジュール 機能を実現するプログラム
4、pluging --# プラグイン 追加の小機能を実現します。
---------------------------------------
どのような役割があるのか?
ソフトウェアのインストール、アンインストール、設定の変更、パッチの適用、バックアップ、スクリプトの実行(運用作業)
---------------------------------------
ansible は python で書かれており、基盤は ssh です。
---------------------------------------
paramiko --》 このライブラリ / モジュールは ansible が ssh 機能を実現するためのものです。
---------------------------------------
sshpass モジュール --》linux コマンド ssh ログインを実現します。
---------------------------------------
[root@cPen_A ~]# ansible --version # 注:バージョンを確認
ansible 2.9.15
二. grep#
#grep関連コマンド
[root@cPen_B network-scripts]# cat /etc/passwd|grep -B 5 mail #注:前5行を確認
[root@cPen_B network-scripts]# cat /etc/passwd|grep -A 5 mail #注:後5行を確認
[root@cPen_B network-scripts]# cat /etc/passwd|grep -C 5 mail #注:前後5行を確認
[root@cPen_A ~]# vim /etc/ansible/ansible.cfg #注:ansible設定ファイル
forks = 5 #注:5つのプロセスを起動して処理する -fオプション
ipアドレスが表示されない
service NetworkManager stop #注:このサービスが影響している
service network restart
template テンプレート --> 大部分は固定されており、いくつかは変数で、ansibleがマシン上の値を取得します。
[root@cPen_A ansible]# ansible web -m setup #注:ノードサーバーの情報を確認 辞書形式で表示
192.168.0.79 | SUCCESS => {
"ansible_facts": {
……
}
[root@cPen_A ansible]# ansible web -m setup -a "filter=ansible_all_ipv4_addresses"
#注:指定情報をフィルタリングして取得
#注:ansible-demo3ホストのIPV4アドレスを取得
192.168.0.79 | SUCCESS => {
"ansible_facts": { #注:ansible_事実
"ansible_all_ipv4_addresses": [
"192.168.0.79"
],
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
==========================================================
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("特定のIPアドレス",22,"ユーザー名", "パスワード")
==========================================================
パスワード接続を使用する際の解決策、最初にsshで接続する際にyesを入力する必要があります。
[root@C ansible]# vim hosts
[web]
192.168.0.77
[db]
192.168.0.35 ansible_ssh_user=root ansible_ssh_pass=123456
[root@C ansible]# vim ansible.cfg
# SSHキーのホストチェックを無効にするにはコメントを外してください
host_key_checking = False
api インターフェース --> application interface
#注:インターフェースを書く
json 何に使うの?軽量なデータ交換フォーマット
[root@cPen_A ansible]# ansible-doc -l #注:ansibleのモジュールを確認
#注:doc ドキュメント、l リスト
lastestはインストールを示す 最新のものを指すわけではない
プロジェクト
ansible
プロジェクト名:ansibleを使用してnginxクラスターとmysqlクラスターを一括展開
プロジェクト環境:centos8.2、ansible2.9.15、nginx1.19.5、mysql5.7.31
プロジェクト説明:
ansibleを使用して6台のnginxサーバー、1台のNFSファイルサーバー、3台のMySQLサーバーを一括展開します。nginxはソースコードからコンパイルしてインストールし、MySQLはバイナリインストール、NFSはyumインストール方法を使用します。nginxのコンパイルインストールとMySQLのバイナリインストールプロセスは事前にスクリプトを作成し、ansibleを通じてnginxとMySQLサーバーに配布して実行します。全過程はplaybookを使用して一括自動化展開を実現します。
プロジェクトステップ:
1. 11台のlinux仮想マシンを展開し、すべての設定を行い、1コア2Gのメモリ構成でcentos8.2のシステムをインストールします。
2. 次に、1台のlinuxシステムにansibleをインストールし、yumを使用します。
3. nginxの一括インストールスクリプトを作成し、nginx.conf設定ファイルの内容も指定して、後のplaybookで使用できるようにします。
4. MySQLの一括インストールスクリプトを作成し、my.cnf設定ファイルの内容も指定して、後のplaybookで使用できるようにします。
5. ansibleサーバーとすべてのnginx、MySQL、NFSサーバー間にsshの無パスワード接続を確立します。
6. 最後にansibleのplaybookファイルを作成してnginx、MySQL、nfsサーバーを統一展開します。
7. インストール展開が成功したかどうかをテストします。
プロジェクトの感想:
1. ansibleの大規模クラスターでの使用について理解が深まり、一括展開の便利さを実感しました。
2. クラスターについて一定の認識を持ちました。
3. スクリプト作成能力が向上しました。
4. 自分でのトラブルシューティング能力を向上させました。
============================================================================================
プロジェクトを書くとき
1. データを整理する
nginx
とは何か?どのような役割があるのか?
nginx は web サーバーです。
web はウェブサイトです。
dns
domain name system ドメイン名解決システム
www.aliyun.com --> ip
なぜ DNS が必要なのか?
特定のウェブサイトの名前を覚えやすくするため
ip は覚えにくい
正引き解析:ドメイン名 --> ip
逆引き解析: ip --> ドメイン名
ブラウザに www.baidu.com と入力してエンターを押した後、何が起こるのか?
1、ブラウザキャッシュ
2、hosts ファイル
3、ローカル dns サーバー
4、転送サーバー
5、ルートドメインサーバー
6、反復プロセス
7、再帰的に返す
8、直接アクセス
CDN コンテンツ配信ネットワーク:加速(近くの解析)
#注:キャッシュには遅延がある
#注:動画サービスは CDN を大量に使用しています
レコードタイプ
A レコード --> address record
www --> 120.77.248.190
自分のウェブサイトを立ち上げるには、どのようなプロセス(作業)が必要か?
1、クラウドサーバーを購入し、nginx、mysql、Python などの環境を展開する。
2、ドメイン名 www.chenpeng.com を購入し、ドメイン名とクラウドサーバーをバインドする --> A レコード --> 登録(サーバーは国内で登録が必要)
3、ウェブサイトを開発する --> ウェブサイトを書く。
4、ウェブサイトをテストする。
5、クラウドサーバーの nginx ウェブページのルートディレクトリにアップロードする --> オンラインにする。
[root@cPen_C lianxi]# yum provides nslookup
#注:コマンドがどのパッケージからインストールされたかを確認
NFS
network file system ネットワークファイルシステム
どのような役割があるのか?
ファイルを共有する --> 複数のサーバーが同じ内容を使用する
#注:NFS は最も安価な解放ソリューションであり、ネットワークの影響、サーバーハードウェアの構成が低く、ディスクの速度、CPU、メモリ、ネットワーク帯域幅が比較的悪いです。
#注:比較的高価な解決策:専門のストレージを使用する
#注:さらに良いのは SAN 光ファイバーデバイスです。
SAN -->
NAS --> ネットワーク接続ストレージ
SAN は一般にストレージエリアネットワークを指します。ストレージエリアネットワーク(Storage Area Network、略して SAN)は、メッシュチャネル(Fibre Channel、略して FC、Fiber Channel 光ファイバーチャネルとは異なる)技術を使用し、FC スイッチを介してストレージアレイとサーバーホストを接続し、データストレージ専用のエリアネットワークを構築します。
NAS(Network Attached Storage:ネットワーク接続ストレージ)は、文字通りネットワークに接続され、データストレージ機能を持つデバイスであるため、「ネットワークストレージ」とも呼ばれます。
ansible
プロジェクト
dns
nginx 一括展開
ウェブサイトのオンライン化
NFS
SAN
NAS
nginx一括インストールスクリプト
#!/bin/bash
#author:cali
#time:2020-49
#company:sanchuang
#email:695811769@qq.com
mkdir -p /nginx2
cd /nginx2
#nginxをダウンロード
curl -O http://nginx.org/download/nginx-1.17.9.tar.gz
#ユーザーを作成
useradd lihu
#解凍
tar xf nginx-1.17.9.tar.gz
#解凍ディレクトリに入る
cd nginx-1.17.9
#依存関係を解決
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make
#設定
./configure --prefix=/usr/local/nginx9 --user=lihu --group=lihu --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --with-stream
#コンパイルとインストール
make -j 2 ; make install
#起動時に開始
echo "/usr/local/nginx9/sbin/nginx" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local
#PATH変数を変更
echo "PATH=/usr/local/nginx9/sbin:$PATH" >>/etc/profile
PATH=/usr/local/nginx9/sbin:$PATH
#起動
nginx