SaltStck 搭建Web集群运用示例 (一)
saltstack是一個非常強大的管理工具,使用saltstack會做到標準化的管理,下面就以一個簡單的示例來更加具體的了解一下saltstack的功能特性。
使用saltstack來搭建一個簡單的web集群,需要完成三個步驟:
1、系統(tǒng)初始化。初始化模塊所有的機器環(huán)境一致。
2、功能模塊:設置單獨的目錄haproxy nginx ?php mysql ?memcached.
? ? ? 功能模塊做到盡可能的全,獨立。
3、業(yè)務模塊:根據(jù)業(yè)務類型劃分,如web服務、論壇bbs等
Base基礎環(huán)境的配置
salt環(huán)境配置
創(chuàng)建salt初始化環(huán)境:
修改master配置文件,
#?vim?/etc/salt/master file_roots:??????????????#配置基礎環(huán)境和生產環(huán)境兩個目錄base:-?/srv/salt/baseprod:-?/srv/salt/prodpillar_roots:????????????#創(chuàng)建pillar環(huán)境base:-?/srv/pillar/base-?/srv/pillar/prod創(chuàng)建環(huán)境目錄:
?mkdir?/srv/salt/basemkdir?/srv/salt/prodmkdir?/srv/pillar/basemkdir?/srv/pillar/prodbase基礎環(huán)境初始化
基礎環(huán)境的配置項:
dns配置
history記錄時間
記錄命令操作
內核參數(shù)優(yōu)化
安裝yum倉庫
安裝zabbix-agent
dns配置,創(chuàng)建dns.sls:
[root@node1?/srv/salt/base/init]#?cat?dns.sls? /etc/resolv.conf:file.managed:-?source:?salt://init/files/resolv.conf-?user:?root-?group:?root-?mode:?644[root@node1?/srv/salt/base/init]#?cp?/etc/resolv.conf??files/history記錄時間,創(chuàng)建history.sls:
[root@node1?/srv/salt/base/init]#?cat?history.sls? /etc/profile:file.append:-?text:-?export?HISTTIMEFORMAT="%F?%T?`whoami`?"記錄命令操作,創(chuàng)建audit.sls?:
[root@node1?/srv/salt/base/init]#?cat?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";?}'內核參數(shù)優(yōu)化,創(chuàng)建sysctl.sls:
[root@node1?/srv/salt/base/init]#?cat??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?????????????#打開轉發(fā)功能 vm.swappiness:sysctl.present:-?value:?0?????????????#設置盡量不使用交換分區(qū)(權重值)設置epel源,創(chuàng)建yum倉庫,?
[root@node1?/srv/salt/base/init]#?cat?epel.sls? yum_repo_release:pkg.installed:-?sources:-?epel-release:?http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm創(chuàng)建zabbix-agent模板,這里的安裝必須要有對應的yum源,在生產或環(huán)境需要有自己的yum源(或zabbix yum源),才能安裝上對應的軟件包:
[root@node1?/srv/salt/base/init]#?cat?zabbix-agent.sls? zabbix-agent:pkg.installed:-?name:?zabbix-agentfile.managed:-?name:?/etc/zabbix/zabbix_agentd.conf-?source:?salt://init/files/zabbix_agentd.conf-?template:?jinja-?backup:?minion???#在文件模塊中,對要修改的文件先備份,備份的文件默認在:/var/cache/salt/minion/file_backup/中-?defaults:Zabbix_Server:?{{?pillar['Zabbix_Server']?}}?#被引用的名稱AHostname:?{{?'grains[fqdn]'?}}??#被應用的名稱B-?require:-?pkg:?zabbix-agentservice.running:-?enable:?True-?watch:-?pkg:?zabbix-agent????#包和文件發(fā)生改變就重啟服務-?file:?zabbix-agent zabbix_agentd.conf.d:file.directory:-?name:?/etc/zabbix/zabbix_agentd.d-?watch_in:??????????????#配置目錄中發(fā)生任何變化都會重啟zabbix-agent-?service:?zabbix-agent??-?require:-?pkg:?zabbix-agent-?file:?zabbix-agent拷貝zabbix的配置文件到file目錄,并將pillar參數(shù)添加到配置文件的對應位置:
cp?/etc/zabbix/zabbix_agentd.conf??files/ vim?files/zabbix_agentd.conf #設置對應參數(shù)的引用?? Hostname={{?Hostname?}}???#設置agent為主動模式,引用B出的參數(shù) Server=?{{?Zabbix_Server?}}???#此處引用的是A處的Zabbix_Server要使用上面的參數(shù),還需要配置pillar才能使用。配置pillar base初始化環(huán)境
創(chuàng)建一個pillar,
[root@node1?/srv/pillar/base/zabbix]#?cat?agent.sls? Zabbix_Server:?172.16.10.60創(chuàng)建pillar的top.sls,指定那些主機運行那些文件:
驗證pillar的base環(huán)境:
[root@node1?/srv/pillar/base]#?salt?'*'?pillar.items node2:----------Zabbix_Server:172.16.10.60 node1:----------Zabbix_Server:172.16.10.60驗證zabbix配置:
[root@node1?~]#?salt?'*'?state.sls?init.zabbix-agent執(zhí)行成功并自動修改了zabbix的配置文件則說明設置成功。
配置完上面的這些文件,基礎環(huán)境就配置好了:
[root@node1?/srv]#?tree . ├──?pillar │???├──?base │???│???├──?top.sls │???│???└──?zabbix │???│???????└──?agent.sls │???├──?prod │???└──?top.sls └──?salt├──?base│???└──?init│???????├──?audit.sls│???????├──?dns.sls│???????├──?epel.sls│???????├──?files│???????│???├──?resolv.conf│???????│???└──?zabbix_agentd.conf│???????├──?history.sls│???????├──?sysctl.sls│???????└──?zabbix-agent.sls├──?prod└──?top.sls可以編寫一個基礎的初始化配置文件,include所有基礎的配置:
然后執(zhí)行這個主配置文件即可:
#?salt?'*'?state.sls?init.init如果定義高級狀態(tài)進行執(zhí)行,就要定義使用top file:
執(zhí)行高級狀態(tài):
#?salt?'*'?state.highstate?test=True?驗證結果 #?salt?'*'?state.highstate??確認執(zhí)行提示:
在對文件進行操作時,為了避免誤操作而破壞源文件,生產上所有涉及到文件的管理都要加上"- backup:minion" ?參數(shù),自動備份文件,備份的文件默認在/var/cache/salt/minion/file_backup目錄。
在對文件執(zhí)行salt 高級狀態(tài)時,選對文件進行測試,加 test=True,確認無誤后再執(zhí)行。
Prod環(huán)境配置
Haproxy基礎環(huán)境配置
首先對負載均衡進行一個初始化環(huán)境的配置,由于使用haproxy的源碼安裝方式,所以對prod的基礎環(huán)境進行配置。
創(chuàng)建分類目錄:
[root@node1?/srv/salt/prod]#?mkdir?haproxy [root@node1?/srv/salt/prod]#?mkdir?keepalived [root@node1?/srv/salt/prod]#?mkdir?nginx [root@node1?/srv/salt/prod]#?mkdir?php [root@node1?/srv/salt/prod]#?mkdir?memcached [root@node1?/srv/salt/prod]#?mkdir?pkg編寫與編譯相關的安裝包文件參數(shù):
[root@node1?/srv/salt/prod]#?vim?pkg/make.sls[root@node1?/srv/salt/prod]#?cat?pkg/make.sls make-pkg:pkg.installed:-?pkgs:-?gcc-?gcc-c++-?glibc-?make-?autoconf-?openssl-?openssl-devel-?pcre-?pcre-devel對于haproxy需要下載源碼進行安裝,對于安裝的編譯參數(shù)等可以在一臺機器上安裝驗證。同時,需要將安裝包和所需要啟動腳本的文件放在files文件目錄中。
[root@node1?/srv/salt/prod/haproxy/files]#?cp?/software/haproxy-1.6.6/examples/haproxy.init?./修改啟動腳本haproxy.init中的默認BIN路徑:
這樣在/srv/salt/prod/haproxy/files目錄下默認就會有兩個文件:
[root@node1?/srv/salt/prod/haproxy/files]#?ls haproxy-1.6.6.tar.gz??haproxy.init編寫sls文件,在文件編寫haproxy的安裝配置:
[root@node1?/srv/salt/prod/haproxy]#?cat?install.sls? include:-?pkg.make?????????#?執(zhí)行pkg/make.sls文件 haproxy-install:file.managed:????#salt狀態(tài)模塊,將source中的文件下載到ID(沒有name參數(shù)則默認ID)指定的路徑-?name:?/usr/local/src/haproxy-1.6.6.tar.gz?-?source:?salt://haproxy/files/haproxy-1.6.6.tar.gz-?mode:?644-?user:?root-?group:?rootcmd.run:????????#?cmd.run狀態(tài)模塊-?name:??cd?/usr/local/src?&&?tar?xvf?haproxy-1.6.6.tar.gz?&&??\?cd??haproxy-1.6.6?&&?make?TARGET=linux2628?PREFIX=/usr/local/haproxy-1.6.6?\&&?make?install?PREFIX=/usr/local/haproxy-1.6.6?&&?\ln?-s?/usr/local/haproxy-1.6.6?/usr/local/haproxy?-?unless:?test?-L?/usr/local/haproxy?#如果結果為True,則不執(zhí)行name指向的命令-?require:-?pkg:?make-pkg-?file:?haproxy-installhaproxy-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-installcmd.run:-?name:?chkconfig?--add?haproxy-?unless:??chkconfig??--list|grep?haproxy??#當結果為假就執(zhí)行-添加自啟動命令net.ipv4.ip_nonlocal_bind:??#?設置允許linux監(jiān)聽VIP(非本機IP)sysctl.present:???-?value:?1 /etc/haproxy:file.directory:??#?目錄管理-?user:?root-?group:?root-?mode:?755這里有補充兩個狀態(tài)關系:
unless: 用于檢查的命令,僅當unless選項指向的命令返回false時才執(zhí)行name指向的命令
onlyif: ?檢查的命令,近當onlyif選項指向的命令返回true時才執(zhí)行name指向的命令
執(zhí)行salt 命令,完成所有節(jié)點的安裝,指定環(huán)境路徑prod,默認為base環(huán)境:
#?salt?'*'??state.sls?haproxy.install?saltenv=prod業(yè)務引用haproxy
為了更加清晰的對服務模塊和業(yè)務模塊區(qū)分,可以在prod目錄下分兩個目錄:cluster和modules ,分別對應業(yè)務和服務的各個模塊,將所有prod下的目錄服務包全部mv到modules目錄中。
由于重建了目錄,所以之前的/srv/salt/prod/modules/haproxy/install.sls?文件需要修改sourse file路徑:
?include:-?modules.pkg.make-?source:?salt://modules/haproxy/files/haproxy-1.6.6.tar.gz-?source:?salt://modules/haproxy/files/haproxy.init修改之后的目錄:
執(zhí)行salt 命令進行測試:
#?salt?'*'??state.sls?modules.haproxy.install??saltenv=prod將集群的業(yè)務配置放在cluster/files目錄中:
[root@node1?/srv/salt/prod/cluster/files]#?cat?haproxy-outside.cfg? global maxconn?100000 chroot?/usr/local/haproxy uid?99?? gid?99? daemon nbproc?1? pidfile?/usr/local/haproxy/logs/haproxy.pid? log?127.0.0.1?local3?info defaults option?http-keep-alive maxconn?100000 mode?http timeout?connect?5000ms timeout?client??50000ms timeout?server?50000ms listen?stats mode?http bind?0.0.0.0:8888 stats?enable stats?uri?????/haproxy-status? stats?auth????haproxy:saltstack frontend?frontend_www_example_com bind?172.16.10.62:80 mode?http option?httplog log?globaldefault_backend?backend_www_example_com backend?backend_www_example_com option?forwardfor?header?X-REAL-IP option?httpchk?HEAD?/?HTTP/1.0 balance?source server?web-node1??172.16.10.60:8080?check?inter?2000?rise?30?fall?15 server?web-node2??172.16.10.61:8080?check?inter?2000?rise?30?fall?15修改/srv/salt/prod/modules/haproxy/install.sls 添加開啟自啟動行為(上面的文件已經(jīng)添加)
創(chuàng)建haproxy的對外業(yè)務配置sls文件:
[root@node1?/srv/salt/prod/cluster]#?cat?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:?644service.running:-?name:?haproxy-?enable:?True-?reload:?True-?require:-?cmd:?haproxy-install-?watch:-?file:?haproxy-service同時,需要在base環(huán)境中修改top file:
[root@node1?/srv/salt/base]#?cat?top.sls? base:'*':-?init.init prod:'node*':-?cluster.haproxy-outside執(zhí)行salt高級狀態(tài),由于haproxy監(jiān)聽80和8888端口,所以先確保這些端口不被占用:
#?salt?'node1'?state.highstate?test=True??#高級狀態(tài)指定top?file運行 #?salt?'*'?state.highstate訪問監(jiān)聽的8888監(jiān)控端口:
http://172.16.10.60:8888/haproxy-status?
訪問兩個節(jié)點成功,說明配置成功。
轉載于:https://blog.51cto.com/tryingstuff/1873040
總結
以上是生活随笔為你收集整理的SaltStck 搭建Web集群运用示例 (一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS_ECMA基本语法中的几种封装的小函
- 下一篇: 用微信小程序开发的Canvas绘制可配置