saltstack批量部署并配置nginx

简介: 最近应别的部门要求研究了一下saltstack,感觉很好用哈!虽然我现在生产环境用的puppet,想以后逐渐用这个去替代puppet,至于ansible还没研究,以后有时间再看看吧! 一、Saltstack是什么? saltstack是一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。
最近应别的部门要求研究了一下saltstack,感觉很好用哈!虽然我现在生产环境用的puppet,想以后逐渐用这个去替代puppet,至于ansible还没研究,以后有时间再看看吧!

一、Saltstack是什么?

saltstack是一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。

saltstack底层采用动态的连接总线。使其可以用于编配,远程执行,配置管理等等。

二、实验目的:

根据不同的业务需求来分组部署和配置nginx服务器。三台服务器均采用CentOS6.5系统版本且最小化安装,要求能上互联网。Selinux和防火墙均已关闭。生产环境务必开启。

注意点:三台服务器一定要设置完整的fqdn,和域名一样的形式,不然下面你在主控端执行远程执行或者配置的时候等待的时间巨慢甚至还会出线其它不可控的问题。这个是血的教训。

三、实验环境信息:

角色

主机名

IP地址

    组名

 cpu个数

 Nginx根目录

master

master.saltstack.com

192.168.2.20

     —

    —

 

minion

web01.saltstack.com

192.168.2.21

 web01group

    1

    /data

minion

web02.saltstack.com

192.168.2.22

 web02group

    2

    /www

四、实验步骤:

1、首先三台服务器上都需要安装epel源。因为后面需要安装saltstack服务端和客户端,也包括后面的nginx

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

截图如下:


 


两台minion安装epel源就不再截图。

2、主控端(也就是master)上安装saltstack软件。

yum install salt-master -y

被控端(也就是两台minion)上安装saltstack软件。

yum install salt-minion -y

安装过程不截图

3、配置主控端配置文件/etc/salt/master(注意默认的master文件全部是注释的)

修改15行的监听地址,注意为了安全,监听的地址一定要写内网地址。

 

修改为如下所示

 

修改215行的主控端会自动认证被控端的认证,只要被控端设置完主控端的IP地址后启动服务,主控端就会允许被控端自动认证。避免以后每次运行salt-key来确认证书信任。

 

修改为如下所示:

 

修改416saltstack文件根目录位置,注意这个目录默认没有,需要创建。

修改为如下所示:


修改706行的组分类


注意上图L@表示后面的主机名格式为列表,即主机名以逗号分隔,G@表示以grain格式描述。我这里因为每个组只有一台服务器,所以配置更简单。

在下面空行处添加如下所示:


修改552行的pillar开启功能

 修改为如下图所示:

 

修改529行的pillar的主目录,注意这个目录默认没有,需要创建。

 

修改为如下图所示:

 

主控端主要修改了以下内容:


主控端做完上述操作后启动salt-master服务。


启动完后监听TCP4505TCP4506端口。生产环境如果启用防火墙建议主控端开放这两个端口。

创建salt文件根目录及pillar目录

4、配置两台被控端配置文件/etc/salt/minion(注意默认的master文件全部也是注释的)

修改16行的连接主控端的IP地址


修改为如下图所示:


修改72行的被控端id,配置被控端的主机名


修改为如下图所示:


注意另外一台修改为

 

分别启动两台被控端服务


 

在主控端上简单测试一下主控端和被控端通信状态,如果返回都是True说明正常。注意这里的ping和我们平时用的ping命令不同。它只是test类下面的一个方法而已。是验证主控端和被控端的通信状态。注意*表示所有通过认证的被控端。还可以支持其它很多正则表达式的匹配。


如果不是True的那么请自行排查错误。

下面我们主要利用saltstack的几个组件完成nginx的安装和配置工作。主要用到grainspillarstate三个重要的组件完成。grainspillar都是采集被控端数据的。但是grains的特性在每次启动汇报,没有pillar灵活,要知道pillar是随时可变的,只要在master端修改了那一般都会立刻生效的。所以grains更适合做一些静态的属性值的采集,例如设备的角色、磁盘个数等诸如非常固定的属性。那么我们就可以得到一个大致的判断,如果你想定义的属性值是经常变化的,那请采用pillar,如果很固定、不易变得那请用grains

在配置之前首先我们拆分一下nginx的主配置文件,里面要根据当前CPU个数设置一些值、设置一些打开文件句柄数等等。

上述说到grains可以采集被控端主机的一些值,一般定义grains数据的方法有两种,其中一种为在被控主机定制配置文件,另外一种是通过主控端扩展模块API实现,区别是模块更灵活。下面我们用自定义的方式进行。

通过下面的命令可以查看被控机web01主机的grains所有值。但是很遗憾默认打开的文件句柄数1024在被控端没有,需要我们自定通过python脚本获取。下图没截全。全部内容大家可以自行参考自己的实验环境。

state组件是saltstack核心功能,通过预先定制好的文件对被控机进行状态管理,支持包含程序包(pkg)、文件(file)、网络配置(network)、系统服务(service)、系统用户(user)等。也就是定义好相关动作让被控机去执行。

5、首先创建grains目录,需要将目录下的定制文件同步到被控机上运行,然后能正常获取被控机打开文件句柄数。


 

上述脚本的含义就是让被控机获取它当前打开文件句柄数。

在同步到被控端之前我们先执行一下如下命令,确认在主控端是否能获取被控端的max_open_file值?


从上图中我们看到不能获取到max_open_file的值,那么需要同步grains模块,在主控端运行如下命令:


被控端文件存放在 /var/cache/salt目录下

我们再次来获取一下max_open_file的值试试看,一会我们可以用grains获取到这个值配置nginx主配置文件的每个线程打开的连接数。

6、配置pilllar

在主控端上创建top.sls,内容如下:


再分别定义不同业务nginx的根目录,也通过pillar配置。


7、配置state

首先定义state的入口top.sls文件,注意和pillar的入口文件名字一样,别弄错了。内容如下:


其次定义被控机执行的状态,安装nginx软件、配置、启动。


使用jinja模板定义nginx配置文件nginx.conf,首先创建一个nginx目录,因为上面定义了nginx配置文件的源路径。


nginx.conf配置文件大家可以根据自己的需求进行编写。


现在我们就可以在主控端执行刷新state配置,让两台被控端去执行安装nginx并配置。


通过上图我们看到了三个ID,相当于三个任务,第一个安装,第二个配置,第三个启动。而且显示三个都成功了。失败的零个。如果不放心也可以去被控端看看nginx是否启动?


我们再看看web01.saltstack.com节点的nginx主配置文件nginx.conf

 

中间截图省去一些部分......


我们再看看web02.saltstack.com节点的nginx主配置文件nginx.conf

中间截图省去一些部分......


这样基本就完成了通过saltstack批量部署nginx并配置。更多功能也可以利用这个思路扩展到其它功能平台。


目录
相关文章
|
29天前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
106 1
|
10天前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
125 18
|
12天前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
114 17
|
2月前
|
数据建模 应用服务中间件 PHP
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
本示例演示如何通过Docker挂载同一宿主目录至Nginx与PHP容器,实现PHP项目运行环境配置。需注意PHP容器中监听地址修改为0.0.0.0:9000,并调整Nginx配置中fastcgi_pass指向正确的IP与端口。同时确保Nginx容器中/var/www/html权限正确,以避免访问问题。
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
|
3月前
|
应用服务中间件 网络安全 nginx
配置Nginx以支持Websocket连接的方法。
通过上述配置,Nginx将能够理解WebSocket协议的特殊要求,代理Websocket流量到合适的后端服务器。注意,Websocket并不是HTTP,尽管它最初是通过HTTP请求启动的连接升级,因此保证Nginx了解并能够妥善处理这种升级流程是关键。
557 10
|
2月前
|
Ubuntu 应用服务中间件 Linux
在Ubuntu上配置Nginx实现开机自启功能
至此,Nginx应该已经被正确地设置为开机自启。在Ubuntu中利用 `systemd`对服务进行管理是一种高效的方式,为系统管理员提供了强大的服务管理能力,包括但不限于启动、停止、重启服务,以及配置服务的开机自启动。通过这些简洁的命令,即使是对Linux不太熟悉的用户也能轻松地进行配置。
108 0
|
4月前
|
安全 应用服务中间件 网络安全
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
259 0
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
|
关系型数据库 MySQL 应用服务中间件
|
5月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
620 87
|
5月前
|
负载均衡 应用服务中间件 nginx
Nginx配置与命令
Nginx 是一款高性能的 HTTP 和反向代理服务器,其配置文件灵活且功能强大。本文介绍了 Nginx 配置的基础结构和常用指令,包括全局块、Events 块、HTTP 块及 Server 块的配置方法,以及静态资源服务、反向代理、负载均衡、HTTPS 和 URL 重写等功能实现。此外,还提供了常用的 Nginx 命令操作,如启动、停止、重载配置和日志管理等,帮助用户高效管理和优化服务器性能。

推荐镜像

更多