1. 程式人生 > >SaltStack一鍵自動化部署高可用負載均衡叢集

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,開發中可根據實際情況進行調整