saltStack 服务架构介绍
SaltStack是一种基于C/S架构的服务模式,在SaltStack架构中服务器端叫作Master,客户端叫作Minion,传统C/S架构为:客户端发送请求给服务器端,服务器端接收到请求并且处理完成后再返回给客户端。在SaltStack架构中不仅有传统的C/S架构服务模式,而且有消息队列中的发布与订阅(pub/sub)服务模式。这使得SaltStack应用场景更加丰富。目前在实际环境中一般使用SaltStack的C/S架构进行配置管理。
在Master和Minion端都是以守护进程的模式运行,一直监听配置文件里面定义的ret_port(接受minion请求,默认端口号:4506)和publish_port(发布消息,默认端口号:4505)的端口。当Minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。默认客户端请求id是socket.getfqdn()取到的值,也可以在Minion启动之前修改Minion的id值。
网络拓扑图
系统: CentOS 7
server1 172.25.41.1 master
server2 172.25.41.2 minion
【server1】【server2】 配置yum源
[root@server1(2) ~]# vim /etc/yum.repos.d/rhel-source.repo
[saltsack]
name=saltsack
baseurl=http://172.25.41.250/rhel6
enabled=1
gpgcheck=0
[root@server1(2) ~]# yum repolist
一·安装master
[root@server1 ~]# yum install -y salt-master
[root@server1 ~]# /etc/init.d/salt-master start
二·安装minion以及修改配置文件
[root@server2 ~]# yum install -y salt-minion
[root@server2 ~]# cd /etc/salt/
[root@server2 salt]# ls
minion
[root@server2 salt]# vim minion
16 master: 172.25.41.1 (master IP或是域名)
[root@server2 salt]# /etc/init.d/salt-minion start
三·认证key以及测试
[root@server1 ~]# salt-key -L #查看密钥
[root@server1 ~]# salt-key -A #指定某台 minion 进行认证 key
[root@server1 ~]# salt server2 test.ping
[root@server1 ~]# salt server2 cmd.run hostname
[root@server1 ~]# salt server2 cmd.run 'df -h'
四·saltstack的配置管理
1·查看公钥
[root@server1 ~]# cd /etc/salt/pki/master/
[root@server1 master]# md5sum master.pub
[root@server2 ~]# cd /etc/salt/pki/minion/
[root@server2 minion]# md5sum minion_master.pub
2·查看私钥
[root@server2 minion]# md5sum minion.pub
[root@server1 master]# yum install -y tree
[root@server1 master]# tree .
[root@server1 master]# cd minions
[root@server1 minions]# ls
server2
[root@server1 minions]# md5sum server2 #查看server2私钥
3·查看master端口
[root@server1 minions]# cd /etc/salt/
[root@server1 salt]# netstat -antlp
tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 1111/python2.6
tcp 0 0 172.25.41.1:4505 172.25.41.2:47704 ESTABLISHED 1111/python2.6
[root@server1 salt]# yum install -y lsof
[root@server1 salt]# lsof -i :4505
[root@server1 salt]# lsof -i :4506
4·查看minion端口
[root@server2 minion]# cd /etc/salt/
[root@server2 salt]# netstat -antlp
tcp 0 0 172.25.41.2:47704 172.25.41.1:4505 ESTABLISHED 1716/python2.6
[root@server1 salt]# yum install python-setproctitle.x86_64 -y
[root@server1 salt]# /etc/init.d/salt-master restart
[root@server1 salt]# ps ax
[root@server2 salt]# ps ax
了解YAML
默认的SLS文件的renderer是YAML renderer。YAML是一个有很多强大
特性的标记性语言。Salt使用了一个YAML的小型子集,映射非常常用的
数据结构,像列表和字典。YAML renderer的工作是将YAML数据格式的
结构编译成为Python数据结构给Salt使用。
尽管YAML语法可能第一眼看上去很简洁但令人畏惧,但是只要记住三个
非常简单的规则就可以使用YAML语法写SLS文件了。
规则一: 缩进
YAML使用一个固定的缩进风格表示数据层结构关系。
Salt需要每个缩进级别由两个空格组成。不要使用tabs。
规则二: 冒号
Python的字典当然理所当然是简单的键值对。其他语言的用户应该 知道这个数据类型叫哈希表或者关联数组。
字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。Values的 表现形式冒号下面的每一行,用一个空格隔开:
my_key: my_value
在Python中,上面的将映射为:
{'my_key': 'my_value'}
另一种选择,一个value可以通过缩进与key联接。
my_key:
注解
上面的语法是有效的YAML,但是在SLS文件罕见,因为通常情况下,一个key
的value不是单一的,而是一个 列表 的values。
在Python中,上面的将映射为:
{'my_key': 'my_value'}
字典可以被嵌套:
first_level_dict_key:
second_level_dict_key: value_in_second_level_dict
在Python中:
{
'first_level_dict_key': {
'second_level_dict_key': 'value_in_second_level_dict'
}
}
规则三: 短横杠
想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进
级别作为同一列表的一部分。
- list_value_one
- list_value_two
- list_value_three
列表可以可以作为一个键值对的value。这个在Salt很常见:
my_dictionary:
- list_value_one
- list_value_two
- list_value_three
在Python中,上面的将映射为:
{'my_dictionary': ['list_value_one', 'list_value_two', 'list_value_three']}
五·用脚本自动安装软件httpd php
[root@server1 salt]# vim master
[root@server1 salt]# /etc/init.d/salt-master restart
[root@server1 salt]# mkdir /srv/salt
[root@server1 salt]# cd /srv/salt/
[root@server1 salt]# mkdir httpd
[root@server1 salt]# cd httpd/
[root@server1 httpd]# vim install.sls
[root@server1 httpd]# cat install.sls
apache-install:
pkg.installed:
- pkgs:
- httpd
- php
root@server1 httpd]# salt server2 state.sls httpd.install
【server2】minion 查看是否安装成功
[root@server2 salt]# rpm -q httpd
httpd-2.2.15-29.el6_4.x86_64
[root@server2 salt]# rpm -q php
php-5.3.3-26.el6.x86_64
六·开机自起服务
[root@server1 httpd]# vim install.sls
[root@server1 httpd]# cat install.sls
service.running:
- name: httpd
- enable: True
[root@server1 httpd]# salt server2 state.sls httpd.install
在【server2】查看
[root@server2 salt]# chkconfig --list httpd
[root@server2 salt]# netstat -antlp
tcp 0 0 :::80 :::* LISTEN 2054/httpd
七·更改httpd端口
方法一:
[root@server1 httpd]# vim install.sls
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://httpd/files/httpd.conf
- mode: 644
- user: root
service.running:
- name: httpd
- enable: True
- reload: True
- watch:
- file: apache-install
[root@server1 httpd]# mkdir files
[root@server1 httpd]# cd files
[root@server2 salt]# scp /etc/httpd/conf/httpd.conf server1:/srv/salt/httpd/files
[root@server1 files]# ls
httpd.conf
[root@server1 files]# vim httpd.conf
Listen 8080
[root@server1 files]# md5sum httpd.conf
[root@server2 salt]# md5sum /etc/httpd/conf/httpd.conf
[root@server1 files]# salt server2 state.sls httpd.install #检测
【server2】查看
方法二:
[root@server1 files]# vim httpd.conf
Listen 80
[root@server1 files]# salt server2 state.sls httpd.install
[root@server2 salt]# netstat -antlp #查看
方法三:
[root@server1 httpd]# vim install.sls
apache-install:
pkg.installed:
- pkgs:
- httpd
- php
service.running:
- name: httpd
- enable: True
- reload: True
- watch:
- file: /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf:
file.managed:
- source: salt://httpd/files/httpd.conf
- mode: 644
- user: root
-
[root@server1 httpd]# cd files/
[root@server1 files]# vim httpd.conf
Listen 8080
[root@server1 files]# salt server2 state.sls httpd.install
[root@server2 salt]# netstat -antlp #查看端口
方法四:
[root@server1 httpd]# vim install.sls
httpd:
pkg.installed
php:
pkg.installed
apache:
service.running:
- name: httpd
- enable: True
- reload: True
- watch:
- file: /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf:
file.managed:
- source: salt://httpd/files/httpd.conf
- mode: 644
- user: root
[root@server1 httpd]# cd files/
[root@server1 files]# vim httpd.conf
Listen 80
[root@server1 httpd]# salt server2 state.sls httpd.install
[root@server2 salt]# netstat -antlp