目录
一、salt master-minion模式部署
特性:
远程执行、配置管理、云管理、事件驱动
master---node1---192.168.56.11
master---node2---192.168.56.12
#master和minion下载
[root@linux-node1 ~]# yum install -y epel-release salt-master salt-minion
[root@linux-node1 ~]# systemctl start salt-master
[root@linux-node2 ~]# yum install -y epel-release salt-minion
#配置master管理minion
[root@linux-node1-2 ~]# vi /etc/salt/minion
#master: salt 修改 master: 192.168.56.11
[root@linux-node1-2 ~]# systemctl start salt-minion
#master通过id识别minion,默认主机名,可通过minion中id选项配置
[root@linux-node2 salt]# cat /etc/salt/minion_id
linux-node2.example.com
#minion启动后会以id形式发送管理请求到master
[root@linux-node1 salt]# tree /etc/salt/pki/master/minions_pre/
/etc/salt/pki/master/minions_pre/
├── linux-node1.example.com
└── linux-node2.example.com
#master同意请求
[root@linux-node1 salt]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
linux-node1.example.com
linux-node2.example.com
Proceed? [n/Y] Y
Key for minion linux-node1.example.com accepted.
Key for minion linux-node2.example.com accepted.
#master查看节点
[root@linux-node1 salt]# salt "*" test.ping
linux-node2.example.com:
True
linux-node1.example.com:
True
#通信原理
#Salt使用发布-订阅模式与受管系统进行通信。连接由Salt Minion发起,这意味着受控端不需要监听端口。Salt Master使用的端口为4505 和4506,必须打开它们才能接受传入连接。
4505:所有Salt Minion建立与发布者端口的持久连接,并监听消息。命令通过此端口异步发送到所有连接,这使命令可以同时在大量系统上执行。
4506:Salt Minion根据需要,连接到服务器,将结果发送到Salt Master,并安全地请求文件和minion 特定的数据值(salt pillar)。
[root@linux-node1 salt]# lsof -n -i:4505
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 19120 root 13u IPv4 52032 0t0 TCP *:4505 (LISTEN)
salt-mast 19120 root 15u IPv4 55867 0t0 TCP 192.168.56.11:4505->192.168.56.11:41386 (ESTABLISHED)
salt-mast 19120 root 16u IPv4 55878 0t0 TCP 192.168.56.11:4505->192.168.56.12:38952 (ESTABLISHED)
二、salt salt-ssh模式部署
传统salt基础设施中,由minions主动链接master,master并不会存储minion的网络和主机配置。而基于ssh链接时,这个规则就需要改变,因为master必须通过ssh去链接他的minion。salt-ssh可以独立运行的,不需要minion端。salt-ssh可以代替expect之类的密码推送脚本,看起来功能不比expect差 。 salt-ssh 用的是sshpass进行密码交互的。
但是:
1、salt-ssh是串行的,效率低于master-minion模式
2、要求服务器支持ssh服务
#安装配置管理
[root@linux-node1 base]# yum install -y salt-ssh
[root@linux-node1 base]# cat /etc/salt/roster
linux-node1:
host: 192.168.56.11
user: root
passwd: 123456
linux-node2:
host: 192.168.56.12
user: root
passwd: 123456
#使用ssh远程执行
#加- i自动认证,不加的话参考一下
[root@linux-node1 base]# salt-ssh '*' -r 'uptime' -i
[root@linux-node1 base]# salt-ssh '*' -r 'uptime'
linux-node1.example:
----------
retcode:
254
stderr:
stdout:
The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
The authenticity of host '192.168.56.11 (192.168.56.11)' can't be established.
ECDSA key fingerprint is SHA256:Zpw1uMG0zaEdDsyD2O9nj3mYjTwTrgzQ8uh50cN2Oqs.
ECDSA key fingerprint is MD5:76:9d:4e:60:7b:38:cf:ef:f9:df:a3:0b:8b:17:ae:e7.
Are you sure you want to continue connecting (yes/no)?
#此时ssh有验证访问机制,临时关闭解决
[root@linux-node1 base]# vim /etc/ssh/ssh_config
StrictHostKeyChecking ask修改为no
[root@linux-node1 base]# systemctl restart sshd
特别注意:
salt-ssh第一次执行是根据roster文件里配置的账号密码推送密码,来实现自动交互的。
执行完了后会在目标服务器里面,追加master端(即源机器)的key。
然后就可以删除roster里面的passwd密码条目并且改回ssh规则了,不影响后批量操作的执行。
三、salt配置管理
#master目录规划
创建配置文件读取目录,可分开发、测试、项目等环境配置(base为默认目录)
[root@linux-node1 ~]# mkdir -p /srv/salt/{base,dev.test.prod}
[root@linux-node1 ~]# vim /etc/salt/master
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
test:
- /srv/salt/test
prod:
- /srv/salt/prod
[root@linux-node1 ~]# systemctl restart salt-master
#先搞个apache服务sls脚本
[root@linux-node1 ~]# vim /srv/salt/base/web/apache.sls
apache:
pkg.installed:
- name: httpd
service.running:
- name: httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
解释说明:
apache:id声明,在所有环境(base、prod)下全局唯一
pkg:状态模块
.:引用关系
installed:模块中的方法
::代表层级关系
name:可以理解为参数,后面跟的是参数值
file.managed:文件管理模块,必须要有source指定文件的来源路径
name :节点需要管理的文件目录(minion目录)
source:要载入到节点的源文件,salt://代表着环境的根路径,这的根路径为:/srv/salt/base/(master目录)
user、group、mode:分别指定文件的所属者,所属组和权限
以上的文件还可以使用分id的写法:
apache-install:
pkg.installed:
- name: httpd
apache-service:
service.running:
- name: httpd
apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
#执行sls
#建议先yum update否则时间较长
[root@linux-node1 base]# salt 'linux-node2*' state.sls web.apache
四、salt高级状态
#上述每个脚本都要执行一遍太繁琐,可以通过指定计划脚本执行
#高级状态即统一规定哪些节点做什么操作,避免繁琐执行,统一规划
#开启高级状态
[root@linux-node1 web]# vi /etc/salt/master
开放 state_top: top.sls
#编写计划脚本
[root@linux-node1 base]# cat /srv/salt/base/top.sls
base:
'linux-node1-example.com':
- web.apache
'linux-node2-example.com':
- web.apache
#先测试没问题再执行
#在不想影响当前主机的运行情况,可以使用test=True 进行预测试
#通常我们所有高级状态或者sls脚本都要提前测试无误才可以
[root@linux-node1 base]# salt '*' state.highstate test=True
#执行高级状态模块
#执行highstate后,系统默认搜索base目录下之前配置的top.sls
[root@linux-node1 base]# salt '*' state.highstate