一、What is Saltstack
1、Salt介绍
Salt,汉语意思是盐。
Salt对于运维攻城狮来说,就像盐对人体体征一样重要;哈哈哈,我是这么意淫的。
SaltStack是一个服务器基础架构集中化管理平台,具有远程执行、配置管理、云管理等功能。
SaltStack是基于Python语言实现的;所以对于熟悉python的运维来说,那非常有亲切感,容易上手,而且yaml格式也类似于python的缩进,并且非常严格,刚入门的时候非常酸爽,因为你一不小心,多一个或者少一个空格,就容易出错,排错还挺费劲。
通过部署SaltStack环境,我们可以做到对成千上万台服务器批量执行命令;可以根据不同的业务线进行配置集中化管理、文件分发、服务器数据采集、操作系统基础以及软件包的管理,总之非常方便。
SaltStack是运维攻城狮们提高工作效率,规范化配置和操作的利器。有了它,你就可以吃着火锅,唱着歌,愉快地工作了。
2、特点
(1)部署简单、方便;
(2)支持大部分Unix/Linux及Windows环境;
(3)主从集中化管理;
(4)配置简单、功能强大、扩展性强;
(5)master和minion基于证书认证,安全;
(6)支持API及自定义模块,通过python可轻松扩展。
3、四种运行方式
(1)Local,即在本地运行
(2)Master/Minion模式, C/S模式
(3)Syndic 代理模式
(4)Salt SSH模式,这种模式不用安装minion 也可以收集。
二、Salt安装
1、环境准备
IP地址 主机名 操作系统192.168.56.11 linux-node1 CentOS7192.168.56.12 linux-node2 CentOS7
2、安装salt
打开http://repo.saltstack.com/,这是SaltStack自己的repo库, 进去后,你可以看到基于各种平台的安装方法
安装SaltStack的repository
yum install https://repo.saltstack.com/yum/redhat/salt-repo-2016.3-1.el7.noarch.rpm
两台机器上都安装repo源。
接下来安装Salt
yum install -y salt-master salt-minion注:在node1上安装master和minion,在node2上只安装minion
3、配置salt
启动master
systemctl start salt-master
启动minion,先进行配置,让minion知道它的老大是谁,谁在管它
vi /etc/salt/minion修改master: 192.168.56.11 #冒号后有空格,切记id:每台服务器有一个唯一标识符号;默认可以不做配置,为主机名启动minionsystemctl start salt-minion
查看minion的id
[root@linux-node1 ~]# cd /etc/salt/[root@linux-node1 /etc/salt]# lltotal 112-rw-r----- 1 root root 2626 Jun 11 04:43 clouddrwxr-xr-x 2 root root 6 Jun 14 04:42 cloud.conf.ddrwxr-xr-x 2 root root 6 Jun 14 04:42 cloud.deploy.ddrwxr-xr-x 2 root root 6 Jun 14 04:42 cloud.maps.ddrwxr-xr-x 2 root root 6 Jun 14 04:42 cloud.profiles.ddrwxr-xr-x 2 root root 6 Jun 14 04:42 cloud.providers.d-rw-r----- 1 root root 39184 Jul 24 04:41 masterdrwxr-xr-x 2 root root 38 Jul 24 04:44 master.d-rw-r----- 1 root root 31601 Jun 29 09:45 miniondrwxr-xr-x 2 root root 27 Jun 24 19:01 minion.d-rw-r--r-- 1 root root 23 Jun 24 18:54 minion_iddrwxr-xr-x 4 root root 32 Jun 24 18:42 pki-rw-r----- 1 root root 26460 Jun 11 04:43 proxy-rw-r----- 1 root root 344 Jun 11 04:43 roster[root@linux-node1 /etc/salt]# cat minion_id linux-node1.example.compki目录是minion第一次启动后创建的目录。使用tree命令查看pki目录,可以看到minion和master两个目录。在minion目录下有minion.pem和minion.pub。minion会把自己的公钥发给master。
查看master下目录情况
cd /etc/salt/master/pki/在pki下同样有两个目录master和minion在master目录下,在master同意添加minion之前,minion的公钥是存放在minions_pre目录下的,而且是以minion的ID存放公钥。纳管minion方法使用salt-key查看master下有哪些minion执行salt-key -a linux-node*然后执行salt-key,查看发生了什么变化[root@linux-node1 /etc/salt/pki]# salt-key Accepted Keys:linux-node1.example.comlinux-node2.example.comDenied Keys:Unaccepted Keys:Rejected Keys:再次查看公钥位置,会发现公钥已经被存放到/etc/salt/master/pki/minions[root@linux-node1 /etc/salt/pki]# tree ../pki/../pki/├── master│ ├── master.pem│ ├── master.pub│ ├── minions│ │ ├── linux-node1.example.com│ │ └── linux-node2.example.com│ ├── minions_autosign│ ├── minions_denied│ ├── minions_pre│ └── minions_rejected└── minion ├── minion_master.pub ├── minion.pem └── minion.pub
注意:minion上也有master的公钥,这样他们就可以通信了。
[root@linux-node2 salt]# cd pki/[root@linux-node2 pki]# tree.├── master└── minion ├── minion_master.pub ├── minion.pem └── minion.pub
4、远程执行
例1、salt '*' test.ping'*'在shell里面是有意义的,所有用引号引起来。此处是master远程执行的目标test是一个模块ping是模块里的一个方法,用于master和minion的通信。[root@linux-node1 /etc/salt/pki]# salt '*' test.pinglinux-node2.example.com: Truelinux-node1.example.com: True例2、[root@linux-node1 /etc/salt/pki]# salt 'linux-node1*' cmd.run 'w'linux-node1.example.com: 08:03:10 up 10:17, 2 users, load average: 0.21, 0.14, 0.08 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 06:56 1:05m 0.18s 0.18s -bash root pts/0 192.168.56.1 07:13 6.00s 1.51s 1.38s /usr/bin/python /usr/bin/salt linux-node1* cmd.run w例3、[root@linux-node1 /etc/salt/pki]# salt 'linux-node1*' cmd.run 'ls -l /tmp'linux-node1.example.com: total 32 drwxr-xr-x 2 root root 6 Jul 17 19:39 hsperfdata_root -rw-rw-r-- 1 zabbix zabbix 0 Jul 17 19:33 localhost-mysql_cacti_stats.txt -rw------- 1 root root 1411 May 27 10:35 localhost.crt -rw------- 1 root root 1675 May 27 10:35 localhost.key -rw-rw-r-- 1 zabbix zabbix 43 Jul 17 19:35 netstat.tmp drwxr-xr-x 3 root root 17 Jul 19 07:39 pear -rw-r--r-- 1 root root 1188 Jul 24 00:20 php_errors.log -rw-rw-r-- 1 zabbix zabbix 16308 Jul 17 17:58 sms.log drwx------ 3 root root 16 Jul 23 21:46 systemd-private-1718f11d5b814680841058906c1429c8-cobblerd.service-x1ZIHQ drwx------ 3 root root 16 Jun 24 11:07 systemd-private-ee2a5374182b40fb83bb256efa24f62b-cobblerd.service-hF5d1q drwx------ 3 root root 16 Jun 24 11:04 systemd-private-ee2a5374182b40fb83bb256efa24f62b-httpd.service-1ehcOR drwx------ 3 root root 16 Jun 24 11:08 systemd-private-ee2a5374182b40fb83bb256efa24f62b-mariadb.service-qOJnmO[root@linux-node1 /etc/salt/pki]# 例4、重启zabbix-agent[root@linux-node1 /etc/salt/pki]# salt 'linux-node1*' cmd.run 'systemctl restart zabbix-agent'linux-node1.example.com:这里没有返回,其实跟linux差不多,没有消息就是好消息