SaltStack 批量部署 Nginx服务

资源配置

操作系统配置主机名/IP
CentOS7.92C2Gmaster.saltstack.com/172.16.10.10
CentOS7.92C2Gweb01saltstack.com/172.16.10.11
CentOS7.92C2Gweb02.saltstack.com/172.16.10.2

1.1 基础环境

1.1.1 关闭防火墙

 systemctl stop firewalld
 systemctl disable firewalld

1.1.2 关闭selinux

 sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
 reboot

1.1.3 修改主机名

 hostnamectl set-hostname master.saltstack.com
 hostnamectl set-hostname web01.saltstack.com
 hostnamectl set-hostname web02.saltstack.com

1.1.4 配置hosts 映射

 cat >> /etc/hosts << EOF
 172.16.10.10 master.saltstack.com
 172.16.10.11 web01.saltstack.com
 172.16.10.12 web02.saltstack.com
 EOF

1.1.5 时间同步

 yum -y install chrony
 systemctl start chronyd
 chronyc sources -v

1.1.6 配置下载saltstack 的yum 源

 sudo rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
 curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo

1.2 安装salt-master并配置

  • 在master节点执行

 # salt-master节点安装
 yum -y install salt-master
 ​
 # 修改master节点配置文件
 vim /etc/salt/master
 interface: 172.16.10.10
 auto_accept: True
 file_roots:
   base:
     - /srv/salt/
 pillar_roots:
   base:
     - /srv/pillar
 pillar_opts: True
 nodegroups:
   web01group: 'web01.saltstack.com'
   web02group: 'web02.saltstack.com'
 ================配置项详细含义如下================
 #默认的master文件全部是注释的。首先需要修改主控端配置文件中的监听地址。需要注意的是为了安全,监听的地址一定要写私网地址
 interface: 172.16.10.10
 #设置允许被控端自动认证,只要被控端设置完主控端的IP地址后启动服务,主控端就会允许被控端自动认证,以避免以后每次运行salt-key来确认证书信任
 auto_accept: True
 #修改saltstack文件根目录位置
 file_roots:
   base:
     - /srv/salt/
 #设置分组
 nodegroups:
   web01group: 'web01.saltstack.com'
   web02group: 'web02.saltstack.com'
 #开启pillar功能
 pillar_opts: True
 #设置pillar的主目录,去掉注释
 pillar_roots:
   base:
     - /srv/pillar
 ==================================================  
 # 创建目录pillar 和 saltstack文件目录
 mkdir /srv/pillar
 mkdir /srv/salt
 ​
 # 启动salt-master
 systemctl start salt-master
 systemctl enable salt-master

1.3 安装配置salt-minion

 # minion节点都要执行安装
 yum -y install salt-minion
 ​
 # 修改minion 配置文件
 ## web01节点
 vim /etc/salt/minion
 master: 172.16.10.10
 id: web01.saltstack.com
 ## web02节点
 vim /etc/salt/minion
 master: 172.16.10.10
 id: web02.saltstack.com
 ​
 =========================================================
 # 启动salt-minion
 systemctl start salt-minion
 systemctl enable salt-minion
  • 测试 Minion 是否连接正常,master节点执行

 salt '*' test.ping

1.4 将目录下的定制文件同步到被控机上运行

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

 mkdir -p /srv/salt/_grains
 vim /srv/salt/_grains/nginx_config.py
 #!/usr/bin/python
 # 这个适用于python3版本
 import os,sys,subprocess
 def NginxGrains():
     '''
         return Nginx config grains value
     '''
     grains = {}
     max_open_file=65535
     try:
         getulimit = subprocess.getstatusoutput('source /etc/profile;ulimit -n')
     except:
         pass
 ​
     if getulimit[0]==0:
         max_open_file = int(getulimit[1])
     grains['max_open_file'] = max_open_file
     return grains
 ============================================================
 # 查看grains最大文件数
 salt '*' grains.item max_open_file
 ​
 # 同步 grains 模块
 salt '*' saltutil.sync_all

1.5 配置 pilllar文件和state文件

 # 在主控端上创建入口文件 top.sls,入口文件的作用是定义 pillar 的数据覆 盖被控主机的有效域范围
 vim /srv/pillar/top.sls
 base:
   web01group:           ##组名
     - match: nodegroup  
     - web01server       ##设置包括 web01server.sls
   web02group:           ##组名
     - match: nodegroup
     - web02server      ##设置包括 web02server.sls
 ==========================================================
 # “web01group”和”web02group”是/etc/salt/master 中定义的不同的组,对每一个组编写 一个对应的文件指定配置,这里使用的是“web01server”和”web02server”,再分别定义不同 组主机的 Nginx 的根目录
 vim /srv/pillar/web01server.sls
 nginx:
     root: /data
 ===========================================================
 vim /srv/pillar/web02server.sls
 nginx:
     root: /www
 ===========================================================
 # 使用以下命令查看 pillar 配置的情况
 salt '*' pillar.items
 ​
 ==========================================================
 # 定义 state 的入口 top.sls 文件,注意和 pillar 的入口文件名字一样
 vim /srv/salt/top.sls 
 base:
   '*':
     - nginx
 =========================================================
 # 定义被控机执行的状态,安装 Nginx 软件、配置、启动
 vim /srv/salt/nginx.sls 
 nginx:
   pkg:
     - installed
   file.managed:
     - source: salt://nginx/nginx.conf
     - name: /etc/nginx/nginx.conf
     - user: root
     - group: root
     - mode: 644
     - template: jinja
   service.running:
     - enable: True
     - reload: True
     - watch:
       - file: /etc/nginx/nginx.conf
       - pkg: nginx
 ====================================================
 ​

1.6 创建nginx配置文件模板

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

mkdir /srv/salt/nginx
vim /srv/salt/nginx/nginx.conf 
user nginx;
worker_processes {{grains['num_cpus']}};
{% if grains['num_cpus'] ==1 %}
worker_cpu_affinity 10;
{% elif grains['num_cpus'] ==2 %}
worker_cpu_affinity 01 10;
{% elif grains['num_cpus'] == 4 %}
worker_cpu_affinity 0001 0010 0100 1000;
{% elif grains['num_cpus'] == 8 %}
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
{% else %}
worker_cpu_affinity 0001 0010 0100 1000;
{% endif %}
worker_rlimit_nofile {{ grains['max_open_file'] }};
error_log /var/log/nginx_error.log;
pid /var/run/nginx.pid;
events
    {
        worker_connections {{ grains['max_open_file'] }};
    }
http
    {
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        sendfile on;
        keepalive_timeout 60;
        log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" '  '"$http_user_agent" "$http_x_forwarded_for"' ;
        server{
            listen 80 default_server;
            server_name _;
            location / {
                root {{ pillar['nginx']['root'] }};
                index index.html index.htm;
            }
            error_page 404 /404.html;
            location = /404.html {
                root /usr/share/nginx/html;
            }
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
                root /usr/share/nginx/html;
            }
        }
    }

1.7 同步刷新 state 配置,创建Nginx服务

# minion 节点都要安装安装 epel源
yum -y install epel-release
 
# minion同步,刷新 state 配置
salt '*' state.highstate

# 验证
##在minion节点查看nginx服务状态
systemctl status nginx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值