前言

工作机制:

  • Master和Minion都以守护进程的方式运行
  • Master监听配置文件里定义的ret_port(接收minion请求),和publish_port(发布消息)的端口
  • 当Minion运行时,它会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证
  • 当Master和Minion可以正常通信后,就可以进行各种各样的配置管理工作了

一、saltstack的安装部署

1.实验环境:

  • server1: 172.25.6.1 master
  • server2: 172.25.6.2 minion
  • server3: 172.25.6.3 minion

2.安装saltstack

server1:


server2:

server3:

3.启动服务

主节点:

[root@server1 salt]# systemctl start salt-master
[root@server1 salt]# systemctl start salt-minion
[root@server1 salt]# systemctl enable salt-master
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.
service to /usr/lib/systemd/system/salt-master.service.

4505端口:用来链接slave,发布订阅
4506端口:请求响应,模式为:zmq(消息队列)

两个从节点:

[root@server2 2018]# cd /etc/salt/
[root@server2 salt]# vim minion    16 master: 172.25.6.1       指定master
[root@server2 salt]# systemctl start salt-minion
[root@server2 salt]# systemctl enable salt-minion.service
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.
service to /usr/lib/systemd/system/salt-minion.service.[root@server3 2018]# cd /etc/salt/
[root@server3 salt]# vim minion    16 master: 172.25.6.1       指定master
[root@server3 salt]# systemctl start salt-minion
[root@server3 salt]# systemctl enable salt-minion.service
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.
service to /usr/lib/systemd/system/salt-minion.service.


4.添加连接密钥(查看密钥并加入)/在master添加minion

查看密钥

[root@server1 salt]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
server2
server3
Rejected Keys:

给server2添加密钥

[root@server1 salt]# salt-key -a server2
The following keys are going to be accepted:
Unaccepted Keys:
server2
Proceed? [n/Y] y
Key for minion server2 accepted.


查看密钥是否添加成功

[root@server1 salt]# salt-key -L
Accepted Keys:
server2
Denied Keys:
Unaccepted Keys:
server3
Rejected Keys:


给所有节点添加密钥

[root@server1 salt]# salt-key -A                    ##因为上面server2已经添加过了,所以这里给server3密钥
The following keys are going to be accepted:
Unaccepted Keys:
server3
Proceed? [n/Y] y
Key for minion server3 accepted.

再次查看

[root@server1 salt]# salt-key -L
Accepted Keys:
server2
server3
Denied Keys:
Unaccepted Keys:
Rejected Keys:


5.列出树状关系

[root@server1 pki]# yum install -y tree
[root@server1 salt]# cd /etc/salt/
[root@server1 salt]# cd pki/
[root@server1 pki]# tree .


通过下图可以看到server1、2、3的公钥是一样的


6.安装python-setproctitle,查看python端口情况

[root@server1 ~]# yum install -y python-setproctitle
[root@server1 ~]# systemctl restart salt-master


7.测试

二、yaml语法

在前面我们讲过ansible的playbook使用的是yaml语法,其实这都是因为它是用python写的,所以使用的yaml语法,那么我们就来具体了解一下yaml。

  • 默认的SLS文件的renderer是YAML renderer。YAML是一个有很多强大
    特性的标记性语言。Salt使用了一个YAML的小型子集,映射非常常用的
    数据结构,像列表和字典。YAML renderer的工作是将YAML数据格式的
    结构编译成为Python数据结构给Salt使用。
    尽管YAML语法可能第一眼看上去很简洁但令人畏惧,但是只要记住三个
    非常简单的规则就可以使用YAML语法写SLS文件了。

  • 三个规则
    1.规则一:缩进

    YAML使用一个固定的缩进风格表示数据层结构关系。Salt需要每个缩进级别
    由两个空格组成。不要使用tabs。如果要使用tabls的话建议修改.vimrc,设置tab的缩进格数。

    2.规则2:冒号

    Python的字典当然理所当然是简单的键值对。其他语言的用户应该
    知道这个数据类型叫哈希表或者关联数组。字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。Values的
    表现形式冒号下面的每一行,用一个空格隔开:my_key: my_value在Python中,上面的将映射为:{'my_key': 'my_value'}另一种选择,一个value可以通过缩进与key联接。my_key:
    my_value注解上面的语法是有效的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'}
    }
    

    3.规则3:短横杠

    想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进
    级别作为同一列表的一部分。- 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)

1.修改master端的配置文件

[root@server1 ~]# cd /etc/salt/
[root@server1 salt]# vim master674 file_roots:675   base:676     - /srv/salt       这个目录没有得自己建
[root@server1 salt]# mkdir /srv/salt
[root@server1 salt]# systemctl restart salt-master


2.安装httpd

[root@server1 salt]# cd /srv/salt/
[root@server1 salt]# mkdir apache
[root@server1 salt]# cd apache/
[root@server1 apache]# ls
[root@server1 apache]# vim install.sls
httpd-install:pkg.installed:- pkgs:- httpd- php- httpd-toolsservice.running:- name: httpd- enable: true- reload: true
[root@server1 apache]# salt server2 state.sls apache.install



3.指定配置文件并运行服务

[root@server1 apache]# vim install.sls
httpd-install:pkg.installed:- pkgs:- httpd- php- httpd-toolsservice.running:- name: httpd- enable: true- reload: truefile.managed:- name: /etc/httpd/conf/httpd.conf- source: salt://apache/files/httpd.conf- user: root- group: root- mode: 644
[root@server1 apache]# mkdir files
[root@server1 apache]# cd files/
[root@server1 files]# scp server2:/etc/httpd/conf/httpd.conf .
root@server2's password:
httpd.conf                                    100%   11KB  11.5KB/s   00:00
[root@server1 files]# ls
httpd.conf
[root@server1 files]# salt server2 state.sls apache.install


在从节点上查看是否修改了默认配置文件在从节点上查看是否修改了默认配置文件

4.将安装脚本和运行脚本分离

[root@server1 files]# cd ..
[root@server1 apache]# vim install.sls     仅安装,不运行
[root@server1 apache]# cat install.sls
httpd-install:pkg.installed:- pkgs:- httpd- php- httpd-toolsfile.managed:- name: /etc/httpd/conf/httpd.conf- source: salt://apache/files/httpd.conf- user: root- group: root- mode: 644
[root@server1 apache]# vim service.sls
include:- apache.install        运行时默认先执行安装脚本httpd-service:service.running:- name: httpd- enable: true- reload: true- watch:- file: httpd-install
[root@server1 apache]# salt server2 state.sls apache.service


我们可以看到整个service的流程是先安装,再运行

四、配置nginx的自动化部署

1.配置安装脚本

[root@server1 salt]# pwd
/srv/salt
[root@server1 salt]# mkdir nginx
[root@server1 salt]# cd nginx/
[root@server1 nginx]# mkdir files
[root@server1 nginx]# ls
files
[root@server1 nginx]# cd files/
[root@server1 files]# ls
nginx-1.15.9.tar.gz                     ##自行获取
[root@server1 files]# cd /srv/salt/nginx/
[root@server1 nginx]# vim install.sls
nginx-install:pkg.installed:- pkgs:- gcc- make- pcre-devel- zlib-develfile.managed:- name: /mnt/nginx-1.15.9.tar.gz- source: salt://nginx/files/nginx-1.15.9.tar.gzcmd.run:- name: cd /mnt && tar zxf nginx-1.15.9.tar.gz && cd nginx-1.15.9 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx &> /dev/null && make &> /dev/null && make install &> /dev/null- creates: /usr/local/nginx

2.配置执行脚本(分离)

[root@server1 nginx]# vim service.sls
include:- nginx.install/usr/local/nginx/conf/nginx.conf:file.managed:- source: salt://nginx/files/nginx.confnginx-service:file.managed:- name: /etc/systemd/system/nginx.service- source: salt://nginx/files/nginx.serviceservice.running:- name: nginx- enable: true- reload: true- watch:- file: /usr/local/nginx/conf/nginx.conf

3.files中添加所要的组件

[root@server1 nginx]# cd files/
[root@server1 files]# vim nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
[root@server1 files]# ls
nginx-1.15.9  nginx-1.15.9.tar.gz  nginx.conf  nginx.service
##nginx.conf 可以从nginx-1.15.9.tar.gz源码包里获得

4.执行脚本

[root@server1 files]# salt server3 state.sls nginx.service


如下图,nginx服务部署成功!

5.更改nginx配置文件再运行(因为在运行脚本中写了默认重启服务,所以再次执行脚本就生效啦)

[root@server1 files]# vim nginx.conf
worker_processes  auto;                 ##修改文件第三行,根据主机的cpu数目分配worker进程[root@server1 files]# salt server3 state.sls nginx.service

五、指定节点部署

1.编写sls文件,指定节点安装指定服务

[root@server1 salt]# pwd
/srv/salt
[root@server1 salt]# vim top.sls
base:'server2':- apache.service'server3':- nginx.service

2.运行sls文件,查看是否可以生效

[root@server1 salt]# salt '*' state.highstate


测试:

可以看到server2上是apache

server3上是nginx

SalttSack自动化运维(二)——环境安装及部署相关推荐

  1. 自动化运维工具——ansible安装及模块介绍

    ansbile 前言 一.主流自动化运维工具简介 1.1 Puppet 1.2 Saltstack 1.3 Ansible 二.Ansible 运维工具原理 三.Ansible安装 3.1 下载软件包 ...

  2. WebHook入门教程:快速实现自动化运维,如自动热部署、自动重启服务、自动备份数据库等等

    WebHook入门教程 当我们向Github仓库(其他支持webhook的Git仓库都可以)Push代码后,可以通过webhook向特定URL发起一次Post请求,本篇文章所说的WebHook,就是运 ...

  3. (运维)VMware-vCenter-Server-Appliance-5.0安装与部署

    可以下载 VMware vCenter Server Appliance,以作为在 Windows 计算机上安装 vCenter Server 的替代方法.vCenter Server Applian ...

  4. Ansible自动化运维笔记1(安装配置)

    1.Ansible的安装 pip install ansible==1.9.1 ansible1.9.1版本依赖的软件有 Python2.6以上版本 paramiko模块 PyYAML Jinja2 ...

  5. SalttSack自动化运维(四)——JINJA模块

    一.调用jinja 1.脚本指定jinja参数 [root@server1 pillar]# cd /srv/salt/apache/ [root@server1 apache]# vim insta ...

  6. 企业级自动化运维方案设计及Saltstack、Ansible等5种工具比较分析--云平台技术栈08...

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的服务器自动化配置! 来自:公众号talkwithtrend 1.企业运维现状与发展趋势 随着企业信息化的不断发展,运维人员需要面对 ...

  7. 运维技能定级标准第4篇——关于运维工程师岗位的自动化运维与运维开发技能级别设计

    运维工程师岗位工作技能的评定类别(5)和(6) 5.自动化运维技术 级别0,什么都不懂 级别1,了解ansible.saltstack.puppet等主流的自动化运维管理技术工具,掌握公司主要使用的一 ...

  8. 一个颜值低但脾气超好的自动化运维实战入门教程

    注:本教程由廖高祥发布于实验楼,版权归原作者所有. 什么是自动化运维? 自动化运维是指将IT运维中日常的.大量的重复性工作自动化,把过去的手工执行转为自动化操作.自动化运维不单纯是一个维护过程,更是一 ...

  9. 2011系统架构师大会分享-自动化运维中的关系管理

    问过一些技术方向的朋友,在他们眼中运维是做怎么样的事情?其中大部份人回答说:搬机器.装系统.收报警.写各种各样维护清理的shell脚本等等.运维真的只是做这些事情? 不同的公司.不同规模的集群,运维所 ...

最新文章

  1. SVN服务器从Windows迁移到Linux
  2. Linux系统监控之磁盘I/O篇
  3. 快手二面:引入RabbitMQ后,你如何保证全链路数据100%不丢失?
  4. Java进阶书籍推荐,赶快收藏起来!
  5. mysql 报表统计sql使用实例_mysql 案例~mysql元数据的sql统计
  6. modbus协议手册_20种PLC元件编号和Modbus编号地址对应表
  7. 10亿个数中求最大的10个数字
  8. 如何使用 SpringCloud 搭建服务注册中心?
  9. JavaScript Array(数组)对象
  10. 关于 Eureka 2.x,别再人云亦云了!
  11. WIN10系统——打开PB的帮助文档
  12. Epub,Mobi,Azw3电子书格式的区别,windows上有什么好用的epub阅读器
  13. SATA工作模式咋选?揭秘AHCI和IDE区别(1)
  14. 2022大湾区杯粤港澳金融数学建模备赛
  15. 复合函数高阶求导公式_复合函数求导公式有哪些
  16. Discuz安全之伪装后台,修改后台登陆页面信息
  17. 【最小割】HDU 5294 Tricks Device
  18. 恭喜!公积金将按月提取!12月31日前,全面执行!
  19. Getting Started in Six Sigma
  20. 曲线绕x轴旋转曲面方程_曲线绕着Ox轴旋转所得的曲面方程是______。

热门文章

  1. R语言构建xgboost模型、预测推理:输出预测概率、预测标签
  2. R语言caret包构建xgboost模型实战:特征工程(连续数据离散化、因子化、无用特征删除)、配置模型参数(随机超参数寻优、10折交叉验证)并训练模型
  3. 什么是数据湖(Data Lake)?
  4. 半监督+标签传播算法
  5. ML基石_12_NonLinearTransformation
  6. Linux下Boost编译安装
  7. Hybrid error correction and de novo assembly of single-molecule sequencing reads
  8. 基于现有工程解读stm32的工程文件
  9. python print 的使用方法
  10. python3和Python2的区别