Ansible構成管理システム

12396 ワード

Ansibleは構成管理システムconfiguration Management systemであり、sshを使用してサーバまたはデバイスにアクセスするだけでよい.1.ソフトウェアのインストール2.サービスの構成
第1章Ansibleで何ができるか
ansibleは、一括タスクを完了したり、頻繁に繰り返される作業を完了したりするのに役立ちます.たとえば、nfsサービスを100台のサーバに同時にインストールし、インストール後にサービスを開始します.たとえば、あるファイルを100台のサーバに一度にコピーします.たとえば、新しいサーバが作業環境に参加するたびに、新しいサーバにサービスを導入します.つまり、同じ作業を頻繁に繰り返す必要があります.これらのシーンではansibleを使用できます.
1.1 Ansibleソフトウェアの特徴
1.ansibleは単独でクライアントをインストールする必要はなく、SSHはansibleクライアントに相当する.2.ansibleはサービスを起動する必要はなく、対応するツールをインストールするだけでよい.3.ansibleは大量のpythonモジュールに依存して一括管理を実現する.4.ansibleプロファイル/etc/ansible/ansible.cfg
1.2管理機m 01から他の機器への鍵認証の実現
ansible公開鍵による一括管理
1.2.1非交換ツールによる公開鍵の一括配布と一括管理サーバの実現
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]


1.3構成手順
1.3.1 ansibleの取り付け
[root@m01 ~]# yum install ansible -y

2.  ansible
[root@m01 ~]# vim /etc/ansible/hosts
[oldboy]
172.16.1.31
172.16.1.41

3.  ansible
ansible   ssh      
[root@m01 ~]# ansible oldboy -m ping
172.16.1.7 | SUCCESS => {
"changed": false, 
"ping": "pong"
}
172.16.1.31 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
172.16.1.41 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}


1.3.2一括実行コマンド
[root@m01 ~]# ansible oldboy -m command -a "df -h" 


対応するホストに公開鍵が発行されていない場合は、パスワードで172.16.1.41 ansible_を追加できます.ssh_user=’root’ ansible_ssh_pass=’1′ ansible_ssh_port=’22’
1.4ホスト構成表の定義
[web]
172.16.1.7

[nfs]
172.16.1.31

[backup]
172.16.1.41

[oldboy:children]
web
nfs
backup

[root@m01 ~]# ansible web --list-hosts          #web
  hosts (1):
    172.16.1.7
[root@m01 ~]# ansible nfs --list-hosts          #nfs
  hosts (1):
    172.16.1.31
[root@m01 ~]# ansible backup --list-hosts       #rsync
  hosts (1):
    172.16.1.41
[root@m01 ~]# ansible oldboy --list-hosts       #       ,           
hosts (3):
172.16.1.31
172.16.1.41
172.16.1.7


1、コマンド->ファイル=スクリプト2、モジュール->ファイル=シナリオ
モジュール
さぎょう
command
コマンドの実行
shell
コマンドの実行(パイプシンボルのサポート)
yum
ソフトウェアモジュールのインストール
copy
モジュールの構成
service
サービスモジュールの起動
user
ユーザー管理
file
ディレクトリの作成、ファイルの作成、ファイルへの内容の書き込み
cron
タイミングタスク
mount
マウント
commandコマンドモジュール
    ,     
[root@m01 ~]# ansible oldboy  -a "hostname"

          ,   shell
[root@m01 ~]# ansible oldboy -m shell -a "ifconfig|grep eth0" -f 50


-f=forks/etc/ansible/ansible.cfg#結果が返す数
yum取付モジュール
         ,        
[root@m01 ~]# ansible oldboy -m yum -a "name=httpd state=installed"
name    ---           
state   ---    yum   
installed,present   ---     
removed,absent      ---     
latest               ---       


copyモジュール
      
[root@m01 ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/test.txt owner=www group=www mode=0600"

           ,           ,        
[root@m01 ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup=yes"

              ,                
[root@m01 ~]# ansible oldboy -m copy -a "content='bgx' dest=/tmp/oldboy"


copyモジュールの主なパラメータ
src-データをプッシュするソースファイル情報dest-データをプッシュするターゲットパスbackup-送信されたファイルをバックアップcontent-管理されたエンドファイルに直接一括してコンテンツgroupを追加-ローカルファイルをリモートにプッシュし、ファイルグループ情報ownerを指定-ローカルファイルをリモートにプッシュし、ファイルがプライマリ情報modeを指定-ローカルファイルはリモートにプッシュされ、ファイル権限情報forceを指定します.force=noまたはyesに分けられます.ターゲットホストにファイルが含まれていますが、内容が異なり、yesに設定されている場合は強制的に上書きされます.noの場合、ターゲットホストのターゲット位置にファイルが存在しない場合にのみコピーされます.デフォルトはyesです.
サービスモジュール
[root@m01 ~]# ansible oldboy -m service -a "name=crond state=stopped enabled=yes"


しゅパラメータ
name-サービスを開始する名前stateを定義-サービスステータスが停止またはstartedの実行-stoppedの起動-restartedの停止-reloadedの再起動-enabledの再ロード-サービスを開始するかどうかを指定します.
1.    
[root@m01 ~]# ansible web -m yum -a "name=httpd state=installed"
2.    
[root@m01 ~]# ansible web -m copy -a "content='This is Ansible' dest=/var/www/html/index.html"  
3.    
[root@m01 ~]# ansible web -m service -a "name=httpd state=started"


scriptモジュール
スクリプトの作成[root@m01 ~]# mkdir -p/server/scripts [root@m01 ~]# cat/server/scripts/yum.sh
!/usr/bin/bash
yum install -y iftop
モジュールをローカルで実行することは、リモートで実行することと同じであり、スクリプトファイルをターゲットホストにプッシュする必要はありません[root@m01 ~]# ansible oldboy -m script -a “/server/scripts/yum.sh”
file構成モジュール
ディレクトリを作成[root@m01~]#ansible oldboy-m file-a"path=/tmp/oldboy state=diretory"作成ファイル[root@m01 ~]# ansible oldboy -m file -a “path=/tmp/tt state=touch mode=555 owner=root group=root” [root@m01 ~]# ansible oldboy -m file -a “src=/tmp/tt path=/tmp/tt_link state=link”path-リモートホストディレクトリまたはファイル情報recurseの指定-再帰的認可state-directory-リモートでディレクトリtouchを作成-リモートでファイルlinkを作成-linkまたはhardでリンクファイルabsentの作成-ファイルまたはディレクトリmodeの削除-ファイルまたはディレクトリ権限ownerの設定-ファイルまたはディレクトリ所有者情報groupの設定-ファイルまたはディレクトリグループ情報
グループモジュール
name-作成したグループ名gidを指定-グループのgid state absentを指定-リモートホストのグループpresentを削除-リモートホストのグループを作成(デフォルト)
グループを作成しgidを指定[root@m01 ~]# ansible oldboy -m group -a “name=oldgirl gid=888”
userモジュール
uid-ユーザーのuidグループを指定-ユーザーグループ名groupsを指定-追加グループ名passwordを指定-ユーザーにパスワードshellを追加-ユーザーログインshell create_homeを指定-ホームディレクトリを作成するかどうか
oldgirlを作成し、uidを888に設定し、gidを888に追加します[root@m01~]#ansible oldboy-m user-a"name=oldgirl uid=888 group=888 shell=/sbin/nologin create_home=no"ランダムに暗号化文字列を生成(-1 MD 5を用いて暗号化-stdin非インタラクティブ-salt暗号化パラメータ)[root@m01~]#echo"bgx"|openssl passwd-1-stdin固定暗号化文字列[root@m01 ~]# echo “123”| openssl passwd -1 -stdin -salt ‘salt
一般ユーザを作成し、対応するユーザパスワードを設定[root@m01 ~]# echo “bgx” | openssl passwd -1 -stdin 1KmeCnsK1diDKPRoCIPMU6KEVEaPTZ0″‘
crondモジュール
crondサービスを正常に使用[root@m01 ~]# crontab -l
  • /bin/sh/server/scripts/yum.sh





  • ansibleを使用してタイミングタスクを追加[root@m01 ~]# ansible oldboy -m cron -a “minute=* hour=* day=* month=* weekday=* job=’/bin/sh/server/scripts/test.sh'” [root@m01 ~]# ansible oldboy -m cron -a “job=’/bin/sh/server/scripts/test.sh'”
    タイミングタスクコメント情報の設定、重複防止、name設定[root@m01 ~]# ansible oldboy -m cron -a “name=’cron01′ job=’/bin/sh/server/scripts/test.sh'”
    適切なタイミングタスクを削除[root@m01 ~]# ansible oldboy -m cron -a “name=’ansible cron02′ minute=0 hour=0 job=’/bin/sh/server/scripts/test.sh’ state=absent”
    適切なタイミングタスクを注釈し、タイミングタスクを失効させる[root@m01 scripts]# ansible oldboy -m cron -a “name=’ansible cron01′ minute=0 hour=0 job=’/bin/sh/server/scripts/test.sh’ disabled=yes”
    mountモジュール
    present-起動マウント、マウント構成のみを/etc/fstab mounted-マウントデバイスに書き込み、構成を/etc/fstab unmounted-マウントデバイスに書き込み、/etc/fstab書き込みの構成absent-マウントデバイスを消去せず、/etc/fstab書き込みの構成をクリーンアップ
    マウントの構成のみ/etc/fstabに書き込み、マウント操作は実行されません
    [root@m01 ~]# ansible oldboy -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=present"
    
    

    デバイスを一時的にマウントし、/etc/fstabにマウント情報を書き込む
    [root@m01 ~]# ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mounted"
    
    

    一時的にアンインストールしても/etc/fstabはクリーンアップされません
    [root@m01 ~]# ansible web -m mount -a “src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=unmounted”
    アンインストール、一時的なアンインストールだけでなく、/etc/fstabもクリーンアップ
    [root@m01 ~]# ansible web -m mount -a “src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=absent”
    1.マシンリストアスナップショット(firewalld、selinux、倉庫の配置)
    VMの選択-スナップショット-リカバリ
    2.あなたの公開鍵をプッシュ
    [root@m01 ~]# sshpass -p1 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
    3.Ansibleのホストリストの構成
    [root@m01 ~]# cat/etc/ansible/hosts [web] 172.16.1.7 172.16.1.8 [nfs] 172.16.1.31 [backup] 172.16.1.41
    ホストがOKかどうかを確認
    [root@m01 ~]# ansible all -m ping epel、firewalld、selinux、ww
    1.基礎環境:
    1.すべてのホストはrsyncとnfs-utilsをインストールする必要がある2.すべてのホストは対応するrsyncクライアントのパスワードファイル/etc/rsync.passを用意する必要がある3.すべてのホストはuidとgidが666のwwwユーザーを作成する必要がある4.すべてのホストは全ネットワークバックアップのスクリプトを必要とし、タイミングタスクを構成する必要がある
    1.rsyncとnfs-utilsのインストール
    [root@m01 ~]# ansible all -m yum -a “name=rsync,nfs-utils state=installed”
    2.rsyncのクライアントパスワードファイルの準備
    [root@m01 ~]# ansible all -m copy -a “content=’1′ dest=/etc/rsync.pass owner=root group=root mode=600”
    3.対応するwwwユーザーを準備し、uidとgidは666
    [root@m01 ~]# ansible all -m group -a “name=www gid=666” [root@m01 ~]# ansible all -m user -a “name=www uid=666 group=666 create_home=no shell=/sbin/nologin”
    4.対応するスクリプト・ファイルを管理からコピーし、タイミング・タスクに追加
    [root@m01 ~]# ansible all -m copy -a “src=./scripts/rsync_backup_md5.sh dest=/server/scripts/mode=755” [root@m01 ~]# ansible all -m cron -a “name=’Rsync Bakcup Scripts’ hour=01 minute=00 job=’/bin/bash/server/scripts/rsync_backup_md5.sh &>/dev/null'” [root@m01 ~]# pwd/root [root@m01 ~]# mkdir scripts [root@m01 ~]# cat scripts/rsync_backup_md5.sh
    #!/usr/bin/bash
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    
    #1.    
    Host=$(hostname)
    Addr=$(ifconfig eth1|awk 'NR==2{print $2}')
    Date=$(date +%F)
    Dest=${Host}_${Addr}_${Date}
    Path=/backup
    #2.      
    [ -d $Path/$Dest ] || mkdir -p $Path/$Dest
    
    #3.       
    cd / && \
    [ -f $Path/$Dest/system.tar.gz ] || tar czf $Path/$Dest/system.tar.gz etc/fstab etc/rsyncd.conf && \
    [ -f $Path/$Dest/log.tar.gz ] || tar czf $Path/$Dest/log.tar.gz  var/log/messages var/log/secure && \
    
    #4.  md5    
    [ -f $Path/$Dest/${Date}.flag ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/${Date}.flag
    
    #4.            
    export RSYNC_PASSWORD=1
    rsync -avz $Path/ [email protected]::backup
    
    #5.      7    
    find $Path/ -type d -mtime +7|xargs rm -rf
    
    

    2.アプリケーション環境:(rsyncサービスの構成->Backupサーバ)
    1.rsyncのインストール2.rsyncの構成、/etc/rsyncd.conf 3.ディレクトリの作成、仮想ユーザーファイルの作成、権限の変更4.サービスの開始、電源投入自起動5.メールボックスの構成、対応するスクリプトの準備
    1.rsyncのインストール
    [root@m01 ~]# ansible backup -m yum -a "name=rsync state=installed"
    
    

    2.rsync,/etc/rsyncd.confの構成
    [root@m01 ~]# ansible backup -m copy -a "src=./conf/rsyncd.conf dest=/etc/rsyncd.conf"
    [root@m01 ~]# pwd
    /root
    [root@m01 ~]# mkdir conf
    [root@m01 ~]# cat conf/rsyncd.conf
    uid = www
    gid = www
    port = 873
    fake super = yes
    use chroot = no
    max connections = 200
    timeout = 600
    ignore errors
    read only = false
    list = false
    auth users = rsync_backup
    secrets file = /etc/rsync.password
    log file = /var/log/rsyncd.log
    #####################################
    [backup]
    path = /backup
    [data]
    path = /data
    

    3.ディレクトリの作成、権限の変更、仮想ユーザーファイルの作成
    [root@m01 ~]# ansible backup -m file -a "path=/backup state=directory mode=755 owner=www group=www"
    [root@m01 ~]# ansible backup -m file -a "path=/data state=directory mode=755 owner=www group=www"
    [root@m01 ~]# ansible backup -m copy -a "content='rsync_backup:1' dest=/etc/rsync.password mode=600 owner=root group=root"
    
    

    4.サービスを起動し、起動してから起動する
    [root@m01 ~]# ansible backup -m service -a "name=rsyncd state=started enabled=yes"
    
    

    5.メールボックスの構成、対応するスクリプトの準備3.アプリケーション環境:(nfsサービスの構成)
    1.nfs-utilsをインストールする2.nfs-utilsを構成する3.対応する共有ディレクトリを作成し、権限を変更する4.nfsを起動する
    1.nfs-utilsのインストール
    [root@m01 ~]# ansible nfs -m yum -a "name=nfs-utils state=installed"
    
    

    2.nfs-utilsの構成
    [root@m01 ~]# ansible nfs -m copy -a "content='/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)' dest=/etc/exports"
    
    

    3.対応する共有ディレクトリを作成し、権限を再帰的に変更する
    [root@m01 ~]# ansible nfs -m file -a "path=/data state=directory recurse=yes owner=www group=www mode=755"
    
    

    4.nfsを起動する
    [root@m01 ~]# ansible nfs -m service -a "name=nfs-server state=started enabled=yes"
    
    

    4.アプリケーション環境:(ウェブサービスの構成、マウント操作)
    [root@m01 ~]# ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mounted"
    
    

    検証:
    1.nfsストレージが使用可能かどうかを検証する2.rsyncが3.backupサーバのプッシュを完了できるかどうかを検証する4.リアルタイム同期