saltstack是一个服务器基础构架集中化管理平台具备配置管理,远程执行,监控等功能,基于python实现,结合轻量级消息队列(ZeroMQ)与python第三方模块(Pyzmq,PyCrypto,PyYAML等)构建。
通过部署saltstack,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理,分发文件,采集服务器数据,操作系统基础及软件包管理等,它是运维人员提高工作效率,规范业务配置与操作的利器。
具体步骤如下:
实验环境:server3和server4,server3充当master端,server4充当minion端
1.安装初始化软件包
网址:https://developer.aliyun.com/mirror/
第一步:安装初始化软件包
在server3和server4中配置YUM源:
yum install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
第二步:文件中的访问地址需要替换成镜像站的路径
sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo
配置完成后,发现可以列出,证明我们的配置没有问题。
第三步: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
注意:不是minion端想连接master端就可以连接的,是要经过master端的允许的。
第四步:master端允许minion端连接
salt-key -L
salt-key -A
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'
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
function是module提供的功能,salt内置了大量有效的function
arguments通过空格来界定参数:
salt '*' sys.doc pkg #查看模块文档
salt server4 pkg.install httpd
salt server4 pkg.remove httpd
另外:salt内置的执行模板列表 https://docs.saltstack.cn/ref/modules/all/index.html
编写master配置文件 :
vim /etc/salt/master
file_roots:
base:
-/srv/salt
编辑完重启服务
当然了,我们在这里使用默认的就行
创建模块目录:
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
创建一个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