|
1. 思路整理
五步走:
整个base环境规划
工作当中,我们在使用SaltStack的时候,环境目录的规划尽量做到标准化,自己要严格要求好!这也是作为一个运维工程师的基本技能要求。
安装Nginx(依赖包)
在本文章中,我的Example使用的是源码安装,也是当前主流的安装方式!(这里会用到pkg.installed,cmd.run等多种状态管理模块)
配置管理
在安装好服务之后,我们需要对服务进行基本的配置管理,通过模板文件来进行统一管理!(会用到"file.managed","file.directory"等多种状态管理)
服务启动
在安装和配置完成之后,就可以启动服务了!(这里会用到service.running等状态管理模块)
top高级状态指定
在上述完成之后,在工作中,我们需要指定哪些角色主机安装Nginx服务,这时候我们就需要在“top_file”中指定。
1.1 base环境规划
这里我展示一下我的目录规划。
在master配置文件中的"file_roots"配置:
[iyunv@linux-node1 ~]# cd /etc/salt/
[iyunv@linux-node1 ~]# vim master
······
file_roots:
base:
- /srv/salt/base
prod:
- /srv/salt/prod
······
我的所有salt项放在基础环境(base)及生产环境(prod)两个项目目录下。
然后再/srv/salt/下创建两个目录,base和prod
[iyunv@linux-node1 ~]# cd /srv/salt/
[iyunv@linux-node1 salt]# mkdir -pv base prod
[iyunv@linux-node1 salt]# tree
.
├── base
│ ├── init
│ │ ├── audit.sls
│ │ ├── dns.sls
│ │ ├── epel.sls
│ │ ├── files
│ │ │ ├── resolv.conf
│ │ │ └── zabbix_agentd.conf
│ │ ├── history.sls
│ │ ├── init.sls
│ │ ├── sysctl.sls
│ │ └── zabbix-agent.sls
│ └── top.sls
└── prod
├── bbs
│ ├── files
│ │ └── nginx-bbs.conf
│ ├── memcached.sls
│ └── web.sls
├── cluster
│ ├── files
│ │ ├── haproxy-outside.cfg
│ │ └── haproxy-outside-keepalived.conf
│ ├── haproxy-outside-keepalived.sls
│ └── haproxy-outside.sls
└── modules
├── haproxy
│ ├── files
│ │ ├── haproxy-1.6.3.tar.gz
│ │ └── haproxy.init
│ └── install.sls
├── keepalived
│ ├── files
│ │ ├── keepalived-1.2.17.tar.gz
│ │ ├── keepalived.init
│ │ └── keepalived.sysconfig
│ └── install.sls
├── libevent
│ ├── files
│ │ └── libevent-2.0.22-stable.tar.gz
│ └── install.sls
├── memcached
│ ├── files
│ │ └── memcached-1.4.24.tar.gz
│ └── install.sls
├── nginx
│ ├── files
│ │ ├── nginx-1.10.1.tar.gz
│ │ ├── nginx.conf
│ │ └── nginx-init
│ ├── install.sls
│ └── service.sls
├── pcre
│ ├── files
│ │ └── pcre-8.37.tar.gz
│ └── install.sls
├── php
│ ├── files
│ │ ├── init.d.php-fpm
│ │ ├── memcache-2.2.7.tgz
│ │ ├── php-5.6.9.tar.gz
│ │ ├── php-fpm.conf.default
│ │ ├── php.ini-production
│ │ └── redis-2.2.7.tgz
│ ├── install.sls
│ ├── php-memcache.sls
│ └── php-redis.sls
├── pkg
│ └── make.sls
└── user
├── test.sls
└── www.sls
25 directories, 47 files
值得注意的是:在写SLS文件的时候,尽量每个服务单独写一个SLS,将整个项目中的服务进行解耦,方便我们以后更好的引用。如果在别的项目中需要的时候,只需要include这个SLS就可以了!
2. 编写安装Nginx的SLS文件
2.1 安装依赖包的SLS
[iyunv@linux-node1 prod]# cd modules/
[iyunv@linux-node1 modules]# cd pkg/
[iyunv@linux-node1 pkg]# vim make.sls
make-pkg:
pkg.installed:
- pkgs:
- gcc
- gcc-c++
- glibc
- make
- autoconf
- openssl
- openssl-devel
- pcre
- pcre-devel
2.2 编写安装Nginx的SLS文件
需要提前下载源码包:
[iyunv@linux-node1 files]# wget http://nginx.org/download/nginx-1.10.1.tar.gz
Note:
需要放在/srv/salt/prod/modules/nginx/files/下。
编写SLS文件
[iyunv@linux-node1 ~]# cd /srv/salt/prod/modules/nginx/
[iyunv@linux-node1 ~]# vim install.sls
include:
- module.pkg.make
- module.user.www
nginx-source-install:
file.managed:
- name: /usr/local/src/nginx-1.10.1.tar.gz
- source: salt://modules/nginx/files/nginx-1.10.1.tar.gz
- user: root
- group: root
- mode: 755
cmd.run:
- name: cd /usr/local/src && tar zxf nginx-1.10.1.tar.gz && cd nginx-1.10.1&& ./configure --prefix=/usr/local/nginx-1.10.1 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-http_dav_module && make && make install && ln -s /usr/local/nginx-1.10.1 /usr/local/nginx && chown -R www:www /usr/local/nginx
- unless: test -d /usr/local/nginx
- requrie:
- user: www-user-group
- file: nginx-install
- pkg: make-pkg
这样一个Nginx的安装SLS文件,就完成了!接下来要做的就是配置管理。在这里我们的安装文件和配置启动文件写成了两个,这样方便以后我们多次使用。
2.3 配置管理及启动SLS文件
[iyunv@linux-node1 ~]# vim service.sls
include:
- modules.nginx.install
nginx-init:
file.managed:
- name: /etc/init.d/nginx
- source: salt://modules/nginx/files/nginx-init
- mode: 755
- user: root
- group: root
cmd.run:
- name: chkconfig --add nginx
- unless: chkconfig --list|grep nginx
- require:
- file: nginx-init
/usr/local/nginx/conf/nginx.conf:
file.managed:
- source: salt://modules/nginx/files/nginx.conf
- user: www
- group: www
- mode: 644
#Starting Nginx Server
nginx-service:
service.running:
- name: nginx
- enabled: True
- reload: True
- watch:
- file: /usr/local/nginx/conf/nginx.conf
- file: nginx-online
#下面的两个ID声明,一个是存放在线的服务主机,一个是存放已经从线上撤下来的服务主机。
nginx-online:
file.directory:
- name: /usr/local/nginx/conf/vhost_online
nginx-offline:
file.directory:
- name: /usr/local/nginx/conf/vhost_offline
Note:
在这个文件中,创建vhostonline和vhostoffline的目的是存放线上主机和线下服务主机的目录。可能有的人问,为什么要这么做?原因就是我们下线的主机最好不要删除,而是另存为。这样方便以后我们再次使用的时候能够拿到数据。
3. 在top file中指定哪些主机执行这个安装操作
注意:我的top.sls是放在我的/srv/salt/base/下的。
[iyunv@linux-node1 base]# vim top.sls
base:
'*':
- init.env_init
prod:
'linux-node*':
- modules.nginx.install
- modules.nginx.service
主要添加的是prod后面的内容,表示匹配满足主机名为"linux-node*"这种格式的Minion都可以执行按照Nginx操作。
这样我们就实现了用SaltStack安装Nginx了。
Daily sentence
No matter how far you may fly, never forget where you come from.
|
|
|