自動化運維——SaltStack管理工具

SaltStack管理工具

SaltStack需要安裝服務端:salt-master客戶端:salt-minion

SaltStack服務啓動後監聽端口

TCP4505端口:用於Master和Minion認證通信

TCP4506端口:爲master用來發送命令或者接受Minion的命令返回信息

安裝啓動SaltStack

安裝環境準備:

Master:192.168.11.25

Minion:192.168.11.26、192.168.11.27

1.三臺服務器安裝epel源:wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.修改主機名

master服務端:hostnamectl set-hostname master
minion客戶端1:hostnamectl set-hostname server1
minion客戶端2:hostnamectl set-hostname server2

3.三臺服務器修改host文件

vim /etc/hosts

192.168.11.25 master
192.168.11.26 server1
192.168.11.27 server2

Master安裝啓動salt-master軟件

1.安裝salt-master軟件

yum -y install salt-master

2.master修改配置文件

vim /etc/salt/master

#監控地址
interface: 192.168.11.25 
#確認證書信任
auto_accept: True
file_roots:
  base:
    - /srv/salt/
#開啓pillar功能
pillar_opts: Ture
pillar_roots:
  base:
    - /srv/pillar
#添加管理的主機名
nodegroups:
 group1: 'server1'
 group2: 'server2'

3.創建配置文件中對應的目錄

mkdir /srv/salt

mkdir /srv/pillar

4.啓動master服務

systemctl start salt-master

Minion安裝啓動salt-minion軟件

1.安裝salt-minion軟件

yum install -y salt-minion

2.兩臺Minion修改配置文件

192.168.11.26:vim /etc/salt/minion

master: 192.168.11.25 #服務端的地址
id: server1   #本機的主機名

192.168.11.27:vim /etc/salt/minion

master: 192.168.11.25   #服務端的地址
id: server2   #本機的主機名

3.兩臺Minion啓動服務

systemctl start salt-minion

測試服務端和客戶端的通信狀況(如下圖爲成功):

salt '*' test.ping

SaltStack具體命令應用

查看版本信息:

salt --version

salt --versions-report

查看多個minion:salt-key -L

接受指定的minion:salt-key -a slave1.kgc.com

接受所有的minion:salt-key -A

刪除指定的Minion:salt-key -d slave1.kgc.com

刪除所有的Minion:salt-key -D

拒絕指定的minion:salt-key -r slave1.kgc.com

拒絕所有的minion:salt-key -R

查看存活的minion:salt-run manage.up

查看down機的minion:salt-run manage.down

查看down掉的minion,並將其刪除:salt-run manage.down removekeys=True

查看minion的相關狀態:salt-run manage.versions

minion分組規則:

G --針對Grains做單個匹配,例如:G@os:Ubuntu

E --針對minion針對正則表達式匹婚配,例如:E@webd+.(dev|qa|prod).loc

P --針對Grains做正則表達式匹配,例如:P@os:(RedHat|Fedora|CentOS)    

L --針對minion做列表匹配,例如:[email protected],minion3.domain.com or bl*.domain.com

I --針對 Pillar 做單個匹配,例如:I@pdata:foobar

S --針對子網或是IP做匹配,例如:[email protected]/24 or [email protected]

R --針對客戶端範圍做匹配,例如:R@%foo.bar

常用模塊

pkg模塊(安裝軟件)

salt -N 'web01group' pkg.install 'httpd'

salt -N 'web02group' pkg.remove 'httpd'

file模塊(文件操作)

salt -N 'web02group' file.rename /root/test.txt /root/aaa.txt

cmd(遠程在客戶端shell環境下執行命令)

salt -N 'web02group' cmd.run "whoami"

user模塊(作用是管理系統賬戶操作

service模塊(管理服務狀態)

salt '*' service.disable httpd

salt '*' service.start httpd

cron模塊(管理操作任務cron服務操作

SaltStack配置安裝nginx

1.創建_grains目錄

mkidr /srv/salt/_grains

2.編輯配置文件的進程優化腳本

vim /srv/salt/_grains/nginx_config.py

#!/usr/bin/python
import os,sys,commands
def NginxGrains():
    '''
        return Nginx config grains value
    '''
    grains ={}
    max_open_file=65536

    try:
        getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')
    except Exception,e:
        pass
    if getulimit[0]==0:
        max_open_file=int(getulimit[1])
    grains['max_open_file'] = max_open_file
    return grains

3.在/srv/pillar目錄下創建sls文件

vim top.sls

base:
  group1:
    - match: nodegroup
    - server1
  group2:
    - match: nodegroup
    - server2

vim server1.sls

nginx:
  root: /data

vim server2.sls

nginx:
  root: /www

4.同步grains模塊:salt '*' saltutil.sync_all

查看結果:salt '*' grains.item max_open_file

5.在salt目錄創建top.sls文件執行nginx.sls這個文件

vim top.sls

base:
  '*':
  - nginx

6.編寫安裝nginx的腳本文件

vim /srv/salt/nginx.sls

nginx:
 pkg:
 - installed

 file.managed:
  - source: salt://nginx/nginx.conf
  - name: /etc/nginx/nginx.conf
  - user: root
  - group: root
  - mode: 644
  - template: jinja

 service.running:
  - enable: True
  - reload: True
  - watch:
    - file: /etc/nginx/nginx.conf
    - pkg: nginx

7.使用jinja模板定義nginx配置文件nginx.conf,首先創建一個nginx目錄,因爲上面定義了nginx配置文件的源路徑

mkdir /srv/salt/nginx

vim /srv/salt/nginx/nginx.conf

user nginx;
worker_processes {{grains['num_cpus']}};
{%if grains['num_cpus'] ==1 %}
worker_cpu_affinity 10;
{%elif grains['num_cpus'] ==2 %}
worker_cpu_affinity 01 10;
{%elif grains['num_cpus'] ==4 %}
worker_cpu_affinity 0001 0010 0100 1000;
{%elif grains['num_cpus'] ==8 %}
{%else%}
worker_cpu_affinity 0001 0010 0100 1000;
{%endif%}
worker_rlimit_nofile {{grains['max_open_file']}};
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections {{grains['max_open_file']}};
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        include /etc/nginx/default.d/*.conf;

        location / {
          root {{pillar['nginx']['root']}};
          index index.html index.htm;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

這裏的worker_processes的參數和worker_connections參數都是通過腳本去隨着服務器的CPU和處理變化來進行變化達到最優配置

8.運行開始安裝

 salt '*' state.highstate

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章