自动化运维--SaltStack
一、SaltStack基础
1.SaltStack原理
1)SaltStack由master(服务端)和minion(客户端)组成,master和minion通过ZeroMQ(消息队列)通信
2)master端监听4505和4506端口,4505为master和minion认证通信端口,4506为master发送命令或接收minion的命令返回信息
3)当客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,master通过这条TCP连接对客户端进行控制,客户端检查到连接断开后,会定期向master请求注册连接
2.SaltStack常用模块
1)pkg模块:应用于软件包管理,包括增删改查
2)file模块:管理文件操作,包括文件同步、设置文件权限和所属用户组、删除文件等操作
3)cmd模块:在minion上执行命令或脚本
4)user模块:管理用户账户操作
5)service模块:管理系统服务
6)cron模块:管理计划任务
二、SaltStack的部署
1.因为SaltStack要使用证书认证,所以所有计算机名称要改为FQDN名称
2.在master和minion上安装epel源
yum -y install epel-release
3.更改epel源
vim /etc/yum.repos.d/epel.repo
4.在master端安装master
yum -y install salt-master
5.在minion上安装minion
yum -y install salt-minion
6.修改master的主配置文件
vim /etc/salt/master
interface: 192.168.1.2 #监听地址,为安全起见建议写内网ip,第15行
auto_accept: True #master自动认证minion的认证,第215行
file_roots: #SaltStack的文件根目录,默认没有该目录,需手动创建,第416行
base:
- /srv/salt
pillar_roots: #pillar的主目录,默认没有还目录,需手动创建,第529行
base:
- /srv/pillar
pillar_opts: True #开启pillar(私密性数据加密传输)功能,第552行
nodegroups: #minion组,第710行
group1: 'www.http1.com,www.http2.com'
group2: 'www.squid.com'
7.创建配置文件中没有的目录
mkdir /srv/salt
mkdir /srv/pillar
8.启动master
service salt-master start
查看是否启动
9.修改minion的配置文件
vim /etc/salt/minion
master: 192.168.1.2 #master的ip
id: www.http2.com #被管理端,即本机的主机名
10.启动minion
service salt-minion start
11.测试主与从的通信状态
11.salt的使用
语法:salt [ options] '<target>' <function> [arguments]
1)查看系统中的所有模块
salt '*' sys.list_ modules
2)查看指定模块用法
salt '*' sys.doc 模块名
3)查看某个模块下所有选项
salt '*' sys.list_functions 模块名
4)查看某个选项的用法
salt '*' sys.state_doc 选项
三、SaltStack批量部署服务(以nginx为例)
原理
主要使用grains、pillar、state组件完成,grains和pillar采集被控端的数据生成变量,前者采集静态的数据,如磁盘个数、CPU个数等,后者采集动态数据,如CPU使用率等。state通过grains和pillar收集的信息,创建安装并自定配置nginx
1.创建grains目录,将目录下定制文件同步到被控端主机上,然后获取被控端主机打开文件句柄数
mkdir /srv/salt/_grains
vim /srv/salt/_grains/nginx_config.py
3)同步grains模块
salt '*' saltutil.sync_all
4)获取打开文件句柄数
salt '*' grains.item max_open_file
2.配置pillar,在主控端创建文件入口,入口的作用是定义pillar的数据覆盖被控主机的有效范围
1)创建入口文件
vim /srv/pillar/top.sls
base:
group1: #组名
- match: nodegroup
- http1server #自定义名字
group2: #组名
- match: nodegroup
- http2server #自定义名字
2)创建“自定义名字.sls”定义nginx的安装目录
vim /srv/pillar/http1server.sls
nginx:
root: /usr/local
vim /srv/pillar/http2server.sls
nginx:
root: /usr/local
4)查看pillar的配置情况
3.配置state,通过预定义好的sls文件,对被控主机进行管理,如程序包、文件、网络配置、系统服务、系统用户等
1)首先定义state的入口文件top.sls
vim /srv/salt/top.sls
base:
'*':
- nginx
2)定义被控主机的状态,安装nginx,配置文件并启动
vim /srv/salt/nginx.sls
4.使用jinja定义nginx的配置文件
1)因为上面定义了nginx配置文件的源路径,所以先创建nginx目录
mkdir /srv/nginx
2)编写nginx的配置文件
vim /srv/salt/nginx/nginx.con
3)执行命令,让客户端自动安装nginx并配置启动
salt '*' state.highstate
完成