SaltStack一鍵自動化部署高可用負載均衡叢集
本節內容涉及的saltstack配置以及各服務的安裝包和配置檔案均打包上傳到了百度雲,可自由下載使用
實驗環境(rhel6.5 x86_64bit virtual machine)
172.25.5.91 salt-master rhel65-lockey1 172.25.5.92 salt-minion rhel65-lockey2 (將自動部署keepalived,haproxy) 172.25.5.93 salt-minion rhel65-lockey3 (將自動部署keepalived,haproxy) 172.25.5.94 salt-minion rhel65-lockey4 (將自動部署nginx) 172.25.5.95 salt-minion rhel65-lockey5 (將自動部署nginx)
172.25.5.100 physical machine(for testing)
一、準備工作
1. 做好各主機的解析
vim /etc/hosts
172.25.5.91 rhel65-lockey1
172.25.5.92 rhel65-lockey2
172.25.5.93 rhel65-lockey3
172.25.5.94 rhel65-lockey4
172.25.5.95 rhel65-lockey5
2. 各主機需要關閉selinux以及防火牆設定
3. 在master端執行salt-key -L發現所有minion,並且通過salt-key -A命令執行認證,得到下面結果:
[[email protected] ~]# salt-key -L
4. master端取消以下注釋並重啟服務生效:
file_roots:
base:
- /srv/salt
pillar_roots:
base:
- /srv/pillar
二、此高可用負載均衡叢集組成
高可用:keepalived
負載均衡:haproxy
後端web server:NGINX
三、Get start
salt自動化部署叢集目錄結構
3.1 pillar目錄
為了結合jinja模板實現一些配置檔案中引數的動態調整(如keepalived中MASTER與BACKUP以及優先順序的值)
[[email protected] pillar]# tree
.
├── top.sls
└── webservice
└── web.sls
1 directory, 2 files
[[email protected] pillar]# cat webservice/web.sls
{% if grains['host'] == 'rhel65-lockey2' %}
state: MASTER
priority: 100
{% elif grains['host'] == 'rhel65-lockey3' %}
state: BACKUP
priority: 50
{% endif %}
[[email protected] pillar]# cat top.sls
base:
'rhel65-lockey2':
- webservice.web
'rhel65-lockey3':
- webservice.web
執行命令 salt ‘*’ saltutil.refresh_pillar使得選定主機動態引數設定生效
[[email protected] pillar]# salt ‘*’ pillar.items#檢視結果
3.2 _grains目錄
為服務主機新增role設定,用以根據role標籤決定主機需要安裝的軟體
[[email protected] _grains]# pwd
/srv/salt/_grains
[[email protected] _grains]# cat my_grains.py
#!/usr/bin/env python
def my_grains():
grains = {}
grains['roles'] = 'nginx'
grains['name'] = 'lockey'
return grains
[[email protected] salt]# salt rhel65-lockey[5,4] saltutil.sync_grains
#為2和4號主機新增nginx的role,後面部署的時候將通過這個標籤匹配進行nginx的安裝
rhel65-lockey4:
- grains.my_grains
rhel65-lockey5:
- grains.my_grains
[[email protected] salt]# salt rhel65-lockey[5,4] grains.item roles#檢視結果
rhel65-lockey4:
----------
roles:
nginx
rhel65-lockey5:
----------
roles:
nginx
3.3 haproxy目錄:
haproxy安裝、服務配置檔案、啟動指令碼和安裝包
[[email protected] haproxy]# cat install.sls
include:
- pkg.nginx-pre
- user.haproxy
haproxy-install:
file.managed:
- name: /mnt/haproxy-1.6.11.tar.gz
- source: salt://haproxy/files/haproxy-1.6.11.tar.gz
cmd.run:
- name: cd /mnt && tar zxf haproxy-1.6.11.tar.gz && cd haproxy-1.6.11 && make TARGET=linux26 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy && make TARGET=linux26 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy install
- creates: /usr/local/haproxy
/etc/haproxy:
file.directory:
- mode: 755
/etc/haproxy/haproxy.cfg:
file.managed:
- source: salt://haproxy/files/haproxy.cfg
/etc/init.d/haproxy:
file.managed:
- source: salt://haproxy/files/haproxy
- mode: 755
[[email protected] haproxy]# cat service.sls
include:
- haproxy.install
haproxy-service:
service.running:
- name: haproxy
- enable: true
- reload: true
- watch:
- file: /etc/haproxy/haproxy.cfg
3.4 keepalived目錄
keepalived安裝、服務配置檔案、啟動指令碼和安裝包
[[email protected] keepalived]# cat install.sls
include:
- pkg.nginx-pre
keepalived-install:
file.managed:
- name: /mnt/keepalived-1.3.5.tar.gz
- source: salt://keepalived/files/keepalived-1.3.5.tar.gz
cmd.run:
- name: cd /mnt && tar zxf keepalived-1.3.5.tar.gz && cd keepalived-1.3.5 && ./configure --prefix=/usr/local/keepalived --with-init=SYSV && make && make install
- creates: /usr/local/keepalived
/etc/sysconfig/keepalived:
file.managed:
- source: salt://keepalived/files/keepalived-sys
- mode: 644
- user: root
/etc/keepalived:
file.directory:
- mode: 755
/sbin/keepalived:
file.symlink:
- target: /usr/local/keepalived/sbin/keepalived
/etc/keepalived/keepalived.conf:
file.managed:
- source: salt://keepalived/files/keepalived.conf
- mode: 644
- user: root
- group: root
- template: jinja###注意jinja模板的用法
- context:
state: {{ pillar['state'] }}
priority: {{ pillar['priority'] }}
/etc/init.d/keepalived:
file.managed:
- source: salt://keepalived/files/keepalived
- mode: 755
- require:
- file: /etc/sysconfig/keepalived
- file: /etc/keepalived/keepalived.conf
[[email protected] keepalived]# cat service.sls
include:
- keepalived.install
keepalived-service:
service.running:
- name: keepalived
- enable: true
- reload: true
- watch:
- file: /etc/keepalived/keepalived.conf
3.5 nginx目錄
nginx安裝以及服務配置檔案和啟動指令碼、安裝包
[[email protected] nginx]# cat install.sls
include:
- pkg.nginx-pre
nginx-source-install:
file.managed:
- name: /mnt/nginx-1.12.1.tar.gz
- source: salt://nginx/files/nginx-1.12.1.tar.gz
cmd.run:
- name: cd /mnt && tar zxf nginx-1.12.1.tar.gz && cd nginx-1.12.1 && sed -i.bak 's/#define NGINX_VER "nginx\/" NGINX_VERSION/#define NGINX_VER "nginx"/g' src/core/nginx.h && sed -i.bak 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module && make && make install
- creates: /usr/local/nginx
[[email protected] nginx]# cat service.sls
include:
- nginx.install
- user.nginx
/usr/local/nginx/conf/nginx.conf:
file.managed:
- source: salt://nginx/files/nginx.conf
- mode: 644
/etc/init.d/nginx:
file.managed:
- source: salt://nginx/files/nginx
- mode: 755
nginx-service:
service.running:
- name: nginx
- enable: true
- reload: true
- require:
- file: /etc/init.d/nginx
- watch:
- file: /usr/local/nginx/conf/nginx.conf
3.6 pkg目錄
為各軟體安裝解決依賴包問題,需要包含在最先執行的安裝檔案中
[[email protected] pkg]# cat nginx-pre.sls
pkg-init:
pkg.installed:
- pkgs:
- gcc
- gcc-c++
- zlib-devel
- openssl-devel
- pcre-devel
3.7 top.sls
頂級檔案,用來進行叢集的分節點軟體安裝
[[email protected] salt]# cat top.sls
base:
'rhel65-lockey2':
- keepalived.service
- haproxy.service
'rhel65-lockey3':
- keepalived.service
- haproxy.service
'roles:nginx':
- match: grain
- nginx.service
3.8 user目錄
建立部分服務執行的使用者和組(如haproxy,nginx)
[[email protected] salt]# cat user/nginx.sls
nginx:
user.present:
- uid: 800
- shell: /sbin/nologin
- home: /usr/local/nginx
- createhome: false
[[email protected] salt]# cat user/haproxy.sls
haproxy:
group.present:
- gid: 200
user.present:
- uid: 200
- gid: 200
- shell: /sbin/nologin
- home: /usr/local/haproxy
- createhome: false
各服務的配置檔案以及啟動指令碼就不貼出了,下面提出幾點需要注意的地方:
1.jinja模板呼叫的格式以及對應的檔案中的寫法
- template: jinja#此部分對應keepalived.conf
- context:
state: {{ pillar['state'] }}
priority: {{ pillar['priority'] }}
keepalived.conf 中呼叫時寫法如下
state {{ state }}
priority {{ priority }}
2.對於pillar和grains檔案寫成後,必須要對特定的主機進行標籤的重新整理,保證最後執行時能夠對應進行軟體安裝:
salt rhel65-lockey[4,5] saltutil.sync_grains
salt ‘*’ saltutil.refresh_pillar
3. 對於haproxy的配置檔案,務必指定後端主機以及監聽:
frontend public
bind www.lockey.com *:80
default_backend dynamic
backend dynamic
balance roundrobin
server web1 172.25.5.94:80 cookie s1 check inter 1000
server web2 172.25.5.95:80 cookie s2 check inter 1000
4.top檔案的書寫
[[email protected] salt]# cat top.sls
base:
'rhel65-lockey2':#2和3主機安裝keepalived和haproxy
- keepalived.service
- haproxy.service
'rhel65-lockey3':
- keepalived.service
- haproxy.service
'roles:nginx':#具有nginx標籤的主機(4和5)安裝nginx服務
- match: grain
- nginx.service
5. 確保後端主機的web服務埠80未被佔用,以及selinux和防火牆
四、進行整體自動安裝測試然後執行
4.1 首先測試一下,如果有問題解決後再執行安裝
[[email protected] salt]# salt ‘*’ state.highstate test=true
注意:如果提示keepalived/haproxy/nginx服務無法啟動的錯誤是正常的,因為啟動指令碼還未推送過去
4.2 測試順利則執行推送開始自動安裝:
[[email protected] salt]# salt ‘*’ state.highstate
五、叢集可用性測試
1. 檢視vip是否在keepalived定義的MASTER上
停掉master的keepalived服務之後發生ip漂移
因為叢集部署成功之後是通過VIP(172.25.5.99)提供服務的,我在物理機中加了一條解析記錄然後通過curl命令進行負載均衡測試:
vim /etc/hosts
172.25.5.99 www.lockey.com
成功結果如下:
相關推薦
SaltStack一鍵自動化部署高可用負載均衡叢集
本節內容涉及的saltstack配置以及各服務的安裝包和配置檔案均打包上傳到了百度雲,可自由下載使用 實驗環境(rhel6.5 x86_64bit virtual machine) 172.25.5.91 salt-master rhel65-lockey1
Saltstack自動化運維工具(一鍵部署高可用負載均衡叢集)
在上篇部落格中我們利用salt推送了一臺主機上的haproxy為了實現高可用和負載均衡,我們再使用一臺虛擬機器server4搭建叢集 server1和server4組成高可用和負載均衡叢集 在server4 做好底層配置: 在server4上安裝minion,更改配置檔
利用saltstack一鍵部署高可用負載均衡叢集
實驗環境: Server1 172.25.254.1 maseter/minion keepalived/haproxy Server2 172.25.254.2 minion httpd Server3 172.25.254.3 minion
saltstack實現一鍵部署keepalived+haproxy的高可用負載均衡叢集
配置環境 主機名 ip 服務 server1 172.25.1.1 salt-master、salt-minion haproxy、keepalived server2 172.25.1.2 salt-minion
consul-template + nginx部署高可用負載均衡
mas server web key use 健康 png ice pre 簡介 Consul-template是Consul的一個方擴展工具,通過監聽Consul中的數據可以動態修改一些配置文件,大家比較熱衷於應用在Nginx,HAProxy上動態配置健康
docker中部署高可用負載均衡前後端專案異常
異常:在基於jdk的docker容器中可以使用jar方式啟動jar檔案,但有時候要終止程式該怎麼做? 當我在宿主機上去殺死對應的容器對映程式時,發現雖然外層宿主機刪除了程序,當容器中還是在執行 當檢視docker容器中nohup.out檔案時總是顯示地址被佔用 測試:ps -ef | g
MySQL高可用負載均衡叢集部署
簡介 使用MySQL時隨著時間的增長,使用者量以及資料量的逐漸增加,訪問量更是劇增,最終將會使MySQL達到某個瓶頸,那麼MySQL的效能將會大大降低。這一結果也不利於軟體的推廣。 那麼如何跨過這個瓶頸,提高MySQL的併發量呢?方法有很多,分散式資料庫、讀寫分離
高可用負載均衡叢集之 HAProxy 部署
一、HAProxy 簡介 1、HAProxy 是開源、免費、快速並且可靠的一種解決方案,他可以執行在大部分主流的 Linux 伺服器上。 2、HAProxy 適用於負載那些特大的 WEB 站點,而這些站點通常又需要會話保持或者
keepalived+haproxy 高可用負載均衡叢集
案例 chkconfig NetworkManager off chkconfig iptables off cat /etc/sysconfig/selinux #例行公事四臺都要這樣selinux為disabled狀態。 #web為配置好的狀態 只有一個頁面。
LVS+Keepalived 實現高可用負載均衡叢集
LVS+Keepalived 實現高可用負載均衡叢集 隨著網站業務量的增長,網站的伺服器壓力越來越大?需要負載均衡方案!商業的硬體如 F5 ,Array又太貴,你們又是創業型互聯公司如何有效節約成本,節省不必要的浪費?同時還需要實現商業硬體一樣的高效能高可
Keepalived + LVS + LAMP 高可用負載均衡叢集實現
一、Keepalived 簡介 Keepalived 是一個用 C 語言編寫的路由軟體。它最初是專門為 LVS 負載均衡軟體設計的,用來管理並監控 LVS 集群系統中各個服務節點的狀態,後來又加
階段總結——用虛擬機器搭建一個高可用負載均衡叢集架構
搭建一個高可用負載均衡叢集架構出來,並執行三個站點,具體需求如下。 ------------------------------------------------------------------------------------------ 基礎: 1 設計你認為合理的架構,用visio把架構圖
搭建簡單的高可用負載均衡叢集
一、搭建DR模式的lvs叢集 環境:DS:192.168.4.53 VIP:192.168.4.100 RS:192.168.4.51 192.168.4.52 1、建立三臺實驗機器,配置好ip和yum倉庫 2、在DR上配置VIP [[email protected] ~]#c
docker下用keepalived+Haproxy實現高可用負載均衡叢集
先記錄下遇到的坑,避免之後忘了; 花時間最多去解決的一個題是:在docker下啟動haproxy服務後在這個docker服務內安裝keepalived無法ping通的問題,雖然最後也是莫名其妙就好了,但是加強了不少對docker的理解和還需深入學習的地方。 為什麼要用
LVS+Keepalived搭建MyCAT高可用負載均衡叢集
LVS+Keepalived 介紹 LVS LVS是Linux Virtual Server的簡寫,意即Linux虛擬伺服器,是一個虛擬的伺服器集群系統。本專案在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟體專案之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR),十種
搭建LVS-DR負載均衡叢集、Keepalived-LVS高可用負載均衡叢集
LVS DR模式搭建準備工作三臺機器, 三臺機器均有公網IP。排程器(director)IP:192.168.8.133real server1(real1)IP:192.168.8.134real server2(real2)IP:192.168.8.135VIP:192.
Linux:RHCS高可用負載均衡叢集(ricci、luci、fence)
一·RHCS 1.RHCS是什麼 RHCS是Red Hat Cluster Suite的縮寫,也就是紅帽子叢集套件,RHCS是一個能夠提供高可用性、高可靠性、負載均衡、儲存共享且經濟廉價的叢集工具集合,它將集群系統中三大叢集架構融合一體,可以給web應
ActiveMQ高可用+負載均衡叢集
一,高可用叢集 從ActiveMQ5.9開始,ActiveMQ的叢集實現方式取消了傳統的Master-Slave方式,增加了基於ZooKeeper+LevelDB的Master-Slave實現方式,其他兩種方式目錄共享和資料庫共享方式依然存在 (1)檔案共享(KahaD
JMS之——ActiveMQ高可用+負載均衡叢集
一、高可用叢集 從ActiveMQ5.9開始,ActiveMQ的叢集實現方式取消了傳統的Master-Slave方式,增加了基於ZooKeeper+LevelDB的Master-Slave實現方式,其他兩種方式目錄共享和資料庫共享方式依然存在. 1、檔案共享(KahaDB
RabbitMQ(四):使用Docker構建RabbitMQ高可用負載均衡叢集
本文使用Docker搭建RabbitMQ叢集,然後使用HAProxy做負載均衡,最後使用KeepAlived實現叢集高可用,從而搭建起來一個完成了RabbitMQ高可用負載均衡叢集。受限於自身條件,本文使用VMware虛擬機器的克隆功能克隆了兩臺伺服器進行操作,僅作為一個demo,開發中可根據實際情況進行調整