在生产环境中,服务器往往不止一台有可能成千,上万台。这对运维人员来说管理难度太大了。saltstack是一 个新的基础平台管理工具,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。
Saltstack介绍
1、 saltstack是使用python语言开发的;
2、轻量级的管理工具,批量执行命令;
3、常用模块: pkg (包)、file (文件)、cmd (执行命令或脚本)、user、service、cron
4、saltstack数据系统
Grains(静态数据)
pillar (动态数据)
saltstack三大功能
远程执行
配置管理
云管理
优缺点
优点:
首先,他速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的
其次,非常灵活,源码是python,方便理解和自定义模块(python 语言相对于其他的perl、ruby等还是很好理解的)
命令简单,功能强大
缺点:
部署minion端较为不便
Saltstack几个重要的组件
grains
grains是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等静态信息。
grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的
pillar
pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。
State
他是saltstack的最核心功能,通过预先指定好的sls文件对被控主机进行管理:包/文件/网络配置/系统服务/系统用户等。
实验环境:
1、准备三台主机,每台主机都要修改两个配置文件/etc/hosts和/etc/hostname。
[root@master ~]# cat /etc/hosts
192.168.35.100 master.saltstack.com
192.168.35.101 web01.saltstack.com
192.168.35.102 web02.saltstack.com[root@master ~]# cat /etc/hostname
master.saltstack.com
2、每台主机都关闭防火墙
[root@master ~]# systemctl stop firewalld.service
[root@master ~]# setenforce 0
3、分别为三台机器添加epel源
yum install -y epel-release
master上安装部署
1、安装salt-master软件包
[root@master ~]# yum -y install salt-master
2、修改主配置文件
[root@master ~]# vim /etc/salt/master
/15 interface: 192.168.35.100 #监听地址为本地IP地址
/215 auto_accept: True #避免要运行salt-key来确认证书认证
/416 file_roots:
/417 base:
/418 - /srv/salt #saltstack文件根目录位置,目录需要创建/552 pillar_opts: True #开启pillar功能,同步文件功能
/529 pillar_roots:
/530 base:
/531 - /srv/pillar #pillar的主目录,需要创建/710 nodegroups:
/711 group1: 'web01.saltstack.com'
/712 group2: 'web02.saltstack.com' #组分类
3、查看对主配置文件做的更改
[root@master ~]# cat /etc/salt/master | grep -v ^$ | grep -v ^#
interface: 192.168.35.100
auto_accept: True
file_roots:
base:
- /srv/salt
pillar_roots:
base:
- /srv/pillar
pillar_opts: True
nodegroups:
group1: 'web01.saltstack.com'
group2: 'web02.saltstack.com'
4、创建salt与pillar文件根目录
[root@master ~]# mkdir /srv/salt
[root@master ~]# mkdir /srv/pillar
5、启动服务并查看端口
[root@master ~]# systemctl start salt-master.service
[root@master ~]# systemctl enable salt-master.service
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.
[root@master ~]# netstat -ntap | egrep '4505|4506'
tcp 0 0 192.168.35.100:4505 0.0.0.0:* LISTEN 60213/python
tcp 0 0 192.168.35.100:4506 0.0.0.0:* LISTEN 60237/python
web01和web02上操作
1、在两台上分别安装salt-minion安装包
yum -y install salt-minion
2、修改配置文件
[root@web01 ~]# vim /etc/salt/minion
/16 master: 192.168.35.100 #指定主控端IP
/78 id: web01.saltstack.com #指定被控端主机名
3、启动服务
[root@web01 ~]# systemctl start salt-minion.service
4、web02和web01的以上操作一样
master端操作
1、测试与被控端的通信状态
[root@master ~]# salt '*' test.ping
web02.saltstack.com:
True
web01.saltstack.com:
True
2、远程执行命令
[root@master ~]# salt '*' cmd.run 'df -h'
web02.saltstack.com:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 20G 3.5G 17G 18% /
devtmpfs 897M 0 897M 0% /dev
tmpfs 912M 12K 912M 1% /dev/shm
tmpfs 912M 9.0M 903M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/mapper/centos-home 10G 37M 10G 1% /home
/dev/sda1 6.0G 179M 5.9G 3% /boot
tmpfs 183M 0 183M 0% /run/user/0
tmpfs 183M 12K 183M 1% /run/user/42
web01.saltstack.com:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 20G 4.4G 16G 22% /
devtmpfs 897M 0 897M 0% /dev
tmpfs 912M 12K 912M 1% /dev/shm
tmpfs 912M 9.0M 903M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/mapper/centos-home 10G 37M 10G 1% /home
/dev/sda1 6.0G 179M 5.9G 3% /boot
tmpfs 183M 12K 183M 1% /run/user/42
tmpfs 183M 0 183M 0% /run/user/0
3、查看在 master 上已经被接受过的客户端
[root@master ~]# salt-key
Accepted Keys:
web01.saltstack.com
web02.saltstack.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:
4、查看被控主机上grains所有值:(每次minion在启动是都会获取客户端信息)
(1)静态数据查看
[root@master ~]# salt 'web01.saltstack.com' grains.items
(2)动态数据查看
[root@master ~]# salt 'web01.saltstack.com' pillar.items
配置管理安装Apache
远程通过 yum 方式安装 Apache。步骤如下:
1、修改配置文件,创建目录(之前已经修改并创建)
[root@master ~]# vim /etc/salt/master #打开如下内容的注释
/416 file_roots:
/417 base:
/418 - /srv/salt注意: base、dev(开发环境)、test(测试环境)、prod(生产环境)
[root@master ~]# mkdir /srv/salt #创建目录
2、写管理性文件
[root@master ~]# vim /srv/salt/top.sls
base:
'*':
- apache注意:'*',则表示在所有的客户端执行 apache 模块
3、写apache文件
[root@master ~]# vim /srv/salt/apache.sls
apache-service:
pkg.installed:
- names: #如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
4、重启服务
[root@master salt]# systemctl restart salt-master.service
5、执行命令
[root@master salt]# salt '*' state.highstate
web02.saltstack.com:
----------
ID: apache-service
Function: pkg.installed
Name: httpd
Result: True
Comment: Package httpd is already installed.
Started: 11:51:24.096177
Duration: 2127.096 ms
Changes:
----------
ID: apache-service
Function: pkg.installed
Name: httpd-devel
Result: True
Comment: The following packages were installed/updated: httpd-devel
Started: 11:51:26.223581
Duration: 48428.685 ms
Changes:
----------
apr-devel:
----------
new:
1.4.8-5.el7
old:
apr-util-devel:
----------
new:
1.5.2-6.el7
old:
cyrus-sasl:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
cyrus-sasl-devel:
----------
new:
2.1.26-23.el7
old:
cyrus-sasl-gssapi:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
cyrus-sasl-lib:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
cyrus-sasl-md5:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
cyrus-sasl-plain:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
cyrus-sasl-scram:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
expat-devel:
----------
new:
2.1.0-10.el7_3
old:
httpd-devel:
----------
new:
2.4.6-90.el7.centos
old:
libdb:
----------
new:
5.3.21-25.el7
old:
5.3.21-20.el7
libdb-devel:
----------
new:
5.3.21-25.el7
old:
libdb-utils:
----------
new:
5.3.21-25.el7
old:
5.3.21-20.el7
openldap:
----------
new:
2.4.44-21.el7_6
old:
2.4.44-5.el7
openldap-devel:
----------
new:
2.4.44-21.el7_6
old:
----------
ID: apache-service
Function: service.running
Name: httpd
Result: True
Comment: Service httpd has been enabled, and is running
Started: 11:52:14.669583
Duration: 1595.33 ms
Changes:
----------
httpd:
TrueSummary
------------
Succeeded: 3 (changed=2)
Failed: 0
------------
Total states run: 3
web01.saltstack.com:
----------
ID: apache-service
Function: pkg.installed
Name: httpd
Result: True
Comment: Package httpd is already installed.
Started: 11:51:24.709143
Duration: 2124.908 ms
Changes:
----------
ID: apache-service
Function: pkg.installed
Name: httpd-devel
Result: True
Comment: The following packages were installed/updated: httpd-devel
Started: 11:51:26.834366
Duration: 55238.452 ms
Changes:
----------
apr-devel:
----------
new:
1.4.8-5.el7
old:
apr-util-devel:
----------
new:
1.5.2-6.el7
old:
cyrus-sasl:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
cyrus-sasl-devel:
----------
new:
2.1.26-23.el7
old:
cyrus-sasl-gssapi:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
cyrus-sasl-lib:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
cyrus-sasl-md5:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
cyrus-sasl-plain:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
cyrus-sasl-scram:
----------
new:
2.1.26-23.el7
old:
2.1.26-21.el7
expat-devel:
----------
new:
2.1.0-10.el7_3
old:
httpd-devel:
----------
new:
2.4.6-90.el7.centos
old:
libdb:
----------
new:
5.3.21-25.el7
old:
5.3.21-20.el7
libdb-devel:
----------
new:
5.3.21-25.el7
old:
libdb-utils:
----------
new:
5.3.21-25.el7
old:
5.3.21-20.el7
openldap:
----------
new:
2.4.44-21.el7_6
old:
2.4.44-5.el7
openldap-devel:
----------
new:
2.4.44-21.el7_6
old:
----------
ID: apache-service
Function: service.running
Name: httpd
Result: True
Comment: Service httpd has been enabled, and is running
Started: 11:52:22.094016
Duration: 1539.146 ms
Changes:
----------
httpd:
TrueSummary
------------
Succeeded: 3 (changed=2)
Failed: 0
------------
Total states run: 3
6、安装好后可以在被控制端检查是否安装上
[root@web01 ~]# rpm -q httpd
httpd-2.4.6-90.el7.centos.x86_64
[root@web02 ~]# rpm -q httpd
httpd-2.4.6-90.el7.centos.x86_64