企業級自動化部署方案——ansible實現lvs+keepalived高可用架構

来源:https://www.cnblogs.com/zhaoya2019/archive/2020/03/31/12609142.html
-Advertisement-
Play Games

==耗時8小時左右== 總體設計 ansible playbook目錄結構 入口文件 因為不同的主機配置不同,所以按主機分類設置了3個role NFS服務playbook結構 WEB服務playbook結構 Keepalived+LVS服務playbook結構 執行過程 結果測試 1.查看浮動ip ...


耗時8小時左右

總體設計

在這裡插入圖片描述

ansible-playbook目錄結構

入口文件
因為不同的主機配置不同,所以按主機分類設置了3個role

[root@ansible ~]# cat /etc/ansible/work_dir/lvs.yaml
- hosts: [nfs]
  roles:
    - nfs
- hosts: [rs]
  roles:
    - web
- hosts: [ds]
  roles:
    - keepalived

NFS服務playbook結構

[root@ansible ~]# tree /etc/ansible/roles/nfs
/etc/ansible/roles/nfs
├── files
├── handlers
│   └── main.yaml
├── tasks
│   └── main.yaml
├── templates
└── vars
    └── main.yaml

WEB服務playbook結構

[root@ansible ~]# tree /etc/ansible/roles/web
/etc/ansible/roles/web
├── files
├── handlers
│   └── main.yaml
├── tasks
│   └── main.yaml
├── templates
│   ├── ifcfg-lo.j2
│   └── rs_test.j2
└── vars
    └── main.yaml

Keepalived+LVS服務playbook結構

[root@ansible ~]# tree /etc/ansible/roles/keepalived
/etc/ansible/roles/keepalived
├── files
├── handlers
├── tasks
│   └── main.yaml
├── templates
│   ├── keepalived_conf.j2
│   └── keepalived_service.j2
└── vars
    └── main.yaml

執行過程

[root@ansible work_dir]# pwd
[root@ansible work_dir]# ansible-playbook lvs.yaml

在這裡插入圖片描述在這裡插入圖片描述

結果測試

1.查看浮動ip
在ds1 (主) 上查看IP信息
在這裡插入圖片描述在ds2(備) 上查看IP信息
在這裡插入圖片描述浮動IP在負載均衡主節點上
在網頁上訪問測試
在這裡插入圖片描述在這裡插入圖片描述通過LVS訪問NFS(把NFS掛載到了/var/www/html/nfs)
在這裡插入圖片描述實際頁面應該只有一個 Welcome to NFS! ,這是多次測試ansible-playbook導致的
2.測試故障切換

[root@ftp ~]# while :; do curl 192.168.213.200;sleep 2;done

停止rs1的httpd服務,業務沒有中斷
在這裡插入圖片描述當rsl systemctl start httpd 停止httpd服務後,所有的訪問請求都分配到rs2上;當rsl啟動httpd服務,所有的訪問請求都平均分配到兩個rs節點上(wrr演算法,weight都為1)

在sleep 2的時候會出現2次訪問不到的情況curl: (7) Failed connect to 192.168.213.200:80; Connection refused
在sleep 3/4/5的時候會出現1次訪問不到的情況
在sleep 6的時候訪問正常
可見,這個節點移除是需要時間的

停止ds1(主)的keepalived服務,服務不受影響,vip漂移到了ds2(備)上
在這裡插入圖片描述在這裡插入圖片描述當dsl重啟keepalived服務後,vip會漂移回來

實現過程問題記錄

1.在rs1,rs2上綁定VIP到迴環網卡
2.調整內核參數,關閉arp響應要 sysctl -p
3.keepalived首次啟動失敗
通過日誌文件/var/log/messages查看錯誤

(Line 12) WARNING - interface eth0 for vrrp_instance VI_1 doesn’t exist

問題: keepalived新版本會檢查/etc/keepalived/keepalived.conf配置文件,配置有誤會導致程式啟動失敗(如預設的配置文件中網卡為eth0,而實際網卡為ens33)

解決方法: 修改配置文件後再啟動進程(用以下方法可以方便的修改網卡名稱)

#/etc/ansible/roles/keepalived/templates/keepalived_conf.j2
interface {{ net_name }}

4.systemctl無法徹底停掉keepalived
現象描述: 無法正常stop掉keepalived進程,再次啟動時雖然可以啟動,但進程狀態裡面會提示:Can’t open PID file /var/run/keepalived.pid (yet?) after start

問題: systemd的啟動腳本有問題,無法創建PID文件

解決方法: 註釋掉啟動腳本中的如下行,重載 systemctl daemon-reload

#/lib/systemd/system/keepalived.service
KillMode=process #只殺掉程式的主進程,不管打開的子進程

這個問題可能和keepalived的版本有關,不一定都需要處理這個問題
5.keepalived開啟順序影響部分配置
當2台伺服器都設置為BACKUP模式時,先開啟keepalived進程的會先綁定VIP,後開啟的即使優先順序高也不會去搶占,除非先開啟的掛掉,即雙BACKUP模式下,要先開啟優先順序高的伺服器的keepalived進程(個人驗證的是這樣的)

6.keepalived中的兩種模式

(1)master->backup模式
一旦主庫宕機,虛擬ip會自動漂移到從庫,當主庫修複後,keepalived啟動後,還會把虛擬ip搶占過來,即使設置了非搶占模式(nopreempt)搶占ip的動作也會發生。
(2)backup->backup模式
當主庫宕機後虛擬ip會自動漂移到從庫上,當原主庫恢復和keepalived服務啟動後,並不會搶占新主的虛擬ip,即使是優先順序高於從庫的優先順序別,也不會發生搶占。為了減少ip漂移次數,通常是把修複好的主庫當做新的備庫。

在資料庫的應用場景中,不建議資料庫的頻繁切換,可配置為keepalived的VIP不搶占模式
7.在Linux中,掛載到目錄後,文件夾原來的數據會被隱藏,無法看到測試結果(只能看到NFS上的文件),所以新建了目錄 /var/www/html/nfs 進行掛載,既能看到測試結果,又能訪問到NFS伺服器

8.ds1和ds2的keepalived.conf文件除了一些參數不同,其餘都一樣,可以應用templates處理

vrrp_instance VI_1 {
    {% if ds_master == ansible_hostname%}
	state MASTER
    priority 150
    {% elif ds_slave == ansible_hostname%}
	state BACKUP
	priority 100
    {% endif %}
}

vars變數有部分重覆定義,但只寫一個role中對集群不同主機的配置會有影響,暫時未想到解決辦法

執行有些慢,可能是因為開了7台虛擬機的原因,也可能是網路原因


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ViewComponent的一種使用方法 最近在一個自己新建的Core項目中想使用Html.Action(),突然發現這個方法已經沒了,下麵我按照官網(https://docs.microsoft.com/zh cn/aspnet/core/mvc/views/view components?vie ...
  • 一、什麼是ThreadPool 線程池(源碼) 1.線程池顧名思義,有我們的系統創建一個容器裝載著我們的線程,由CLR控制的所有AppDomain共用。線程池可用於執行任務、發送工作項、處理非同步 I/O、代表其他線程等待以及處理計時器。所以使用線程池不需要自己創建線程,而是通過線程池來創建和執行和管 ...
  • 配置規則 命令行配置提供程式 環境變數配置提供程式 文件配置提供程式 配置的讀取 自定義配置數據源 ASP.NET Core中的配置項可以通過命令行、環境變數、json/xml/ini配置文件來提供。 Web應用在生成主機時會調用CreateDefaultBuilder方法,這個方法按照下麵的順序添 ...
  • 下麵2個service中,方法體均一樣。只是其中service名,參數和url路徑不一樣。 原因是曾經對項目升級或是重構留下來的結果。 由於程式中N多處地方有引用,又不能合併它,刪除更不用說了。 因為,Insus.NET為了讓其更好維護,因此寫了另外一個Service來進行重構它們: 好了,博文中最 ...
  • 1、創建一個Asp.Net Core Web應用程式 1.1、打開VS2019 新建項目 1.2、選好項目位置後進入選擇界面,選擇Web應用程式 1.3、進去的頁面結構如下 Pages 文件夾:包含 Razor 頁面和支持文件。 每個 Razor 頁面都是一對文件: 一個 .cshtml 文件,其中 ...
  • 相關主頁 Prometheus https://prometheus.io/ grafana https://grafana.com/ 安裝Prometheus Linux 可以參考https://www.cnblogs.com/linkanyway/p/Configure-a-Prometheus ...
  • 我從一萬二千年前開始寫XAML,這麼多年用了很多各式各樣的工具,現在留在電腦里的、現在還在用的、在寫WPF時用的也就那麼幾個。這篇文章總結了這些工具,希望這些工具可以讓WPF開發者事半功倍。 1. Visual Studio Visual Studio應該無需介紹,它是“面向任何開發者的同類最佳工具 ...
  • 假如有這麼一個數據網關服務服務,客戶端有三種賬號角色(普通用戶、管理員用戶、超級管理員用戶),數據網關針對這三種角色用戶分配不同的數據訪問許可權,那怎麼樣通過IdentityServer4 來實現角色的授權呢?它又是怎樣的一個過程? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...