一.Salt介绍
简介
-
一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行)
-
一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据
-
我们可以通过官网查看它的具体信息
-
并行执行使命令发送到远程系统是并行的而不是串行的
-
使用安全加密的协议
-
使用最小最快的网络载荷
-
提供简单的编程接口
配置环境:rhel6.5
主机名 | ip | 软件 |
---|---|---|
server1 | 172.25.1.1 | salt-master |
server2 | 172.25.1.2 | salt-minion |
server3 | 172.25.1.3 | salt-minion |
http://docs.saltstack.cn/ref/states/all 所有内置的state模块列表
Host解析(3台)
[root@server* ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.1.1 server1
172.25.1.2 server2
172.25.1.3 server3
二.salt配置
配置yum 源
rhel6中包含了salt的相关依赖性及安装包
[source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/rhel6
enabled=1
gpgcheck=0
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/rhel6.5
enabled=1
gpgcheck=0
安装salt
[root@server1 ~]# yum install -y salt-master
[root@server2 ~]# yum install -y salt-minion
[root@server3 ~]# yum install -y salt-minion
修改配置文件并启动服务
[root@server1 ~]# vim /etc/salt/master
15 interface: 172.25.1.1 #指定master
[root@server1 ~]# /etc/init.d/salt-master start
Starting salt-master daemon: [ OK ]
[root@server2 ~]# vim /etc/salt/minion
16 master: 172.25.1.1 #指定master
[root@server2 ~]# /etc/init.d/salt-minion start
Starting salt-minion:root:server2 daemon: OK
[root@server3 ~]# vim /etc/salt/minion
16 master: 172.25.1.1
[root@server3 ~]# /etc/init.d/salt-minion start
Starting salt-minion:root:server2 daemon: OK
master会开启4505和4506两个接口,4505端口负责推送消息给minion,4506负责接受minion的报告
建立关联
[root@server1 ~]# salt-key -L ##查看
Accepted Keys:
Denied Keys:
Unaccepted Keys:
server2
server3
Rejected Keys:
[root@server1 ~]# salt-key -a server2 ##-a 指定关联
The following keys are going to be accepted:
Unaccepted Keys:
server2
Proceed? [n/Y] Y
Key for minion server2 accepted.
[root@server1 ~]# salt-key -L ##查看关联的主机
Accepted Keys:
server2
Denied Keys:
Unaccepted Keys:
server3
Rejected Keys:
[root@server1 ~]# salt-key -A ##-A 全部关联
The following keys are going to be accepted:
Unaccepted Keys:
server3
Proceed? [n/Y] Y
Key for minion server3 accepted.
[root@server1 ~]# salt-key -L
Accepted Keys:
server2
server3
Denied Keys:
Unaccepted Keys:
Rejected Keys:
关联相当于master和minion做了公钥交换
[root@server1 minions]# lsof -i :4505 ##查看4505端口占用情况
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 1083 root 16u IPv4 13907 0t0 TCP server1:4505 (LISTEN)
salt-mast 1083 root 18u IPv4 17408 0t0 TCP server1:4505->server2:50794 (ESTABLISHED)
salt-mast 1083 root 19u IPv4 17470 0t0 TCP server1:4505->server3:46534 (ESTABLISHED)
[root@server1 salt]# salt '*' test.ping ##调用python内置test模块中的ping方法
server3:
True
server2:
True
[root@server1 minions]# yum install python-setproctitle -y ##安装辅助模块
[root@server1 minions]# /etc/init.d/salt-master restart
利用salt部署httpd服务
(1)salt的基本配置
[root@server1 salt]# vim /etc/salt/master
534 file_roots:
535 base:
536 - /srv/salt #安装脚本的基础位置
[root@server1 ~]# mkdir /srv/salt
[root@server1 ~]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]
[root@server1 ~]# cd /srv/salt/
[root@server1 salt]# mkdir apache
(2)httpd的安装脚本
[root@server1 ~]# salt server2 state.sls apache.install test=true #测试方法,可以测试脚本是否可以推送成功
[root@server1 salt]# cd /srv/salt/apache
[root@server1 apache]# vim install.sls
apache-install: #id名称不能重复
pkg.installed: #安装的软件
- pkgs:
- httpd
service.running: #关于服务的启动
- name: httpd #启动httpd服务
- enable: true #开机自动启动
- reload: true #如果watch的文件有更改则进行reload
- watch:
- file: /etc/httpd/conf/httpd.conf
file.managed: #对文件的管理
- name: /etc/httpd/conf/httpd.conf #将source中的文件推送到name的位置
- source: salt://apache/file/httpd.conf
- user: root #文件所有人
- group: root #文件所有组
- mode: 644 #文件权限
(3)源码安装nginx
mkdir /srv/salt/nginx/file -p
cd /srv/salt/nginx
[root@server1 nginx]# vim make.sls #安装nginx的安装脚本
nginx-install:
pkg.installed:
- pkgs: #关于nginx的依赖性安装
- pcre-devel
- gcc
- openssl-devel
file.managed: #文件管理
- name: /mnt/nginx-1.14.0.tar.gz #将source的文件推送到客户端的name目录
- source: salt://nginx/file/nginx-1.14.0.tar.gz #服务端文件存放位置
cmd.run: #在客户端执行的命令,编译的一些基础操作,利用shell脚本编写
- name: cd /mnt && tar zxf nginx-1.14.0.tar.gz && cd nginx-1.14.0 && sed -i 's/#define NGINX_VER "nginx\/" NGINX_VERSION/#define NGINX_VER "nginx\/"/g' src/core/nginx.h && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio &> /dev/null && make &> /dev/null && make install &>/dev/null
#在编译时候需要指定的shell命令
- creates: /usr/local/nginx #如果存在这个文件则不继续执行安装,可以防止二次安装
mkdir /srv/salt/users
cd /srv/salt/users
vim nginx.sls #nginx用户添加脚本
nginx-group:
group.present:
- name: nginx
- gid: 800
nginx-user:
user.present:
- name: nginx
- uid: 800
- gid: 800
- shell: /sbin/nologin
- createhome: False
- home: /usr/local/nginx
[root@server1 nginx]# vim service.sls #用户的创建,配置文件修改,运行脚本
include: #包含的其他脚本
- nginx.make #源码编译安装脚本
- users.nginx #用户创建脚本
/usr/local/nginx/conf/nginx.conf: #文件目录id,可以将source中的文件方在客户端的此位置
file.managed: #文件管理
- source: salt://nginx/file/nginx.conf #源文件位置
nginx-service: #关于服务启动的脚本
file.managed:
- name: /etc/init.d/nginx #放在客户端的指定位置
- source: salt://nginx/file/nginx #源启动脚本位置,需要自己编写启动脚本
- mode: 755
service.running:
- enable: True
- name: nginx #服务名称
- reload: True
- watch: #监控文件的内容
- file: /usr/local/nginx/conf/nginx.conf
[root@server1 nginx]# salt server3 state.sls nginx.service #推送给server3
**测试
[root@server3 ~]# netstat -nutlp|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4515/nginx**