SaltStack项目实战(一)

 

  • 系统架构图

SaltStack项目实战(一)_第1张图片

一、初始化

1、salt环境配置,定义基础环境、生产环境(base、prod)

?
1
2
3
4
5
6
7
8
9
10
vim /etc/salt/master
修改file_roots
file_roots:
   base:
     - /srv/salt/base
   prod:
     - /srv/salt/prod
     
mkdir -p /srv/salt/base
mkdir -p /srv/salt/prod

pillar配置

?
1
2
3
4
5
6
7
8
9
10
vim /etc/salt/master
修改pillar_roots
pillar_roots:
   base:
     - /srv/pillar/base
   pord:
     - /srv/pillar/prod
     
mkdir -p /srv/pillar/base
mkdir -p /srv/pillar/prod

服务重启 systemctl restart salt-master

 

2、salt base环境初始化:

?
1
2
mkdir -p /srv/salt/base/init  # 环境初始化目录
mkdir -p /srv/salt/base/init/files  # 配置文件目录

1)dns配置

准备dns配置文件,放入/srv/salt/base/init/files目录下

cp /etc/resolv.conf /srv/salt/base/init/files/

?
1
2
3
4
5
6
7
vi /srv/salt/base/init/dns .sls
/etc/resolv .conf:
   file .managed:
     - source : salt: //init/files/resolv .conf
     - user: root
     - gourp: root
     - mode: 644

2)histroy记录时间

?
1
2
3
4
5
vi /srv/salt/base/init/history .sls
/etc/profile :
   file .append:
     - text:
       - export HISTTIMEFORMAT= "%F %T `whoami` "

3)记录命令操作

?
1
2
3
4
5
vi /srv/salt/base/init/audit .sls
/etc/bashrc :
   file .append:
     - text:
       - export PROMPT_COMMAND= '{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'

4)内核参数优化

?
1
2
3
4
5
6
7
8
9
10
11
12
13
vi /srv/salt/base/init/sysctl .sls
net.ipv4.ip_local_port_range:
   sysctl.present:
     - value: 10000 65000
fs. file -max:
   sysctl.present:
     - value: 2000000
net.ipv4.ip_forward:
   sysctl.present:
     - value: 1
vm.swappiness:
   sysctl.present:
     - value: 0

5)安装yum仓库

?
1
2
3
4
5
6
vi /srv/salt/base/init/epel .sls
yum_repo_release:
   pkg.installed:
     - sources:
       - epel-release: http: //mirrors .aliyun.com /epel/epel-release-latest-7 .noarch.rpm
     - unless: rpm -qa | grep epel-release-latest-7

6)安装zabbix-agent

准备zabbix-agent配置文件,放入/srv/salt/base/init/files目录下

cp /etc/zabbix/zabbix_agentd.conf /srv/salt/base/init/files/

修改 vi /etc/zabbix/zabbix_agentd.conf

SaltStack项目实战(一)_第2张图片

SaltStack项目实战(一)_第3张图片

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
vi /srv/salt/base/init/zabbix_agent .sls
zabbix-agent:
   pkg.installed:
     - name: zabbix-agent
   file .managed:
     - name: /etc/zabbix/zabbix_agentd .conf
     - source : salt: //init/files/zabbix_agentd .conf
     - template: jinja
     - backup: minion
     - defaults:
       Server: {{ pillar[ 'zabbix-agent' ][ 'Zabbix_Server' ] }}
       Hostname: {{ grains[ 'fqdn' ] }}
     - require:
       - pkg: zabbix-agent
   service.running:
     - enable : True
     - watch :
       - pkg: zabbix-agent
       - file : zabbix-agent
 
zabbix_agentd.d:
   file .directory:
     - name: /etc/zabbix/zabbix_agentd .d
     - watch_in:
       - service: zabbix-agent
     - require:
       - pkg: zabbix-agent
       - file : zabbix-agent

备注:“- backup: minion”表示备份,如果文件改动,会将之前的文件备份到/var/cache/salt/file_backup目录下

7)编写init.sls总文件,引用其它文件

?
1
2
3
4
5
6
7
8
vi /srv/salt/base/init/init .sls
include:
   - init.dns
   - init. history
   - init.audit
   - init.sysctl
   - init.epel
   - init.zabbix_agent

执行命令: salt "*" state.sls init.init

执行结果

  1 linux-node1.example.com:
  2 ----------
  3           ID: /etc/resolv.conf
  4     Function: file.managed
  5       Result: True
  6      Comment: File /etc/resolv.conf is in the correct state
  7      Started: 04:39:32.998314
  8     Duration: 181.548 ms
  9      Changes:   
 10 ----------
 11           ID: /etc/profile
 12     Function: file.append
 13       Result: True
 14      Comment: File /etc/profile is in correct state
 15      Started: 04:39:33.180034
 16     Duration: 6.118 ms
 17      Changes:   
 18 ----------
 19           ID: /etc/bashrc
 20     Function: file.append
 21       Result: True
 22      Comment: Appended 1 lines
 23      Started: 04:39:33.186266
 24     Duration: 6.608 ms
 25      Changes:   
 26               ----------
 27               diff:
 28                   --- 
 29                   
 30                   +++ 
 31                   
 32                   @@ -90,3 +90,4 @@
 33                   
 34                        unset -f pathmunge
 35                    fi
 36                    # vim:ts=4:sw=4
 37                   +export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'
 38 ----------
 39           ID: net.ipv4.ip_local_port_range
 40     Function: sysctl.present
 41       Result: True
 42      Comment: Updated sysctl value net.ipv4.ip_local_port_range = 10000 65000
 43      Started: 04:39:33.261448
 44     Duration: 212.528 ms
 45      Changes:   
 46               ----------
 47               net.ipv4.ip_local_port_range:
 48                   10000 65000
 49 ----------
 50           ID: fs.file-max
 51     Function: sysctl.present
 52       Result: True
 53      Comment: Updated sysctl value fs.file-max = 2000000
 54      Started: 04:39:33.474197
 55     Duration: 122.497 ms
 56      Changes:   
 57               ----------
 58               fs.file-max:
 59                   2000000
 60 ----------
 61           ID: net.ipv4.ip_forward
 62     Function: sysctl.present
 63       Result: True
 64      Comment: Updated sysctl value net.ipv4.ip_forward = 1
 65      Started: 04:39:33.596905
 66     Duration: 35.061 ms
 67      Changes:   
 68               ----------
 69               net.ipv4.ip_forward:
 70                   1
 71 ----------
 72           ID: vm.swappiness
 73     Function: sysctl.present
 74       Result: True
 75      Comment: Updated sysctl value vm.swappiness = 0
 76      Started: 04:39:33.632208
 77     Duration: 36.226 ms
 78      Changes:   
 79               ----------
 80               vm.swappiness:
 81                   0
 82 ----------
 83           ID: yum_repo_release
 84     Function: pkg.installed
 85       Result: True
 86      Comment: All specified packages are already installed
 87      Started: 04:39:39.085699
 88     Duration: 12627.626 ms
 89      Changes:   
 90 ----------
 91           ID: zabbix-agent
 92     Function: pkg.installed
 93       Result: True
 94      Comment: Package zabbix-agent is already installed
 95      Started: 04:39:51.713592
 96     Duration: 6.677 ms
 97      Changes:   
 98 ----------
 99           ID: zabbix-agent
100     Function: file.managed
101         Name: /etc/zabbix/zabbix_agentd.conf
102       Result: True
103      Comment: File /etc/zabbix/zabbix_agentd.conf updated
104      Started: 04:39:51.720994
105     Duration: 152.077 ms
106      Changes:   
107               ----------
108               diff:
109                   --- 
110                   +++ 
111                   @@ -90,7 +90,7 @@
112                    #
113                    # Mandatory: no
114                    # Default:
115                   -Server={{ Server }}
116                   +Server=192.168.137.11
117                    
118                    ### Option: ListenPort
119                    #    Agent will listen on this port for connections from the server.
120 ----------
121           ID: zabbix_agentd.d
122     Function: file.directory
123         Name: /etc/zabbix/zabbix_agentd.d
124       Result: True
125      Comment: Directory /etc/zabbix/zabbix_agentd.d is in the correct state
126      Started: 04:39:51.875082
127     Duration: 0.908 ms
128      Changes:   
129 ----------
130           ID: zabbix-agent
131     Function: service.running
132       Result: True
133      Comment: Service restarted
134      Started: 04:39:51.932698
135     Duration: 205.223 ms
136      Changes:   
137               ----------
138               zabbix-agent:
139                   True
140 
141 Summary for linux-node1.example.com
142 -------------
143 Succeeded: 12 (changed=7)
144 Failed:     0
145 -------------
146 Total states run:     12
147 Total run time:   13.593 s
148 linux-node2.example.com:
149 ----------
150           ID: /etc/resolv.conf
151     Function: file.managed
152       Result: True
153      Comment: File /etc/resolv.conf is in the correct state
154      Started: 12:46:38.639870
155     Duration: 182.254 ms
156      Changes:   
157 ----------
158           ID: /etc/profile
159     Function: file.append
160       Result: True
161      Comment: Appended 1 lines
162      Started: 12:46:38.822236
163     Duration: 3.047 ms
164      Changes:   
165               ----------
166               diff:
167                   --- 
168                   
169                   +++ 
170                   
171                   @@ -74,3 +74,4 @@
172                   
173                    
174                    unset i
175                    unset -f pathmunge
176                   +export HISTTIMEFORMAT="%F %T `whoami` "
177 ----------
178           ID: /etc/bashrc
179     Function: file.append
180       Result: True
181      Comment: Appended 1 lines
182      Started: 12:46:38.825423
183     Duration: 3.666 ms
184      Changes:   
185               ----------
186               diff:
187                   --- 
188                   
189                   +++ 
190                   
191                   @@ -90,3 +90,4 @@
192                   
193                        unset -f pathmunge
194                    fi
195                    # vim:ts=4:sw=4
196                   +export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'
197 ----------
198           ID: net.ipv4.ip_local_port_range
199     Function: sysctl.present
200       Result: True
201      Comment: Updated sysctl value net.ipv4.ip_local_port_range = 10000 65000
202      Started: 12:46:39.011409
203     Duration: 132.499 ms
204      Changes:   
205               ----------
206               net.ipv4.ip_local_port_range:
207                   10000 65000
208 ----------
209           ID: fs.file-max
210     Function: sysctl.present
211       Result: True
212      Comment: Updated sysctl value fs.file-max = 2000000
213      Started: 12:46:39.144117
214     Duration: 33.556 ms
215      Changes:   
216               ----------
217               fs.file-max:
218                   2000000
219 ----------
220           ID: net.ipv4.ip_forward
221     Function: sysctl.present
222       Result: True
223      Comment: Updated sysctl value net.ipv4.ip_forward = 1
224      Started: 12:46:39.177821
225     Duration: 43.489 ms
226      Changes:   
227               ----------
228               net.ipv4.ip_forward:
229                   1
230 ----------
231           ID: vm.swappiness
232     Function: sysctl.present
233       Result: True
234      Comment: Updated sysctl value vm.swappiness = 0
235      Started: 12:46:39.221788
236     Duration: 39.882 ms
237      Changes:   
238               ----------
239               vm.swappiness:
240                   0
241 ----------
242           ID: yum_repo_release
243     Function: pkg.installed
244       Result: True
245      Comment: All specified packages are already installed
246      Started: 12:46:47.608597
247     Duration: 13989.554 ms
248      Changes:   
249 ----------
250           ID: zabbix-agent
251     Function: pkg.installed
252       Result: True
253      Comment: Package zabbix-agent is already installed
254      Started: 12:47:01.598548
255     Duration: 1.265 ms
256      Changes:   
257 ----------
258           ID: zabbix-agent
259     Function: file.managed
260         Name: /etc/zabbix/zabbix_agentd.conf
261       Result: True
262      Comment: File /etc/zabbix/zabbix_agentd.conf updated
263      Started: 12:47:01.600712
264     Duration: 82.425 ms
265      Changes:   
266               ----------
267               diff:
268                   --- 
269                   +++ 
270                   @@ -90,8 +90,6 @@
271                    #
272                    # Mandatory: no
273                    # Default:
274                   -# Server=
275                   -
276                    Server=192.168.137.11
277                    
278                    ### Option: ListenPort
279                   @@ -117,7 +115,7 @@
280                    # Mandatory: no
281                    # Range: 0-100
282                    # Default:
283                   -StartAgents=3
284                   +# StartAgents=3
285                    
286                    ##### Active checks related
287                    
288                   @@ -133,7 +131,7 @@
289                    # Default:
290                    # ServerActive=
291                    
292                   -#ServerActive=192.168.137.11
293                   +ServerActive=192.168.137.11
294                    
295                    ### Option: Hostname
296                    #    Unique, case sensitive hostname.
297                   @@ -144,7 +142,7 @@
298                    # Default:
299                    # Hostname=
300                    
301                   -Hostname=linux-node2
302                   +Hostname=Zabbix server
303                    
304                    ### Option: HostnameItem
305                    #    Item used for generating Hostname if it is undefined. Ignored if Hostname is defined.
306                   @@ -174,7 +172,7 @@
307                    #
308                    # Mandatory: no
309                    # Default:
310                   -HostMetadataItem=system.uname
311                   +# HostMetadataItem=
312                    
313                    ### Option: RefreshActiveChecks
314                    #    How often list of active checks is refreshed, in seconds.
315 ----------
316           ID: zabbix_agentd.d
317     Function: file.directory
318         Name: /etc/zabbix/zabbix_agentd.d
319       Result: True
320      Comment: Directory /etc/zabbix/zabbix_agentd.d is in the correct state
321      Started: 12:47:01.684357
322     Duration: 0.93 ms
323      Changes:   
324 ----------
325           ID: zabbix-agent
326     Function: service.running
327       Result: True
328      Comment: Service restarted
329      Started: 12:47:01.751277
330     Duration: 275.781 ms
331      Changes:   
332               ----------
333               zabbix-agent:
334                   True
335 
336 Summary for linux-node2.example.com
337 -------------
338 Succeeded: 12 (changed=8)
339 Failed:     0
340 -------------
341 Total states run:     12
342 Total run time:   14.788 s
View Code

8)创建top文件

?
1
2
3
4
vi /srv/salt/base/top .sls
base:
   '*' :
     - init.init

测试 salt "*" state.highstate test=True

执行 salt "*" state.highstate

 

3、pillar base初始化

1)zabbix agent配置,指定zabbix server地址,用于sls文件引用

?
1
2
3
4
mkdir -p /srv/pillar/base/zabbix
vi /srv/pillar/base/zabbix/agent .sls
zabbix-agent:
   Zabbix_Server: 192.168.137.11

编写top,引用/srv/pillar/base/zabbix/agent文件

?
1
2
3
4
vi /srv/pillar/base/top .sls
base:
   '*' :
     - zabbix.agent

测试 salt '*' pillar.items

SaltStack项目实战(一)_第4张图片

 

二、haproxy

官网 http://www.haproxy.com/

?
1
2
3
4
5
6
7
8
9
mkdir -p /srv/salt/prod/modules/haproxy
mkdir -p /srv/salt/prod/modules/keepalived
mkdir -p /srv/salt/prod/modules/memcached
mkdir -p /srv/salt/prod/modules/nginx
mkdir -p /srv/salt/prod/modules/php
mkdir -p /srv/salt/prod/modules/pkg
mkdir -p /srv/salt/prod/cluster
mkdir -p /srv/salt/prod/modules/haproxy/files/
mkdir -p /srv/salt/prod/cluster/files

1)系统gcc编译包等

?
1
2
3
4
5
6
7
8
9
10
11
12
13
vi /srv/salt/prod/pkg/make .sls
make -pkg:
   pkg.installed:
     - names:
       - gcc
       - gcc -c++
       - glibc
       - make
       - autoconf
       - openssl
       - openssl-devel
       - pcre
       - pcre-devel

2) 自安装

?
1
2
3
4
5
6
cd /usr/local/src    
tar xvf haproxy-1.6.3. tar .gz
cd haproxy-1.6.3/
make TARGET=linux2628 PREFIX= /usr/local/haproxy-1 .6.3
make install PREFIX= /usr/local/haproxy-1 .6.3
ln -s /usr/local/haproxy-1 .6.3 /usr/local/haproxy

修改启动脚本,放入salt下

?
1
2
3
vi /usr/local/src/haproxy-1 .6.3 /examples/haproxy .init
BIN= /usr/local/haproxy/sbin/ $BASENAME
cp /usr/local/src/haproxy-1 .6.3 /examples/haproxy .init /srv/salt/prod/modules/haproxy/files/

haproxy-1.6.3.tar.gz安装包放入/srv/salt/prod/modules/haproxy/files/目录下

3)创建install.sls文件,用于安装haproxy

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
vi /srv/salt/prod/modules/haproxy/install .sls
include:
   - modules.pkg. make
   
haproxy- install :
   file .managed:
     - name: /usr/local/src/haproxy-1 .6.3. tar .gz
     - source : salt: //modules/haproxy/files/haproxy-1 .6.3. tar .gz
     - mode: 755
     - user: root
     - group: root
   cmd.run:
     - name: cd /usr/local/src && tar zxf haproxy-1.6.3. tar .gz && cd haproxy-1.6.3 && make TARGET=linux2628 PREFIX= /usr/local/haproxy-1 .6.3 && make install PREFIX= /usr/local/haproxy-1 .6.3 && ln -s /usr/local/haproxy-1 .6.3 /usr/local/haproxy
     - unless: test -L /usr/local/haproxy
     - require:
       - pkg: make -pkg
       - file : haproxy- install
 
haproxy-init:
   file .managed:
     - name: /etc/init .d /haproxy
     - source : salt: //modules/haproxy/files/haproxy .init
     - mode: 755
     - user: root
     - group: root
     - require_in:
       - file : haproxy- install
   cmd.run:
     - name: chkconfig --add haproxy
     - unless: chkconfig --list| grep haproxy
  
net.ipv4.ip_nonlocal_bind:
   sysctl.present:
     - value: 1
 
haproxy-config- dir :
   file .directory:
     - name: /etc/haproxy
     - mode: 755
     - user: root
     - group: root

备注: “- unless”  如果unless后面的命令返回为True,那么就不执行当前状态命令

4)创建haproxy配置文件

创建haproxy-outside.sls文件,用于配置haproxy

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vi /srv/salt/prod/cluster/haproxy-outside .sls
include:
   - modules.haproxy. install
 
haproxy-service:
   file .managed:
     - name: /etc/haproxy/haproxy .cfg
     - source : salt: //cluster/files/haproxy-outside .cfg
     - user: root
     - group: root
     - mode: 644
   service.running:
     - name: haproxy
     - enable : True
     - reload: True
     - require:
       - cmd: haproxy- install
     - watch :
       - file : haproxy-service

5)配置top file

?
1
2
3
4
5
6
7
vi /srv/pillar/base/top .sls
base:
   '*' :
     - zabbix.agent
prod:
   'linux-node*' :
     - cluster.haproxy-outside

测试 salt "*" state.highstate test=True

执行 salt "*" state.highstate

结果:

SaltStack项目实战(一)_第5张图片

 

三、keepalived

1)创建files目录,将keepalived-1.2.17.tar.gz安装包、keepalived.sysconfig、keepalived.init放入

?
1
mkdir -p /srv/salt/prod/modules/keepalived/files

2)创建install.sls文件

执行命令:salt '*' state.sls modules.keepalived.install saltenv=prod

3)创建keepalived配置文件haproxy-outside-keepalived.conf

创建haproxy-outside-keepalived.sls

4)将keepalived加入top FILE

?
1
2
3
4
5
6
7
8
vi /srv/salt/base/top .sls
base:
   '*' :
     - init.init
prod:
   'linux-node*' :
     - cluster.haproxy-outside
     - cluster.haproxy-outside-keepalived

测试 salt "*" state.highstate test=True

执行 salt "*" state.highstate

转载于:https://www.cnblogs.com/wuhg/p/10442047.html

你可能感兴趣的:(SaltStack项目实战(一))