SaltStack安装使用
SaltStack是一个服务器集群管理的解决方案,通过salt命令可以高效的操作上万台服务器.
目录:
- 简介
- 安装
- 配置
- SLS文件语法
- SLS文件实例
- 实践
简介
SaltStack的组件有很多,我们主要关心salt-master和salt-minion两个.
salt-master通过将命令发送给salt-minion来实现操作salt-minions.
我这是使用两台主机,操作系统都是CentOS6.5的.
192.168.1.249同时作为master和minion,192.168.1.248作为minion.
安装
通过安装配置,我们需要实现在其中任意一台服务器上同时操作服务器集群.
安装的过程,我们参见其官方文档.
在249那台主机,添加yum源:
vim /etc/yum.repo.d/saltstack.repo
添加配置
[saltstack-repo]
name=SaltStack repo for Red Hat Enterprise Linux $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
https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/base/RPM-GPG-KEY-CentOS-6
生成缓存
yum makecache
安装必须的软件包
yum install salt-master salt-minion salt-ssh salt-syndic salt-cloud
注: 如果key下载不下来,可以把gpgcheck修改为0.
然后切换到248那台主机,添加yum源,安装salt-minion组件
yum install salt-minions
配置
首先配置249主机,修改其master组件配置文件
vim /etc/salt/master
修改其中3个字段
interface: 192.168.1.249
auto_accept: True
hash_type: sha256
这里hash_type推荐使用sha256,如果使用配置文件默认的md5的话,会在日志文件/var/log/salt/master中生成一条警告.
然后重启服务
service salt-master restart
然后配置249主机的minion组件,
vim /etc/salt/minion
修改其中的3个字段
id: minion-dev
master: 192.168.1.249
hash_type: sha256
然后重启minion服务
service salt-minion restart
由于我们开启了master的自动接受,过一会儿就能看到master接收了minion-dev了.
# salt-key -L
Accepted Keys:
minion-dev
Denied Keys:
Unaccepted Keys:
Rejected Keys:
接着配置248主机
vim /etc/salt/minion
修改关键字段
id: minion-dev2
master: 192.168.1.249
hash_type: sha256
启动服务
service salt-minion restart
然后在249的主机上查看当前管理的minion,
# salt-key -L
Accepted Keys:
minion-dev
minion-dev2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
然后测试一下两台minion主机
# salt "*" test.ping
minion-dev2:
True
minion-dev:
True
至此,master和minion的通讯基本配置完成了.
然后我们来使用salt部署系统.
首先找到/etc/salt/master中的file_roots字段,其中默认指定salt的state文件在/srv/salt目录下,我们先创建这个文件夹.
mkdir -p /srv/salt
然后我们需要书写xxx.sls配置文件,这种配置文件是使用yaml标记语言写的,先了解一下yaml 在slat中的使用.
SLS文件语法
这里有如下几个规则:
-
YAML使用一个固定的缩进来表示数据层之间的关系。salt要求每个级别的缺口正好有两个空格。不要使用制表符。
-
key: value组成一个键值对,当然还有另外一种写法
key: value
value换行后用两个空格缩进.
但是一般使用换行都是为了表示复杂的value,例如
first_level_dict_key:
second_level_dict_key: value_in_second_level_dict
-
相同缩进的破折号用来表示数组,破折号后面需要紧着一个空格,然后才是value,例如
- list_value_one
- list_value_two
- list_value_three
数组一个作为键值对的value出现,例如
my_dictionary:
- list_value_one
- list_value_two
- list_value_three
SLS文件实例
我们主要参见salt官方文档,先构建简单的配置.
在/srv/salt目录下,我们创建top.sls文件
base:
'*':
- webserver
然后也是slat目录,我们接着创建webserver.sls文件
httpd: # ID declaration
pkg: # state declaration
- installed # function declaration
然后我们执行命令,让minion安装apache
# salt '*' state.apply
minion-dev2:
----------
ID: httpd
Function: pkg.installed
Result: True
Comment: Package httpd is already installed
Started: 11:10:59.078186
Duration: 621.726 ms
Changes:
Summary for minion-dev2
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
minion-dev:
----------
ID: httpd
Function: pkg.installed
Result: True
Comment: Package httpd is already installed
Started: 19:11:13.506096
Duration: 672.966 ms
Changes:
Summary for minion-dev
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
注意:
- state.apply invoked without any SLS names will run state.highstate
- state.apply invoked with SLS names will run state.sls
上面的我们是通过state.apply来执行的,我们还可以通过
salt "*" state.sls webserver
来执行特定的sls文件.多个文件去掉.sls后缀,用逗号分隔.
实践
这次我们使用salt部署完整的服务器架构,具体包括一台LB,两台WEB服务器, WEB服务器分别部署NGINX,PHP7,MYSQL,MONGODB,REDIS,SUPERVISOR等服务.
主机:
主机名: salt1 IP地址: 192.168.1.241 作用:LB和salt-master机器
主机名: salt2 IP地址: 192.168.1.242 作用:WEB服务器和salt-minion机器1 salt名称: web-server1
主机名: salt3 IP地址: 192.168.1.243 作用:WEB服务器和salt-minion机器2 salt名称: web-server2
网路配置:
三台机器网络配置只有IP地址不同,其它完全相同。
首先配置网卡eth0,设置静态IP。
然后配置网关/etc/sysconfig/network
然后配置DNS服务器/etc/resolv.conf
配置salt-master机器的salt服务:
添加yum源: /etc/yum.repos.d/saltstack.repo
yum install salt-master python-progressbar
vim /etc/salt/master
修改以下字段
interface: 192.168.1.241
hash_type: sha256
启动服务
service salt-master start
yum install salt-minion
vim /etc/salt/minion
修改以下字段
id: web-lb
master: 192.168.1.241
hash_type: sha256
启动服务
service salt-minion start
配置salt-minion机器1的salt服务:
添加yum源: /etc/yum.repos.d/saltstack.repo
yum install salt-minion
vim /etc/salt/minion
修改以下字段
id: web-server1
master: 192.168.1.241
hash_type: sha256
启动服务
service salt-minion start
我们使用同样的方式配置salt-minion机器2的salt服务。
通过上面的操作,我们已经配置好了3台机器的salt服务,然后我们开始测试3台服务器的连接。
查看所有的minion机器:
# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
web-server1
web-server2
Rejected Keys:
接受2台minion服务器:
# salt-key -a web-server1
# salt-key -a web-server2
测试两台服务器的连接:
# salt "web-server*" test.ping
web-server1:
True
web-server2:
True
然后我们配置2台minion服务器组件:
- 基础组件 base.sls
- NGINX nginx.sls
- PHP7 php7.sls
- Redis redis.sls
- MySql mysql.sls
- MongoDB mongodb.sls
- Postgresql postgresql.sls
- NodeJs nodejs.sls
- Supervisor supervisor.sls
- PhpMyAdmin phpmyadmin.sls
- Golang golang.sls
- Sync sync.sls
- Lvs lvs.sls
写完这些配置文件,我们依次安装这些组件. 所有的配置文件可以到这里找到.
# salt 'web-server*' state.sls install.base,install.nginx,install.php7,install.redis,
install.mysql,install.mongodb,install.postgresql,install.nodejs,install.supervisor,install.phpmyadmin,
install.golang,install.rsync
# salt 'web-lb' state.sls install.lvs
运行完上面的这条命令,等待一段时间,所有的组件就安装完毕了.