自动化运维工具saltstack的简介及安装配置与推送简单服务(以http服务为例)

1.saltstack的介绍

(1)saltstack的简介:

Salt 是 一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行) 一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据 开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单 Saltstack(中国用户组 www.saltstack.cn )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
Saltstack的优势: 有master端和minion端,执行的信息比较稳定,不容易丢失信息,或者出现失联主机的情况 有封装好的http-api,我们可以直接启动salt-api就可以通过http协议进行调用。不需要自己进行第二次的封装。基于centos6和centos7的差异,在两个不同的操作系统中安装saltstack也是不一样的。

(2)Salt的核心功能:

  • 使命令发送到远程系统是并行的而不是串行的
  • 使用安全加密的协议
  • 使用最小最快的网络载荷
  • 提供简单的编程接口

Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。

(3)Saltstack的秘钥安装:

Master与Minion认证 minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。 salt-key -L 或者salt-key 显示所有的key salt-key -D :删除所有认证主机id证书 salt-key -d keys_values -y salt-key -A:接收所有id证书请求 salt-key -a id :接受单个id证书请求。

(4)saltstack通信机制

SaltStack 采用 C/S模式,minion与master之间通过ZeroMQ消息队列通信,默认监听4505端口
在这里插入图片描述
Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口
在这里插入图片描述

2.saltstack安装与配置

(1)设置YUM仓库:

##可以设置官方仓库
 yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
 
 ##或者,将所需软件打包放到apache发布目录下,供自己主机使用
[root@server1 yum.repos.d]# cat salt.repo 
[salt]
name=saltstack
baseurl=http://172.25.33.250/2019
gpgcheck=0

(2)master端设置:

yum install -y salt-master #安装master端
systemctl enable salt-master #设置master自启动
systemctl start salt-master #启动master服务
在这里插入图片描述
(3)mioion端设置:

yum install -y salt-minion #安装minion端
vim /etc/salt/minion
master: 172.25.33.1 #设置master主机的ip
systemctl enable salt-minion#设置minion自启动
systemctl start salt-minion#设置minion启动

在这里插入图片描述
(4)master端执行命令允许minion连接:

salt-key -L##显示所有的key
salt-key -A##接收所有id证书请求
在这里插入图片描述
(5)master端测试与minion端的连接:

salt '*' test.ping
在这里插入图片描述

3.远程执行shell命令

  • [1] Salt命令由三个主要部分构成:
    salt '<target>' <function> [arguments]
    target: 指定哪些minion, 默认的规则是使用glob匹配minion id.
    salt '*' test.ping
    Targets也可以使用正则表达式:
    salt -E 'server[1-3]' test.ping
    Targets也可以指定列表:
    salt -L 'server2,server3' test.ping
  • [2] Salt命令由三个主要部分构成:
    funcation是module提供的功能,Salt内置了大量有效的functions.
    salt '*' cmd.run 'uname -a'
    arguments通过空格来界定参数:
    salt 'server2' sys.doc pkg #查看模块文档
    salt 'server2' pkg.install httpd#pkg包管理模块的install方法
    salt 'server2' pkg.remove httpd
    salt内置的执行模块列表:
    http://docs.saltstack.cn/ref/modules/all/index.html

4.编写远程执行模块

(1)编辑master配置文件:
vim /etc/salt/master

file_roots:
  base:
    - /srv/salt

重启master服务:
systemctl restart salt-master
在这里插入图片描述
(2)创建模块目录,编写模块文件:
mkdir /srv/salt/_modules
编写模块文件:
vim /srv/salt/_modules/mydisk.py

def df():
    return __salt__['cmd.run']('df -h')

在这里插入图片描述
(3)同步模块:
salt server2 saltutil.sync_modules
在这里插入图片描述
(4)运行模块:
salt server2 mydisk.df
在这里插入图片描述

5.了解YAML语法

  1. 规则一: 缩进
    Salt需要每个缩进级别由两个空格组成,不要使用tabs。
  2. 规则二: 冒号
    字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。
    my_key: my_value
  3. 规则三: 短横杠
    想要表示列表项,使用一个短横杠加一个空格。
    - list_value_one
    - list_value_two

6.配置管理

(1)在base目录下创建服务目录,并且创建一个sls文件:

[root@server1 salt]# mkdir apache
[root@server1 salt]# cd apache/
[root@server1 apache]# vim install.sls
install-apache:    # ID声明
  pkg.installed:    ## 函数声明
    - pkgs:           
      - httpd      ##httpd的下载

service-apache:
  service.running:
    - name: httpd     ##httpd服务的开启

在这里插入图片描述
在这里插入图片描述
(2)进行推送,使server2端执行

[root@server1 apache]# salt server2 state.sls apache.install
在这里插入图片描述
(3)继续完善install.sls文件,httpd的配置文件还没有做修改

[root@server1 apache]# vim install.sls 
[root@server1 apache]# cat install.sls 
install-apache:
  pkg.installed:
    - pkgs:
      - httpd

  file.managed:         ##这里的文件写法不固定,也可以像备注里的写法一样
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf    ##使用base目录下apache/files/httpd.conf覆盖要执行的主机文件

  service.running:
    - name: httpd
    - reload: true
    - watch:
      - file: install-apache

备注:另外一种写法:
/etc/httpd/conf/httpd.conf:
file.managed:
#  - name: /etc/httpd/conf/httpd.conf
  - source: salt://apache/files/httpd.conf

在这里插入图片描述在这里插入图片描述
修改files下的配置文件:
在这里插入图片描述
(4)给server2上推送完善后的install.sls文件,server2端会比对md5sum /etc/httpd/conf/httpd.conf和md5sum files/httpd.conf的值,只有两个值不同的时候,该配置文件的修改才会生效

[root@server1 apache]# md5sum files/httpd.conf
04e9239e7bd5d5b9b85864226d60eee5  files/httpd.conf
[root@server2 ~]#  md5sum /etc/httpd/conf/httpd.conf
f5e7449c0f17bc856e86011cb5d152ba  /etc/httpd/conf/httpd.conf

在这里插入图片描述

在这里插入图片描述

[root@server1 apache]# salt server2 state.sls apache.install
server2:
----------
          ID: install-apache
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 08:25:50.792417
    Duration: 875.186 ms
     Changes:   
----------
          ID: install-apache
    Function: file.managed
        Name: /etc/httpd/conf/httpd.conf
      Result: True
     Comment: File /etc/httpd/conf/httpd.conf updated
     Started: 08:25:51.672291
    Duration: 128.277 ms
     Changes:   
              ----------
              diff:
                  --- 
                  +++ 
                  @@ -39,7 +39,7 @@
                   # prevent Apache from glomming onto all bound IP addresses.
                   #
                   #Listen 12.34.56.78:80
                  -Listen 80
                  +Listen 8080
                   
                   #
                   # Dynamic Shared Object (DSO) Support
----------
          ID: install-apache
    Function: service.running
        Name: httpd
      Result: True
     Comment: Service reloaded
     Started: 08:25:51.902843
    Duration: 149.251 ms
     Changes:   
              ----------
              httpd:
                  True

Summary for server2
------------
Succeeded: 3 (changed=2)
Failed:    0
------------
Total states run:     3
Total run time:   1.153 s

在这里插入图片描述
在这里插入图片描述

此时,观察server2上的端口是否改变:因为端口的改变不能依靠重新加载,所以在server2上重启服务

[root@server2 ~]# systemctl restart httpd
[root@server2 ~]# netstat -tnlp    ##端口已经更改
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      800/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1052/master         
tcp6       0      0 :::8080                 :::*                    LISTEN      1817/httpd          
tcp6       0      0 :::22                   :::*                    LISTEN      800/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1052/master         

在这里插入图片描述
再看md5sum /etc/httpd/conf/httpd.conf和md5sum files/httpd.conf的值,发现两个值一致了

在这里插入图片描述
查看server2上的进程

[root@server2 ~]# ps ax
在这里插入图片描述
就这样,推送简单服务(以http服务为例)就实现了!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值