SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)

SALTSTACK自动化运维管理-------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)

1.SALTSTACK的简介

saltstack是一个服务器基础构架集中化管理平台具备配置管理,远程执行,监控等功能,基于python实现,结合轻量级消息队列(ZeroMQ)与python第三方模块(Pyzmq,PyCrypto,PyYAML等)构建。
通过部署saltstack,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理,分发文件,采集服务器数据,操作系统基础及软件包管理等,它是运维人员提高工作效率,规范业务配置与操作的利器。

2.salt的基本原理

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第1张图片

  1. SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。
  2. minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信。
  3. master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中,locate salt | grep /usr/ 可以看到salt自带的所有东西。
  4. 这些模块是python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt ‘*’ cmd.run 'uptime’的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受消息的。
    SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第2张图片

具体步骤如下:

  1. Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc
  2. salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。
  3. master接收到命令后,将要执行的命令发送给客户端minion。
  4. minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理
  5. minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master
  6. master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中
  7. salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。

3.saltstack的安装与配置

实验环境:server3和server4,server3充当master端,server4充当minion端
1.安装初始化软件包
网址:https://developer.aliyun.com/mirror/

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第3张图片
根据指示进行配置官方的YUM仓库:

第一步:安装初始化软件包

在server3和server4中配置YUM源:
yum install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第4张图片

第二步:文件中的访问地址需要替换成镜像站的路径

sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第5张图片
配置完成后,发现可以列出,证明我们的配置没有问题。
SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第6张图片
第三步:master端的设置(这里我们用server3来充当master端):

在server3中:
yum install -y salt-master     #安装master端
systemctl start salt-master    #启动master服务
systemctl enable salt-master   #设置master开机自启动


在server4中:
yum install -y salt-minion
vim /etc/salt/minion
16行修改为: master: 192.168.43.73
systemctl start salt-minion
systemctl enable salt-minion

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第7张图片
注意:不是minion端想连接master端就可以连接的,是要经过master端的允许的。

第四步:master端允许minion端连接

salt-key -L
salt-key -A

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第8张图片
在这里插入图片描述
测试master端与minion端的连接:

salt '*' test.ping          salt server4 test.ping 
salt server4 cmd.run df     salt '*' cmd.run df
salt server4 cmd.run 'touch /mnt/file1'
salt server4 cmd.run 'ls /mnt/file1'

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第9张图片

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第10张图片

4.saltstack的远程执行

  1. 远程执行shell命令
salt命令由三个主要部分构成:
salt  'target'   function   arguments
target:指定哪些minion,默认的规则是使用glob匹配minion id  如:salt '*' test.ping
也可以使用正则表达式:   salt -E 'server[4-6]' test.ping
也可以指定列表:  salt -L 'server4,server5' test.ping

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第11张图片

function是module提供的功能,salt内置了大量有效的function

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第12张图片

arguments通过空格来界定参数:
salt '*' sys.doc pkg     #查看模块文档

salt server4  pkg.install httpd
salt server4  pkg.remove  httpd

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第13张图片

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第14张图片

另外:salt内置的执行模板列表 https://docs.saltstack.cn/ref/modules/all/index.html

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第15张图片

  1. 编写远程执行模块
编写master配置文件 :
vim /etc/salt/master
    file_roots:
    base:
    	-/srv/salt
编辑完重启服务

当然了,我们在这里使用默认的就行


SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第16张图片

创建模块目录:
mkdir /srv/salt/_modules

编写模块文件:
vim  /srv/salt/_modules/mydisk.py
	def df():
    return __salt__['cmd.run']('df -h')

同步模块:
salt server4 saltutil.sync_modules

测试效果:server3中
[root@server3 _modules]# salt server4 saltutil.sync_modules
server4:
    - modules.mydisk
[root@server3 _modules]# salt server4 mydisk.df         #运行模块
server4:
    Filesystem             Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root   17G  1.3G   16G   8% /
    devtmpfs               898M     0  898M   0% /dev
    tmpfs                  910M  100K  910M   1% /dev/shm
    tmpfs                  910M  9.5M  901M   2% /run
    tmpfs                  910M     0  910M   0% /sys/fs/cgroup
    /dev/nvme0n1p1        1014M  146M  869M  15% /boot
    tmpfs                  182M     0  182M   0% /run/user/0
    /dev/sr0               4.2G  4.2G     0 100% /xuruntian

server4中:
[root@server4 salt]# pwd
/var/cache/salt
[root@server4 salt]# tree .
.
└── minion
    ├── extmods
    │   └── modules
    │       └── mydisk.py
    ├── files
    │   └── base
    │       └── _modules
    │           └── mydisk.py
    ├── module_refresh
    └── proc

7 directories, 3 files

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第17张图片
SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第18张图片

  1. 配置管理
创建一个sls文件:
[root@server3 salt]# pwd
/srv/salt
[root@server3 salt]# vim apache.sls
[root@server3 salt]# cat apache.sls 
httpd:
  pkg.installed
[root@server3 salt]# salt server4 state.sls apache      #指定主机执行
server4:
----------
          ID: httpd
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: httpd
     Started: 07:31:28.077723
    Duration: 5643.012 ms
     Changes:   
              ----------
              httpd:
                  ----------
                  new:
                      2.4.6-88.el7
                  old:

Summary for server4
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:   5.643 s

[root@server4 salt]# tree .
.
└── minion
    ├── extmods
    │   └── modules
    │       ├── mydisk.py
    │       └── mydisk.pyc
    ├── files
    │   └── base
    │       ├── apache.sls        #server4中出现apache.sls文件
    │       └── _modules
    │           └── mydisk.py
    ├── module_refresh
    └── proc
        └── 20200606233126426578

7 directories, 6 files

SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第19张图片
SALTSTACK自动化运维管理------(SALTSTACK的简介和基本原理、saltstack的安装与配置、saltstack的远程执行)_第20张图片

你可能感兴趣的:(企业实战)