1.1、Salt单个命令执行
必Salt底层基于ZeroMQ PUB- SUB
pattern, Master/Minions通信高效传递及扩展
![image-20210512172216110]()
Salt部署
安装Salt
Master配置
Minion配置
Key管理
Hello World
安装Salt
CentOS下安装master&minion
Ubuntu下安装master&minion
Windows下安装minion
其他操作系统安装
CentOS下安装master&minion
-------------------------
查看epel
# rpm -qal grep epel
必添加EPEL repo (for CentOS 6)
rpm - ivh http://dl.fedoraproiect.org/pub/epel/8/x86/epel-release-6-8.noarch.rpm
安装master
yum install salt master #安装salt master
chckconfig salt master on #配置salt master开机启动
service salt-master start #启动salt master
安装minion
yum install salt -minion #安装salt minion
sed -i '/#master: salt/a\master: 192.168.3.31\' /etc/salt/minion
#配置master ip
chkconfig salt-minion on #配置salt minion开机启动
service salt-minion start #启动salt minion
✧注意:
EPEL 5中,zeromq版本为2.1.9版本, 存在keepalive bug, 需要升级到zeromq 3+版本
1.2、saltstack 配置基础
172.31.7.101 master
172.31.7.102 salt01
172.31.7.103 salt02
172.31.7.104 salt03
172.31.7.105 salt04
172.31.7.101 master
---------------------
配置个主机解析
# vim /etc/hosts
172.31.7.101 master
172.31.7.102 salt01
172.31.7.103 salt02
172.31.7.104 salt03
172.31.7.105 salt04
给个主机联通
D:\和彩云同步文件夹\scripte file\key-验证各主机联通省密码\ssh-key-push.sh
# bash ssh-key-push.sh
下载rpm包
rpm --import https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
配置yum源
vim /etc/yum.repos.d/saltstack.repo
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
清除缓存
sudo yum clean expire-cache
sudo yum update
安装master
yum install salt-master
修改配置文件
# sed -ri '/^#master:/c\master: master' /etc/salt/minion
发送主机解析文件到各个主机中
# for i in {1..4};do scp -r /etc/hosts salt0$i:/etc/;done
启动master服务
# systemctl --now enable salt-master
172.31.7.102 salt01 172.31.7.103 salt02
172.31.7.104 salt03 172.31.7.105 salt04
============================================
测试ping,172.31.7.101 master
# ping master
下载slave节点的包
# yum install -y salt-minion
修改配置文件
# sed -ri '/^#master:/c\master: master' /etc/salt/minion
启动master服务
# systemctl --now enable salt-minion
172.31.7.101-master
====================
# salt-key #查看已连接的key主机
Accepted Keys:
Denied Keys:
Unaccepted Keys:
salt01
salt02
salt03
salt04
Rejected Keys:
查看salt-key使用帮助
# salt-key --help
-a ACCEPT, --accept=ACCEPT #指的是接收某个key
-A, --accept-all Accept all pending keys.
-R, --reject-all Reject all pending keys. #拒绝所有key
-D, --delete-all Delete all keys.
把salt04加入到key中
# salt-key -a salt04
接受全部的key
# salt-key -A -y
测试所有主机能否ping通
# salt '*' test.ping
使用模块cmd.run在全部主机上执行命令
# salt '*' cmd.run 'touch zhgedu.txt'
# salt '*' cmd.run 'rm -f zhgedu.txt'
使用模块cmd.run在单个主机上执行命令
# salt 'salt02*' cmd.run 'uptime' #正则比配后面有的内容
# salt 'salt02' cmd.run 'uptime'
使用模块cmd.run在多台个主机上执行命令
-L list
# salt -L 'salt02,salt03' cmd.run 'df -h' #-L使用列表查询
ip地址的子网范围进行匹配
# salt -S '172.31.7.0/24' cmd.run 'df -h' #-S使用子网来执行
配置全局角色
vim /etc/salt/master
file_roots:
base: #开启全局环境
- /srv/salt/
# dev: #开发环境
# - /srv/salt/dev/services
# - /srv/salt/dev/states
# prod: #生产环境使用
# - /srv/salt/prod/services
# - /srv/salt/prod/states
创建全局角色
# mkdir /srv/salt -p
重新启动服务
# systemctl restart salt-master
统一安装httpd、mod_ssl
---------------------
创建剧本角色的配置文件
# cd /srv/salt && vim top.sls
# cat apache.sls
apache-pkg:
pkg.installed:
- names:
- httpd
- mod_ssl
apache-service:
service.running:
- name: httpd
- enable: True
查看配置文件
# cat top.sls
base:
'*': #所有主机执行
- apache
测试剧本是否产生语法错误,并没有执行
# salt '*' state.highstate test=Ture
启动剧本,其他主机按照剧本中指定的按照服务
# salt '*' state.highstate
统一安装vsftpd
--------------
创建全局执行配置文件
# cat top.sls
base:
'*':
- apache
- vsftpd
创建执行配置文件
# vim vsftpd.sls
vsftpd-service:
pkg.installed:
- names:
- vsftpd
测试剧本是否产生语法错误,并没有执行
# salt '*' state.highstate test=Ture
启动剧本,其他主机按照剧本中指定的按照服务
# salt '*' state.highstate
统一启动http服务
----------------
# cat apache.sls
apache-pkg:
pkg.installed:
- names:
- httpd
- mod_ssl
apache-service:
service.running:
- name: httpd
- enable: True
[root@master salt]#
# cat top.sls #此文件不变
base:
'*':
- apache
- vsftpd
执行服务
# salt '*' state.highstate test=Ture
# salt '*' state.highstate
1.3、Saltstack Grains
数据系统Grains
Minion收集信息,Master用于并匹配Target
Minion端设置,提供给Master端
Grains里面收集了minion启动时候的所有系统信息,存储在minion端。
测试所有主机能否ping通
# salt '*' test.ping
列出主机所有项目
# salt 'salt04*' grains.ls
# salt 'salt04*' grains.items #获取所有项目的具体项
获取项目中具体值
# salt 'salt04*' grains.item ipv4 #查看到主机的ip地址
使用版本进行匹配执行
# salt -G 'osrelease:7.9.2009' test.ping #同一版本的主机会立即响应
172.31.7.102 salt01 172.31.7.103 salt02
172.31.7.104 salt03 172.31.7.105 salt04
============================================
设置机柜存储位置
# vim /etc/salt/minion
salt01
------
grains:
roles:
- webserver
- dbserver
deployment: datacenter1 #数据中心1
cabinet: 13 #13号机柜
cab_u: 14-15 #14-15U位置
salt02
-------
grains:
roles:
- webserver
- dbserver
deployment: datacenter1
cabinet: 13
cab_u: 17-18
salt03
-------
grains:
roles:
- ftpserver #角色发生改变
- memcache #连接的数据库位memcahe
deployment: datacenter4 #数据中心4
cabinet: 12 #存放在12号机柜
cab_u: 14-15 #14-15U位置
salt04
-------
grains:
roles:
- ftpserver
- memcache
deployment: datacenter4
cabinet: 13
cab_u: 14-15
重新启动服务
# systemctl restart salt-minion.service
执行在1号数据中心的机器
# salt -G 'deployment:datacenter1' cmd.run 'uptime'
# salt -G 'deployment:datacenter4' cmd.run 'uptime'
通过角色区匹配机器
# salt -G 'roles:webserver' cmd.run 'uptime'
# salt -G 'roles:ftpserver' cmd.run 'uptime'
1.4、Saltstack Pillar
数据系统Pillar
Master端设置,提供给Minion端
Pillar在SaltStack中主要作用是存储和定义配置管理中需要的一些数据,比如软件版本号、用户名密码等信息,它的存储格式跟Grains类似,都是YAML格式。
172.31.7.102 salt01 172.31.7.103 salt02
172.31.7.104 salt03 172.31.7.105 salt04
============================================
全部注释
# vim /etc/salt/minion
salt01
------
#grains:
# roles:
# - webserver
# - dbserver
# deployment: datacenter1
# cabinet: 13
# cab_u: 14-15
salt02
------
#grains:
# roles:
# - webserver
# - dbserver
# deployment: datacenter1
# cabinet: 13
# cab_u: 17-18
salt03
------
#grains:
# roles:
# - ftpserver
# - memcache
# deployment: datacenter4
# cabinet: 12
# cab_u: 14-15
salt04
------
#grains:
# roles:
# - ftpserver
# - memcache
# deployment: datacenter4
# cabinet: 13
# cab_u: 14-15
重新启动服务
# !s
# systemctl restart salt-minion.service
172.31.7.101 master
--------------------
开启此几行
vim /etc/salt/master
file_roots:
base:
- /srv/salt/
重新启动服务
# !s
# systemctl restart salt-master.service
172.31.7.101 master
====================
取消注释piller服务
# vim /etc/salt/master
pillar_roots:
base:
- /srv/pillar
创建文件目录
# mkdir /srv/pillar
重新启动服务
# !s
# systemctl restart salt-master.service
添加角色
env.salt01.sls
--------------
# vim env.salt01.sls
roles:
- webserver
- dbserver
deployment: datacenter1
cabinet: 13
cab_u: 14-15
env.salt02.sls
--------------
# vim env.salt02.sls
roles:
- webserver
- dbserver
deployment: datacenter1
cabinet: 13
cab_u: 17-18
env.salt03.sls
--------------
# vim env.salt03.sls
roles:
- ftpserver
- dbserver
deployment: datacenter4
cabinet: 12
cab_u: 14-15
env.salt04.sls
--------------
# vim env.salt04.sls
roles:
- ftpserver
- dbserver
deployment: datacenter4
cabinet: 13
cab_u: 14-15
创建pillar入口文件
# vim /srv/pillar/top.sls
base:
'salt01': #此值为各主机名
- env_salt01
'salt02':
- env_salt02
'salt03':
- env_salt03
'salt04':
- env_salt04
刷新模块pillar
# salt '*' saltutil.refresh_pillar
执行角色参数
# salt -I 'roles:ftpserver' cmd.run 'uptime'