SaltStack
1 简介
-
SaltStack是一个配置管理系统,能够维护预定义状态的远程节点。
-
SaltStack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据。
-
SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。
-
SaltStack的核心功能:
- 使命令发送到远程系统是并行的而不是串行的;
- 使用安全加密的协议;
- 使用最小最快的网络载荷;
- 提供简单的编程接口。
-
SaltStack同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。
2 SaltStack的通信机制
SaltStack 采用 C/S模式,minion与master之间通过ZeroMQ消息队列通信,默认监听4505端口。
-
SaltStack Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口。
3 SaltStack安装与配置
- 步骤一:直接从阿里云镜像站获取资源
wget https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
yum install -y 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
yum repolist
scp salt-latest.repo server1:/etc/yum.repos.d/
scp salt-latest.repo server3:/etc/yum.repos.d/
- 步骤二:安装saltstack,配置minion与master端
yum install -y salt-master #在server1上安装salt-master
yum install -y salt-minion #在server2和server3上安装salt-minoin
systemctl enable --now salt-master #在server1上启动并设置其为开机自启动
ps ax
cd /etc/salt
vim minion #在server2和server3上修改文件内容
systemctl enable --now salt-minion #在server2和server3上开启并设置开机自启动
netstat -antlp
lsof -i :4505
lsof -i :4506
salt-key -L
salt-key -A
salt '*' test.ping #探测连接是否正常,这里的 '*' 表示所有
上述这个允许连接的过程,就是minion和master彼此之间交换公钥的一个过程,这样来做加密解密,具体可看下面的图片
4 SaltStack远程执行
(1) 远程执行shell命令
-
Salt命令由三个主要部分构成:
salt ‘
<target>
’<function>
[arguments]
salt -L 'server2,server3' test.ping
salt '*' cmd.run hostname
salt '*' cmd.run 'uname -a' #在使用带参数的命令时,必须使用‘’将完整的命令括起来,不然会报错
salt '*' pkg.verify httpd
salt server2 pkg.install httpd
salt server2 pkg.remove httpd
(2)编写远程执行模块
方法一:
- 编辑master配置文件:
vim /etc/salt/master
file_roots:
base:
- /srv/salt
- 重启master服务:
systemctl restart salt-master
mkdir /srv/salt
cd /srv/salt
vim install.sls
httpd
pkg.installed
salt server2 state.sls install
注意:在创建模块文件时,需要添加文件后缀.sls,但是在调用模块时不需要添加文件的后缀名
刚刚我们所实现的都是在server2和server3上安装相同的软件包,那么如果我们想在server2和server3上安装不同的软件包,并且想要一条命令就能够实现,如何做呢?
方法二:
- 创建模块目录:
mkdir /srv/salt/_modules
- 编写模块文件:
vim /srv/salt/_modules/mydisk.py
def df():
return __salt__['cmd.run']('df -h')
- 同步模块:
salt '*' saltutil.sync_modules
我们可以看到这里就是使用python定义了一个df函数,真正执行的就是()内的shell命令
-
Salt 状态系统的核心是SLS,或者叫SaLt State 文件。
-
SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理
-
sls文件命名:
- sls文件以”.sls”后缀结尾,但在调用是不用写此后缀;
- 使用子目录来做组织是个很好的选择;
- init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以
apache/init.sls
就是表示apache
; - 如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache。
我们刚刚在上面做的都是安装的过程,那么一个软件安装完之后还需要配置,那么怎样使用saltstack来进行远程的文件配置呢?
一般在安装完软件后,我们需要开启服务,并且如果修改了配置文件还需要重新启动服务,这就是服务相关的内容了
salt server3 state.sls httpd
(3)了解YAML语法
-
规则一: 缩进
- Salt需要每个缩进级别由两个空格组成,不要使用tabs
-
规则二: 冒号
-
字典的keys在YAML中的表现形式是一个以冒号结尾的字符串
- eg: my_key: my_value
-
-
规则三: 短横杠
-
想要表示列表项,使用一个短横杠加一个空格
- eg: - list_value_one
- eg: - list_value_two
-