Linux下SaltStack案例—nginx(二)

续我的上上篇博文:https://mp.csdn.net/postedit/88882456。即SaltStack已经安装并配置好

 

 

一、实验环境(rhel7.3版本)

1selinux和firewalld状态为disabled

2各主机信息如下:

主机 ip
server1(master) 172.25.83.1
server3(minion) 172.25.83.3

 

二、SaltStack部署及案例—源码编译并启动nginx

 

1.源码编译nginx

 

1>下载安装包到/srv/salt/nginx/files目录下

[[email protected] ~]# cd /srv/salt/
[[email protected] salt]# mkdir nginx
[[email protected] salt]# ls
httpd  nginx
[[email protected] salt]# cd nginx/
[[email protected] nginx]# mkdir files
[[email protected] nginx]# cd files/
[[email protected] files]# ls
nginx-1.15.8.tar.gz

 

2>部署脚本

[[email protected] nginx]# pwd
/srv/salt/nginx
[[email protected] nginx]# vim install.sls
nginx-install:
  pkg.installed:
    - pkgs:
      - pcre-devel
      - zlib-devel
      - gcc
      - make

  file.managed:
    - name: /mnt/nginx-1.15.8.tar.gz
    - source: salt://nginx/files/nginx-1.15.8.tar.gz

  cmd.run:   #调用cmd模块的run方法
    - name: cd /mnt && tar zxf nginx-1.15.8.tar.gz && cd nginx-1.15.8 && sed -i
 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --pr
efix=/usr/local/nginx &> /dev/null && make &> /dev/null && make install &> /dev
/null && cd .. && rm -rf nginx-1.15.8
    - creates: /usr/local/nginx   #判断/usr/local/nginx是否存在,如果存在,就不执行cmd.run这部分

 

3>执行推送

[[email protected] nginx]# salt server3 state.sls nginx.install

Linux下SaltStack案例—nginx(二)

 

4>测试

minion端(server3)查看/usr/local/nginx目录及/mnt/nginx-1.15.8.tar.gz文件是否存在,如果存在则编译成功

Linux下SaltStack案例—nginx(二)

 

2.启动(触发)

 

1>编写nginx脚本

[[email protected] files]# pwd
/srv/salt/nginx/files
[[email protected] files]# ls
nginx-1.15.8.tar.gz
[[email protected] files]# vim nginx.service
[Unit]
Descripition=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=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

2>部署脚本

[[email protected] nginx]# pwd
/srv/salt/nginx
[[email protected] nginx]# ls
files  install.sls
[[email protected] nginx]# vim service.sls
include:
  - nginx.install

nginx-service:
  file.managed:
    - name: /etc/systemd/system/nginx.service
    - source: salt://nginx/files/nginx.service

  service.running:
    - name: nginx
    - reload: True
    - watch:    #这个触发器可有可无
      - file: nginx-service  

 

3>执行推送

[[email protected] nginx]# salt server3 state.sls nginx.service

Linux下SaltStack案例—nginx(二)

 

4>进行测试

minion端(server3)查看80端口是否已经打开,并查看nginx的进程是否存在

Linux下SaltStack案例—nginx(二)

Linux下SaltStack案例—nginx(二)

 


在配置过程中遇到的问题1:在执行推送时,nginx服务启动失败,如下图所示:

Linux下SaltStack案例—nginx(二)

反复检查文件的编写,没有发现问题。利用“free -m”查看内存,可以看到剩余内存特别小,此时将minion端(serevr3)关机,增大内存(由原来的512,增大到1024)。再次开机,进行测试,发现推送成功。

 

 

在配置过程中遇到的问题2:在执行推送时,报下面的错:

Linux下SaltStack案例—nginx(二)

产生该错误的原因是,minion端(server3)刚刚启动salt-minion,需要时间回应。

解决办法:等几十秒,再次执行推送即可。


 

从二中,我们可以我们看到并没有配置nginx服务的主配置文件nginx.conf文件。那么接下来,我们就来配置nginx服务的注配置文件。

三、SaltStack部署及案例—源码编译并启动nginx+配置nginx服务的主配置文件nginx.conf

 

1、拷贝nginx.conf文件/srv/salt/nginx/files目录下

[[email protected] ~]# scp /usr/local/nginx/conf/nginx.conf server1:/srv/salt/nginx/files

 

2、编辑nginx.conf文件

[[email protected] files]# pwd
/srv/salt/nginx/files
[[email protected] files]# ls
nginx-1.15.8.tar.gz  nginx.conf  nginx.service
[[email protected] files]# vim nginx.conf   #这里配置启动进程的用户为nginx用户(没有配置之前是nobody用户);配置worker进程数为自动
 2 user  nginx;
 3 worker_processes  auto;

 

3、编写添加nginx用户的脚本

[[email protected] ~]# cd /srv/salt/
[[email protected] salt]# ls
httpd  nginx
[[email protected] salt]# mkdir users   #该目录必须建在基本目录/srv/salt目录下
[[email protected] salt]# cd users
[[email protected] users]# vim nginx.sls
nginx:
  user.present:
    - uid: 1001   #值的注意的是,该uid号一定得是空uid号(即该uid号没有被别的用户占用)
    - shell: /sbin/nologin

 

4、部署脚本

[[email protected] nginx]# pwd
/srv/salt/nginx
[[email protected] nginx]# ls
files  install.sls  service.sls
[[email protected] nginx]# vim service.sls
include:
  - nginx.install
  - users.nginx

/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://nginx/files/nginx.conf

nginx-service:
  file.managed:
    - name: /etc/systemd/system/nginx.service
    - source: salt://nginx/files/nginx.service

  service.running:
    - name: nginx
    - reload: True
    - watch: 
      - file: /usr/local/nginx/conf/nginx.conf   

 

5、执行推送

[[email protected] ~]# salt server3 state.sls nginx.service

Linux下SaltStack案例—nginx(二)

 

6、进行测试

minion端(server3)查看nginx的worker进程对应的用户是否是nginx用户。并查看nginx的worker进程数是否和cpu的个数相同

Linux下SaltStack案例—nginx(二)

Linux下SaltStack案例—nginx(二)

 


在配置过程中遇到的问题:在执行推送时,nginx用户添加失败,如下图所示:

Linux下SaltStack案例—nginx(二)

产生该问题的原因可能有两种:<1>minion端(server3)已经存在nginx用户;<2>minion端(server3)的uid号(1000)已经被别的用户占用。

解决问题:如果是原因<1>,则在minion端(server3)删除nginx用户;如果是原因<2>,则在master端(server1)修改nginx.sls文件,将nginx用户对应的uid号修改为其他的数字(没有被别的用户占用的uid号)。