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"配置:
[root@linux-node1 ~]# cd /etc/salt/ [root@linux-node1 ~]# vim master ······ file_roots: base: - /srv/salt/base prod: - /srv/salt/prod ······
我的所有salt項放在基礎環境(base)及生產環境(prod)兩個項目目錄下。
然後再/srv/salt/下創建兩個目錄,base和prod
[root@linux-node1 ~]# cd /srv/salt/ [root@linux-node1 salt]# mkdir -pv base prod [root@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
[root@linux-node1 prod]# cd modules/ [root@linux-node1 modules]# cd pkg/ [root@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文件
需要提前下載源碼包:
[root@linux-node1 files]# wget http://nginx.org/download/nginx-1.10.1.tar.gz
Note:
需要放在/srv/salt/prod/modules/nginx/files/下。
編寫SLS文件
[root@linux-node1 ~]# cd /srv/salt/prod/modules/nginx/ [root@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文件
[root@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/下的。
[root@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.