SaltStack自動化メンテナンス

7100 ワード

導入の考え方:
Pythonによる新しいサーバの自動追加:
サービス側に制御側IPとログインユーザ名パスワードを追加し、サービス側は制御側サーバーにstaltstack制御側を自動的にインストールし、自動的に構成する.制御側サーバーにログインする必要がなく、ユーザー名とパスワードを提供するだけで自動的に新しい制御側サーバーを追加することができる.
第一部分:基礎取付
ロール#ロール#
IP
SlatStackサーバ
10.10.29.113
制御端(一)
10.10.56.128
制御端子(二)
10.10.29.214
Salt-master配備:
1.epelソースのインストール:yum -y install epel-release2.saltstackのインストール:yum -y install salt-master chkconfig salt-master on && service salt-master start管理ユーザーの追加:useradd admin; echo password | passwd --stdin adminユーザーログインテスト:salt -a pam \* test.ping3.salt-masterファイアウォールルールの追加:
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 4505 -j ACCEPT 
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 4506 -j ACCEPT
service iptables save

Salt-minionインストール:
1.epelソースのインストール:yum -y install epel-release2.salt-minionのインストール:yum -y install salt-minion chkconfig salt-minion on && service salt-minion startSalt-minion接続サーバ:
1.Salt-minion操作:編集/etc/salt/minionファイル:vi /etc/salt/minion注意:番号の後ろのスペース、さもないと再起動サービスが間違っています!
master: 10.10.29.113

2.slat-minionサービスを再起動する.service salt-minion restart3.Salt-master操作:すべての接続制御端を表示する:salt-key -L指定制御端証明書の接続を受け入れることを確認する:salt-key -a すべての制御端証明書の接続を受け入れることを確認する:salt-key -A一般的な操作
接続が正常かどうかをテストする:salt '*' test.pingshellコマンド実行salt '*' cmd.run "uptime"説明:*はすべてのSalt-minionを表し、単独テストでSalt-minionを指定し、対応するSalt-minion名に変更する
第二部分:簡単な構成管理
配置apacheを例にとると:1.プロファイルの場所を指定する:slsファイルのインデント要件:上位と下位の2つのスペースをインデントしてSalt-masterプロファイルを編集する、file_rootsブロックvi /etc/salt/master
file_roots:
  base:
    - /srv/salt

2.プロファイルslsのminion_の編集IDが10-10-56-128のsalt-minionにhttpdとhttpd-develパッケージをインストールする:top.slsを編集する:
base:
  '10-10-56-128':
      - apache

apache.slsを編集(⚠注意ファイル名はtop.slsで定義したものと同じで、ファイル名の接尾辞はslsです):
apache-services:#      
  pkg.installed:#       
    - names:#        
      - httpd
      - httpd-devel
  service.running:#        
    - name: httpd#      
    - enable:True#         

構成完了後実行:salt '10-10-56-128' state.highstate第3部:Grainsデータシステム(静的データ):
1.Salt-minionのステータス情報の取得(grainsはsalt-minion起動時のみ情報収集)すべての情報取得コマンド:salt '*' grains.items指定パラメータ情報の取得:salt '*' grain.get shell2.Salt-minionをカスタマイズするgrains:新規/etc/salt/grainsの編集(編集完了後、salt-minionサービスの再起動が必要)service: websalt-masterでカスタムgrainsを取得する:salt '*' grains.get servicegrainsを使用してSalt-minion実行コマンドをマッチングする:salt -G service:web cmd.run 'service httpd status'第四部分:Pillarデータシステム(動的データ):
zabbixを例に:1.salt-masterマスタープロファイルの変更(修正実行service slat-master restartsaltマスターサービスの再起動):vi /etc/salt/master
pillar_roots:
  base:
    - /srv/pillar

2.新規編集/srv/pillar/top.slsファイル:
base:
  '10-10-56-128':
    - zabbix

3.新規編集/srv/pillar/zabbix.slsファイル:Zabbix_Server: 10.10.29.1134.同期pillar構成のリフレッシュ:salt '*' saltutil.refresh_pillar5.pillar構成状態の取得:salt '*' pillar.items6.指定されたpillarでコマンドを実行:salt -I Zabbix_Server:10.10.29.113 test.ping第5部:saltstackリモート実行--Targeting詳細
minionID関連照合
minionIDネーミング仕様:
mysql-mysql001-BGP04-search.baidu.com
_____ ________ _____ ______ __________
                           

1.*ワイルドカード*---はすべてのweb*---web文字を含むすべての制御端を表しますか?---1文字のあいまいな一致!----2.リスト方式を含まないsalt -L '10.10.56.128,10.10.29.214' test.ping3.正規表現:salt -E '10-10-*' cmd.run 'df -h'
  • slsプロファイル内で正規表現を使用(最初の行は宣言-mach:pcre):
  • base:
      '10-10-56-128':
        - mach: pcre 
        - zabbix
    

    5.IPアドレスによるSalt-minion:salt -S 10.10.56.128 cmd.run 'df -h'6.slsプロファイル内でgrainsを使用する(最初の行は宣言-mach:grain):
    base:
      '10-10-56-128':
        - mach: grain
        - zabbix
    

    6.複数条件マッチング:salt -C '10-10* or I@Zabbix_Server:10.10.29.113' cmd.run 'df -h'salt -C '10-10* and I@Zabbix_Server:10.10.29.113' cmd.run 'df -h'7.グループ(group)、直接グループを指定したり、様々なマッチング条件を定義してグループ化できる:編集/etc/salt/masterファイル
    nodegroups:
      group1: '[email protected],bar.domain.com,baz.domain.com and bl*.domain.com'
      group2: 'G@os:Debian and foo.domain.com'
    

    8.バッチ実行:salt '*' -b 2 test.ping同時操作2台Salt-minion
    セクション6:一般的なモジュールの使用
    1.Networkモジュール:
    1.tcp接続数を返すsalt '*' network.active_tcp2.serviceサービス管理モジュールsalt '*' service.get_allすべてのサービスを表示するsalt '*' service.status sshd指定サービス状態をチェックするsalt '*' service.restart sshd指定サービス状態を再開するsalt '*' service.stop sshd指定サービス状態を停止するsalt '*' service.start sshd指定サービス状態を起動する3.stateモジュール:salt '*' state.show_toptop.slsファイルの構成実行結果4.ACLモジュール:
    編集/etc/salt/master
    #   (           )
    client_acl:
      larry:
        - test.ping
        - network.*
    
    #   (           )
    client_acl_blacklist:
      users:
        - root
        - '^(?!sudo_).*$'   #  all non sudo users
      modules:
        - cmd.run
    

    第7部.Salt-minionデータの返却と格納(MySQLに格納):
    1.slat-masterエンド/etc/salt/masterプロファイルに次の構成を追加します.
    mysql.host: 'salt'
    mysql.user: 'salt'
    mysql.pass: 'salt'
    mysql.db: 'salt'
    mysql.port: 3306
    

    2.MySQLを設定する:``新規salt.sql次の内容を入力し、実行するmysql -uroot -p < salt.sqlMySQLデータベースに注ぐ
    --       
    CREATE DATABASE  `salt`
      DEFAULT CHARACTER SET utf8
      DEFAULT COLLATE utf8_general_ci;
    
    USE `salt`;
    
    --
    -- Table structure for table `jids`
    --
    
    DROP TABLE IF EXISTS `jids`;
    CREATE TABLE `jids` (
      `jid` varchar(255) NOT NULL,
      `load` mediumtext NOT NULL,
      UNIQUE KEY `jid` (`jid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    --
    -- Table structure for table `salt_returns`
    --
    
    DROP TABLE IF EXISTS `salt_returns`;
    CREATE TABLE `salt_returns` (
      `fun` varchar(50) NOT NULL,
      `jid` varchar(255) NOT NULL,
      `return` mediumtext NOT NULL,
      `id` varchar(255) NOT NULL,
      `success` varchar(10) NOT NULL,
      `full_ret` mediumtext NOT NULL,
      `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      KEY `id` (`id`),
      KEY `jid` (`jid`),
      KEY `fun` (`fun`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    --
    -- Table structure for table `salt_events`
    --
    
    DROP TABLE IF EXISTS `salt_events`;
    CREATE TABLE `salt_events` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `tag` varchar(255) NOT NULL,
    `data` varchar(1024) NOT NULL,
    `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `tag` (`tag`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;