自动化运维----saltstack

saltstack简介

Saltstack是基于Python开发的一套C/S架构,具备Puppet、Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高;使用号称世界上最快的消息队列ZeroMQ使得Saltstack能够秒级在数万台服务器上进行各种操作,而且使用RAS Key方式确认身份,传输采用AES加密,安全性能更高;

 Saltstack不仅仅是一款配置管理工具,还是一款做云计算和数据中心架构编排利器。目前Salt-cloud项目也已经合并到Saltstack主项目里,Saltstack已经支持Docker相关模块,在友好地支持各大云平台之后,配合Saltstack的Mine实现各云平台业务自动扩展。

 

自动化工具对比

 1)Puppet

 优点:老牌经典自动化配置软件、应用广泛、功能强大 

 缺点:不能批处理,使用Ruby和DSL语言开发,没有相关技术栈的公司维护和二次开发起来比较很难,门槛比较高;缺少错误检查和报告;最致命的是Puppet的执行是无序执行,对于一些配置或者部署有先后顺序的项目比较难以处理

 2)Chef

 优点:功能也比较强大(资料比较少)

 缺点:官方文档说明比较模糊浅显;执行并非push实时执行,而是client端定时获取server端数据

 3)Ansible

 优点:社区年轻有活力,play-book使用yaml,简洁,不需要客户端client支持

 缺点:使用SSH管理配置,理论上慢于Saltstack,对于不苛求执行效率,Ansible也是一个不错的选择

 4)Saltstack

 优点:功能不仅限于配置管理、使用Python开发、Grain/Pillar支持、自定义moudles

 缺点:社区相对比较年轻,文档资料较少(其实官方文档已经讲解得很深入了...)

salt特点:

并行,管理的工具,Python开发的。可二次开发。

salt远程执行

salt配置管理

salt云管理(阿里云升级,salt还没有升级,故salt不能管理阿里云)

salt三种管理模式:

1、Local

2、Master,Minion(类似主从,最常用的)

3、Salt SSH

salt支持的操作系统:

CentOS;Redhat;Fedora;Gentoo;Debian;MAC OS X;Ubuntu;suse;FreeBSD……

Winodows(只能当Minion)

saltstack安装及配置

环境准备

准备至少两台虚拟机,本次实验是四台

1、m01(master)

eth0:10.0.0.61

eth1:172.16.1.61

2、nfs01(minion)

eth0:10.0.0.31

eth1:172.16.1.31

3、backup(minion)

eth0:10.0.0.41

eth1:172.16.1.41

4、web01(minion)

eth0:10.0.0.8

eth1:172.16.1.8

master和minion上都安装epel源

# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

# rpm -ivh epel-release-6-8.noarch.rpm

master安装及配置

在master上安装salt-master

# yum install  salt-master -y

在master上把salt-master加入开机启动

# chkconfig salt-master on

在master上修改配置文件(/etc/salt/master)

#找到以下内容,注释全部去掉,并且注意下面base前面和下一行前面的空格数量,一个为2,一个为4

# vim /etc/salt/master

file_roots:

  base:

    - /srv/salt

 

pillar_roots:

  base:

- /srv/pillar

启动master的salt-master

[root@m01 ~]# /etc/init.d/salt-master start

Starting salt-master daemon: [确定]

minion安装及配置

在minion上安装salt-minion

# yum install salt-minion -y

在minion上把salt-minion加入开机启动

# chkconfig salt-minion on

修改minion的配置文件(/etc/salt/minion)

#在大概16行的master上添加master主机ip地址或主机名(需要地址解析),冒号和ip之间有一空格

# vim /etc/salt/minion

master: 192.168.90.61

# 找到#id,把注释去掉,给每一台虚拟机起一个有意义的id名称

# 这里三台minion都取各自类型的名称,如果此项不修改,则会使用每台虚拟机的主机名

id: nfs

id: backup

id: web

启动minion的salt-minion

[root@nfs01 ~]# /etc/init.d/salt-minion start

Starting salt-minion daemon: [确定]

后续操作

在以上master端和minion端配置完成启动之后继续以下操作

master上salt-key查看是否有以下情况,有即成功

[root@m01 ~]# salt-key

Accepted Keys:

Denied Keys:

Unaccepted Keys:

backup

nfs

web

Rejected Keys:

 salt-key -A全部管理,-a指定管理机器

[root@m01 ~]# salt-key -A

The following keys are going to be accepted:

Unaccepted Keys:

backup

nfs

web

Proceed? [n/Y] Y

Key for minion backup accepted.

Key for minion nfs accepted.

Key for minion web accepted.

[root@m01 ~]# salt-key

Accepted Keys:

backup

nfs

web

Denied Keys:

Unaccepted Keys:

Rejected Keys:

 到此为止salt-master已经成功管理minion机器了,下面开始测试

测试

测试minion主机是否存活

salt命令语法格式

salt ‘目标’ 模块(命令) 方法(参数) 返回

检查主机是存活

[root@m01 ~]# salt '*' test.ping

web:

    True

backup:

    True

nfs:

True

测试单独主机是否存活

[root@m01 ~]# salt 'backup' test.ping

backup:

    True

测试运行命令

 运行命令,检查所有主机磁盘大小

[root@m01 ~]# salt '*' cmd.run 'df -h'

web:

    Filesystem         Size  Used Avail Use% Mounted on

    /dev/sda3          8.8G  1.6G  6.9G  19% /

    tmpfs              491M   12K  491M   1% /dev/shm

    /dev/sda1          190M   35M  146M  19% /boot

    172.16.1.31:/data  8.8G  1.6G  6.8G  19% /mnt

nfs:

    Filesystem      Size  Used Avail Use% Mounted on

    /dev/sda3       8.8G  1.6G  6.8G  19% /

    tmpfs           491M   12K  491M   1% /dev/shm

    /dev/sda1       190M   35M  146M  19% /boot

backup:

    Filesystem      Size  Used Avail Use% Mounted on

    /dev/sda3       8.8G  1.6G  6.9G  19% /

    tmpfs           491M   12K  491M   1% /dev/shm

/dev/sda1       190M   35M  146M  19% /boot

管理minion文件

创建需要的目录并创建配置文件来管理minion

[root@m01 ~]# mkdir /srv/{salt,pillar}

 

[root@m01 ~]# cd /srv/salt/

 

[root@m01 salt]# cat host_file.sls

/etc/hosts:

  file.managed:

    - source: salt://files/hosts

    - user: root

    - group: root

    - mode: 644

 

[root@m01 salt]# mkdir files

 

[root@m01 salt]# cd files

 

[root@m01 files]# pwd

 

/srv/salt/files

 

[root@m01 files]# cp /etc/hosts .

 

[root@m01 files]# ll

 

总用量 4

 

-rw-r--r-- 1 root root 349 3月 8 10:40 hosts

 

[root@m01 salt]# salt '*' state.sls host_file

#指定成功后会有以下信息出现,由于信息过长故只列出一台成功信息。

nfs:

----------

      ID: /etc/hosts

Function: file.managed

  Result: True

 Comment: File /etc/hosts updated

 Started: 10:48:05.517696

Duration: 1430.111 ms

 Changes:   

          ----------

          diff:

              ---  

              +++  

              @@ -8,4 +8,4 @@

               172.16.1.31     nfs01

               172.16.1.41     backup

               172.16.1.61     m01

              -#############rsq#############

              +########rsq########

 

Summary

------------

Succeeded: 1 (changed=1)

Failed:    0

------------

Total states run:     1

测试salt-cp拷贝文件

salt拷贝文件(salt-cp)

[root@m01 salt]# salt-cp '*' /etc/hosts /etc/

{'backup': {'/etc/hosts': True},

'nfs': {'/etc/hosts': True},

'web': {'/etc/hosts': True}}

测试统一安装Nginx

测试统一安装Nginx

[root@m01 salt]# vim nginx_install.sls

Nginx-install:

  pkg.installed:

    - names:

      - nginx

 

/etc/hosts:

  file.managed:

    - source: salt://files/hosts

    - user: root

    - group: root

    - mode: 644

    - require:

      - pkg: nginx_install

  service.running:

    - names:

      - nginx

[root@m01 salt]# salt 'web' state.sls nginx_install

#出现以下信息则证明对端成功安装nginx服务并启动成功

 

web:

----------

      ID: nginx_install

Function: pkg.installed

    Name: nginx

  Result: True

 Comment: The following packages were installed/updated: nginx

 Started: 11:09:50.922773

Duration: 11045.613 ms

 Changes:   

          ----------

          nginx:

              ----------

              new:

                  1.10.2-1.el6

              old:

          nginx-all-modules:

              ----------

              new:

                  1.10.2-1.el6

              old:

          nginx-mod-http-geoip:

              ----------

              new:

                  1.10.2-1.el6

              old:

          nginx-mod-http-image-filter:

              ----------

              new:

                  1.10.2-1.el6

              old:

          nginx-mod-http-perl:

              ----------

              new:

                  1.10.2-1.el6

              old:

          nginx-mod-http-xslt-filter:

              ----------

              new:

                  1.10.2-1.el6

              old:

          nginx-mod-mail:

              ----------

              new:

                  1.10.2-1.el6

              old:

          nginx-mod-stream:

              ----------

              new:

                  1.10.2-1.el6

              old:

----------

      ID: /etc/hosts

Function: file.managed

  Result: True

 Comment: File /etc/hosts updated

 Started: 11:10:01.974038

Duration: 12.497 ms

 Changes:   

          ----------

          diff:

              ---  

              +++  

              @@ -8,3 +8,4 @@

               172.16.1.31     nfs01

               172.16.1.41     backup

               172.16.1.61     m01

              +########rsq########

----------

          ID: /etc/hosts

    Function: service.running

        Name: nginx

      Result: True

     Comment: Started Service nginx

     Started: 11:10:01.988382

    Duration: 244.989 ms

     Changes:   

              ----------

              nginx:

                  True

 

Summary

------------

Succeeded: 3 (changed=3)

Failed:    0

------------

Total states run:     3

Salt删除主机名

salt-key -d web

salt-key -D

salt配置管理定时任务

利用salt配置管理定时任务,其格式为如下:

minute(分)

hour(时)

daymonth(天)

month(月)

dayweek(周)

进入到/srv/salt目录下创建crontab.sls文件,每5分钟执行一下同步,内容如下

/usr/sbin/ntpdate times.aliyun.com >>/dev/null:

  cron.present:

    - user: root

- minute: '*/5'

其它不写的情况代表定时任务中的”*”号

测试

[root@m01 salt]# salt '*' state.sls crontab

 

nfs:

----------

      ID: /usr/sbin/ntpdate times.aliyun.com >>/dev/null

Function: cron.present

  Result: True

 Comment: Cron /usr/sbin/ntpdate times.aliyun.com >>/dev/null added to root's crontab

 Started: 14:59:43.288623

Duration: 27.281 ms

 Changes:   

          ----------

          root:

              /usr/sbin/ntpdate times.aliyun.com >>/dev/null

 

Summary

------------

Succeeded: 1 (changed=1)

Failed:    0

------------

Total states run:     1

backup:

----------

      ID: /usr/sbin/ntpdate times.aliyun.com >>/dev/null

Function: cron.present

  Result: True

 Comment: Cron /usr/sbin/ntpdate times.aliyun.com >>/dev/null added to root's crontab

 Started: 14:59:43.372986

Duration: 39.923 ms

 Changes:   

          ----------

          root:

              /usr/sbin/ntpdate times.aliyun.com >>/dev/null

 

Summary

------------

Succeeded: 1 (changed=1)

Failed:    0

------------

Total states run:     1

web:

----------

      ID: /usr/sbin/ntpdate times.aliyun.com >>/dev/null

Function: cron.present

  Result: True

 Comment: Cron /usr/sbin/ntpdate times.aliyun.com >>/dev/null added to root's crontab

 Started: 14:59:43.468049

Duration: 30.553 ms

 Changes:   

          ----------

          root:

              /usr/sbin/ntpdate times.aliyun.com >>/dev/null

 

Summary

------------

Succeeded: 1 (changed=1)

Failed:    0

------------

Total states run:     1

可以去minion中查看显示内容

[root@nfs01 ~]# crontab -l

# Lines below here are managed by Salt, do not edit

# SALT_CRON_IDENTIFIER:/usr/sbin/ntpdate times.aliyun.com >>/dev/null

*/5 * * * * /usr/sbin/ntpdate times.aliyun.com >>/dev/null

若想要修改成每3分钟执行,则直接修改配置文件即可

/usr/sbin/ntpdate times.aliyun.com >>/dev/null:

  cron.present:

    - user: root

- minute: '*/3'

再次执行

[root@m01 salt]# salt '*' state.sls crontab

去minion中查看

[root@nfs01 ~]# crontab -l

# Lines below here are managed by Salt, do not edit

# SALT_CRON_IDENTIFIER:/usr/sbin/ntpdate times.aliyun.com >>/dev/null

*/3 * * * * /usr/sbin/ntpdate times.aliyun.com >>/dev/null

删除定时任务

[root@m01 salt]# cat del_cron.sls

/usr/sbin/ntpdate times.aliyun.com >>/dev/null:

  cron.absent:

- name: /usr/sbin/ntpdate times.aliyun.com >>/dev/null

测试:

[root@nfs01 ~]# crontab -l

# Lines below here are managed by Salt, do not edit

想看某一模块的帮助信息

[root@m01 salt]# salt '*' sys.doc 'test'

 saltstack小结

以上只是简单利用saltstack来进行一些简单的测试。下面总结一下:

1、在修改master和minion配置文件的时候一定要注意空格数量

2、在写管理文件的时候要在/srv/salt目录下写,并且文件后缀名必须为”.sls”

3、在写sls文件的时候需要注意以下问题,以下面文件为例:

 

/usr/sbin/ntpdate times.aliyun.com >>/dev/null:

  cron.present:

    - user: root

1)第一行结尾一定要加“:”冒号

2)第二行前面一定是空两个空格

3)第三行前面一定空四个空格

4)“-”后边一定要有空格;user:后也一定要有一空格,结尾不加冒号。

4、saltstack对空格要求极为严格,少些多写都会报错。

猜你喜欢

转载自blog.csdn.net/zisefeizhu/article/details/81111687