自动化运维工具saltstack(1)

saltstack和ansible不同,他采用分布式远程执行系统,用来在远程节点执行命令和查询数据。
saltstack核心功能是使用命令发送远程系统的是采用并行的而不是串行的。并且使用安全加密,提供简单的编程接口和最小的网络载荷。

安装saltstack

提前停止防火墙。
安装时根据阿里云或者官方说明都可以

yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm

首先安装一个rpm包。安装完成生成一个yum源。

[root@server10 yum.repos.d]# cat salt-latest.repo 
[salt-latest]
name=SaltStack Latest Release Channel for RHEL/Centos $releasever
baseurl=https://repo.saltstack.com/yum/redhat/7/$basearch/latest
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/saltstack-signing-key

这个源是官方的,比较慢,可以换成阿里云的。直接执行命令

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

需要在每个设备都进行安装yum源,然后在控制节点安装master在普通节点安装minion。

[root@server10 ~]# yum install salt-master.noarch -y
[root@server11 ~]# yum install -y salt-minion.noarch 

安装完成直接启动服务,在master端不用改配置文件。

[root@server10 ~]# systemctl start salt-master.service 
[root@server10 ~]# yum install -y python-setproctitle.x86_64 
[root@server10 ~]# systemctl restart salt-master.service
[root@server10 ~]# ps ax
 3217 ?        Ss     0:00 /usr/bin/python /usr/bin/salt-master ProcessManager
 3224 ?        S      0:00 /usr/bin/python /usr/bin/salt-master MultiprocessingLoggingQueue
 3231 ?        Sl     0:00 /usr/bin/python /usr/bin/salt-master ZeroMQPubServerChannel
 3232 ?        S      0:00 /usr/bin/python /usr/bin/salt-master EventPublisher
 3235 ?        S      0:00 /usr/bin/python /usr/bin/salt-master Maintenance
 3236 ?        S      0:00 /usr/bin/python /usr/bin/salt-master ReqServer_ProcessManager
 3237 ?        Sl     0:00 /usr/bin/python /usr/bin/salt-master MWorkerQueue
 3238 ?        R      0:00 /usr/bin/python /usr/bin/salt-master MWorker-0
 3246 ?        S      0:00 /usr/bin/python /usr/bin/salt-master MWorker-1
 3247 ?        R      0:00 /usr/bin/python /usr/bin/salt-master MWorker-2
 3248 ?        R      0:00 /usr/bin/python /usr/bin/salt-master MWorker-3
 3249 ?        Sl     0:00 /usr/bin/python /usr/bin/salt-master FileserverUpdate
 3251 ?        S      0:00 /usr/bin/python /usr/bin/salt-master MWorker-4
 4096 pts/0    R+     0:00 ps ax
 4097 ?        R      0:00 /usr/bin/python /usr/bin/salt-master MWorker-4
 4098 ?        R      0:00 /usr/bin/python /usr/bin/salt-master MWorker-1

这时就能看见有很多服务打开,有分配的,有发布订阅的不同进程
服务开启后系统会打开两个端口4505和4506

在minion端
首先修改配置文件,/etc/salt/minion文件将下面的master打开,写的时候一定要顶格。后面ip指定master端

master: 192.168.122.10

配置完成打开服务

[root@server11 salt]# systemctl start salt-minion.service 

全部完成之后下一步进行安全认证。

[root@server10 ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
server11
server12
Rejected Keys:

服务开启后两个节点会等待授权。

[root@server10 ~]# salt-key -A ##A是添加所有 a是一个个添加
The following keys are going to be accepted:
Unaccepted Keys:
server11
server12
Proceed? [n/Y] y           
Key for minion server11 accepted.
Key for minion server12 accepted.
[root@server10 ~]# salt-key -L ##授权完毕之后我们就可以看到效果
Accepted Keys:
server11
server12
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@server10 ~]# salt '*' test.ping ##两个都已经连接上了
server12:
    True
server11:
    True
[root@server10 ~]# lsof -i :4505 ##从这里可以看到4505端口持续保持连接
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
/usr/bin/ 3231 root   16u  IPv4  31623      0t0  TCP *:4505 (LISTEN)
/usr/bin/ 3231 root   18u  IPv4  35908      0t0  TCP server10:4505->server12:55318 (ESTABLISHED)
/usr/bin/ 3231 root   19u  IPv4  35913      0t0  TCP server10:4505->server11:53290 (ESTABLISHED)

创建完成继续查看,在/etc/salt/pki目录中保存我们所有的证书。

远程执行命令

命令组成为

salt 用户名(这个用户名可以在/etc/salt/minion_id文件中查看,当我们更改用户名后要记得把这个文件删掉,不然会有问题) 模块+.+方法

比如说:

[root@server10 ~]# salt server11 test.ping ##测试连接 test是模块ping是方法
server11:
    True

也可以使用正则表达,例如:

[root@server10 ~]# salt -E server'[10-13]' test.ping
server11:
    True
server12:
    True

也可以指定列表,例如:

[root@server10 ~]# salt -L 'server11,server12' test.ping
server11:
    True
server12:
    True

当然salt中还有很多模块,比如执行命令的模块cmd.run,这个后面接命令,连接过去运行时的身份就是root用户。

[root@server10 ~]# salt server11 cmd.run hostname
server11:
    server11

salt的内置模块是很多的,有需要可以去官网查看文档。
但是有时候模块用的不舒服或者没有匹配的模块,这时我们可以自己编写模块进行使用。
如何编写,首先找到他的默认提取的文件地址。

[root@server10 ~]# vim /etc/salt/master
#file_roots:
#  base:
#    - /srv/salt  ##这里为他的默认地址

/srv/salt文件默认是不存在的,需要你进行手动创建。进入这个目录后再创建一个目录来编写自己的模块。

[root@server10 ~]# mkdir /srv/salt
[root@server10 ~]# cd /srv/salt
[root@server10 salt]# mkdir _modules ##这个文件名是固定的
[root@server10 salt]# cd _modules

创建一个python文件进行编写

[root@server10 _modules]# vim mydisk.py
def df():
    return __salt__['cmd.run']('df -h')

编写完成后如何使用?
在普通节点上的/var/cache/salt目录下有一个minion目录,所有东西都会由master推送到远端。而这个目录中保存的就是这些数据文件。
如何推送到远端。

[root@server10 _modules]# salt server11 saltutil.sync_modules  ##需要刷新一下,将模块进行同步
server11:
    - modules.mydisk
[root@server11 salt]# tree . ##从这里看到,模块已经推送过来
.
└── minion
    ├── extmods
    │   └── modules
    │       └── mydisk.py
    ├── files
    │   └── base
    │       └── _modules
    │           └── mydisk.py
    ├── module_refresh
    └── proc

推送完成可以进行测试

[root@server10 _modules]# salt server11 mydisk.df ##mydisk为模块名 df为刚才里面设置的函数
server11:
    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 484M     0  484M   0% /dev
    tmpfs                    496M   60K  496M   1% /dev/shm
    tmpfs                    496M  6.7M  489M   2% /run
    tmpfs                    496M     0  496M   0% /sys/fs/cgroup
    /dev/mapper/centos-root   13G  1.7G   11G  14% /
    /dev/sda1               1014M  136M  879M  14% /boot
    tmpfs                    100M     0  100M   0% /run/user/0

编写sls文件
sls文件和ansible中的playbook差不多。
比如安装一个apache软件包

[root@server10 salt]# vim apache.sls
httpd:
  pkg.installed

文件编写好了如果使用呢?

[root@server10 salt]# salt server11 state.sls apache##指明用户 调用模块 最后为文件名,写文件名的时候可以不加后缀
server11:
----------
          ID: httpd
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 21:17:38.630154
    Duration: 765.219 ms
     Changes:   

Summary for server11
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 765.219 ms

如果需要多个节点都安装,那么再编写一个文件

[root@server10 salt]# vim top.sls
base:
  '*':
    - apache

然后再次推送

[root@server10 salt]# salt '*' state.highstate

这样就会给所有识别的节点进行推送

如果想一次性安装多个软件,按照刚才的方法走会写成这样

httpd:
  pkg.installed

httpd-tools:
  pkg.installed

就会很麻烦,那么就要使用别的方法来进行书写。

install-apache: ##定义一个固定的名字,唯一性声明
  pkg.installed: ##调用模块
    - pkgs:
      - httpd       ##安装的内容
      - httpd-tools
      - php
[root@server10 salt]# salt server11 state.sls apache ##推送远端,就可以进行安装了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值