目錄
1.6.5 在從服務器上查詢自動同步主服務器的DNS記錄。 - 8 -
1.11.1 安裝keepalived(主從均需) - 16 -
1.11.2 編輯keepalived配置文件 - 16 -
1.11.3 從機上的keepalived配置 - 18 -
1.13 測試在部署keepalived情況下的域名解析訪問 - 23 -
1.14 lvs+keepaived+bind的方案 - 25 -
1.16 部署准備(前面中的web和bind服務需要保留,在這里需要進行測試,不再重復搭建) - 25 -
1.17.1 安裝keepalived(主備均需) - 26 -
1.18.3 測試keepalived+lvs的高可用 - 32 -
-
方案預想
本文圍繞以下三個方案進行了部署測試
-
采用dns主從方案,適用於中小型場景
-
keepalived+bind,適用於中小型場景
-
lvs+keepalived+bind,使用大型場景
1.2 bind高可用部署
環境
主機IP
主機名
系統
用途
192.168.222.10
dnsmaster
Centos7.6
提供dns服務
192.168.222.11
slaver
Centos7.6
提供dns服務
192.168.222.20
apache
Centos7.6
Web服務器(www.good.cn)
192.168.222.131
Windows2012
Windowserver2012
模擬用戶訪問客戶端
192.168.222.100
vip
keepalived
虛擬IP
192.168.222.200
Lvs+keepalived
Centos7.6
負載均衡服務器
192.168.222.201
Lvs+keepalived
Centos7.6
負載均衡服務器
192.168.222.240
Lvs+keepalive的VIP
虛擬IP
-
-
主從架構圖
-
bind主從高可用
為了實現DNS服務器的高可用,在這里采用了著名的DNS軟件bind,並采用其自帶的主從方案。目標實現在主DNS掛掉的情況下,其從DNS提供正常服務。注意:這里的從服務器可以為多台,例如dns集群。
-
部署前准備
-
關閉linux防火牆和selinux,且設置為開機不啟動。確保udp/tcp的53端口可使用。生產中若需要開啟,請開放相關的端口和允許相關的IP訪問即可。
-
配置yum源和網絡,保證三台linux主機網絡互通
-
本文檔不對技術詞語進行詳細解釋,請自行搜索學習。
-
-
bind主配置
查看當前鏡像所帶的bind軟件包和yum源可下載版本,離線安裝請下載好相關安裝包。
安裝bind需要三個軟件包為bind-chroot,bind-utils,bind-utils為調試工具包。
-
安裝,采用yum安裝
啟動
查看狀態,或者查看其UDP端口53的狀態
-
主配置文件修改
定義bind服務程序的運行,例如開放哪個接口的53號端口用於監聽用戶的請求,對於哪些用戶的請求予以回應。
vim /etc/named.conf
更改為如下內容,詳細解釋請訪問官網https://www.isc.org/bind/
保存后檢查錯誤,無輸出則為OK
-
主區域配置文件修改
-
編輯/etc/named.rfc1912.zones文件,在結尾添加,保存。
-
-
主服務配置正向解析
-
復制一份正向解析模板文件,並把域名和IP地址對應數據填寫數據配置文件中保存。注意權限。
cd /var/named/ && cp -a named.localhost good-zone
-
編輯good-zone文件,保存如下內容。IP指向為apache服務器地址,字段意義請查閱官網資料。
-
重啟named服務,沒有報錯則正常
systemctl restart named
-
配置完畢后,使用下列命令檢查配置文件是否生效
-
-
從服務器安裝bind
-
安裝bind
此步驟與主服務器一致
-
啟動bind服務
systemctl start named
-
修改從服務器的區域配置文件
在從服務器上的主配置文件/etc/named.conf進行修改,並添加代解析DNS114.114.114.114(服務器使用第二台centos系統)
-
修改從服務器的區域配置文件
vim /etc/named.rfc1912.zones
在末尾添加
重啟主和從服務器的bind服務
-
在從服務器上查詢自動同步主服務器的DNS記錄。
可以看到已經同步過來了。
若需要還可以配置key認證,這是bind9的views功能,可以根據不同的IP來源返回不同的的IP。
-
安裝配置apache服務
-
安裝
啟動httpd,狀態正常。
加入開機啟動項
systemctl enable httpd
-
編輯html文件
cd /var/www/html/ && mkdir good
進入good目錄創建並編輯index.html文件並加入如下內容
-
編輯主配置文件httpd.conf
末尾添加如下內容,是為good網站的虛擬服務器目錄
修改完畢重啟httpd服務,如有報錯自行排查。確保其80端口未被占用。
-
測試
到這里已完成大部分工作,在windows用戶主機嘗試解析,注意配置windows主機的dns為主從dns。
-
測試網站解析
192.168.222.10為負責此次解析並返回給客戶端的服務器
192.168.222.20為www.good.cn的IP地址
可以看到解析外部域名也可以,並且負責解析的服務器為主DNS服務器
-
訪問網站測試
訪問我們自己的web服務器,成功
訪問百度,成功。
web服務器上訪問其域名。注意將此服務器的DNS設置為主從DNS並重載網絡。
-
測試主從高可用
在這里將主服務器的bind服務關閉,並進行網站訪問和解析測試。
在windows客戶端訪問網站
linux端訪問
查看解析
-
主DNS恢復測試
啟動主DNS的bind服務
-
windows端訪問和解析
可以看到主DNS服務很快提供服務。
-
linux端解析和訪問
可以看到主DNS很快恢復服務。
訪問也正常
-
keepalived+bind方案
考慮到有些需求需要提供雙機高可用並實現部分故障轉移且自動恢復,和保護其真實地址的需求,特此可以在之上增加keepalived。
-
架構圖
就是在主從基礎上加了keepalived
-
安裝keepalived(主從均需)
keepalived的原理和細節這里不再闡述,請參考其官網
安裝
-
編輯keepalived配置文件
以下為詳細配置,可參考進行優化或實施,詳細字段意義不再闡述。
新建/etc/keepalived/scripts目錄,注意權限
在scripts目錄下創建以下腳本,並執行chmod +x ./dns* 增加其執行權限
以下為腳本內容共五個。
-
從機上的keepalived配置
安裝yum install -y keepalived
-
配置文件
主要有三個地方需要注意,這是和主配置不一樣地方,如下圖
腳本也是和主一樣
-
測試keepalived
主從機器啟動keepalived,無報錯正常。
-
查看其VIP綁定情況
查看其日志,可以看到綁定后主服務器將會發送VRRP廣播包。
查看從服務器的ip情況,可以看到正常。
-
測試VIP轉移
-
制造故障
這里制造故障可以有,bind的named進程掛了,或者是keepalived掛了,或者是機器宕機都會實現VIP漂移。
-
制造named進程故障
這里直接關閉其服務,可以看到VIP迅速漂移了。注意如果named恢復正常,且不做相關措施keepalived原主可能會搶占回來。可以設置不搶占模式,且將MASTER改為BACKUP。
查看從服務的網絡情況,可以看到VIP已經很快的綁定到從服務器上,查看其漂移日志。
-
制造keepalived故障
注意如果keepalived恢復會搶占VIP,需要配置其不搶占模式且更改其為BACKUP。
關閉keepalived服務,主服務器已經看不到VIP了,可以看到VIP很快轉移到從服務器
從服務器VIP綁定日志
從服務器網絡情況
-
制造宕機情況
這類情況其實和上述情況一致,這里不再測試。
-
測試在部署keepalived情況下的域名解析訪問
此時我們需要把DNS服務器改為VIP,也就是192.168.222.100
我們在web服務器測試
-
測試解析和訪問情況
更改服務器DNS配置,並重啟網絡
查看網站解析,www.good.cn為自己搭建的網站,可以看到VIP完成其解析任務,訪問也正常。
看看百度訪問解析
-
lvs+keepaived+bind的方案
此方案是在bind的服務加上負載均衡服務lvs,並且使用keepalived保證lvs的高可用,采用的是dr模式中的輪詢算法,把請求交給后端的bind服務集群。
-
架構圖(參考)
以上架構圖為參考,本次測試為lvs+keepalived(兩台主備lvs)+bind(2台主從)
-
部署准備(前面中的web和bind服務需要保留,在這里需要進行測試,不再重復搭建)
-
保證主機間網絡互通,時鍾同步。
-
軟件版本請自行選擇。
-
關閉防火牆和selinux,避免影響。
-
-
安裝必要模塊軟件(主備均需)
以上是關閉防火牆和加載ip_vs內核模塊,安裝lvs相關和編譯軟件等
-
安裝keepalived(主備均需)
curl -O https://www.keepalived.org/software/keepalived-2.1.3.tar.gz
tar -zvxf keepalived-2.1.3.tar.gz
cd keepalived-2.1.3
./configure
make && make install
-
設置開機啟動(主備均需)
拷貝配置文件至默認目錄,因為上面的編譯安裝時configure是默認配置,所以需要將配置文件拷貝至默認目錄中/etc/keepalived/
-
編輯配置文件(lvs1)
注意區別,master,slaver,vip,網卡等
-
編輯配置文件(lvs2)
-
bind服務器配置
在/etc/init.d/下建立lvsrs文件,如下注意修改
提供執行權限
chmod +x lvsrs
並設置開機啟動腳本並給予權限chmod +x /etc/rc.local
啟動keepalived,執行lvsrs腳本。
-
測試
-
vip綁定情況
如下圖VIP目前在lvs1上。
下圖中可以看到后端集群的10和11兩台dns服務器
關閉從dns服務
如下圖lvs1上看到從dns服務器已經不在集群中。因為從dns的bind為53端口提供服務,lvs檢查到53端口不正常會將其踢出集群。
-
查看解析情況
在web服務器上設置dns服務器為VIP:192.168.222.240,重啟網絡。
訪問自建網站www.good.cn和百度
查看解析
在windows上訪問,也沒有問題。
-
測試keepalived+lvs的高可用
關閉lvs1上的keepalived
查看lvs2上的IP,很快就飄到lvs2
查看日志,看到vip的綁定日志
我們再看看解析情況,自己的網站和百度都沒有問題也沒問題
停掉dns主看看
再看看解析效果,主停掉后,就變成從dns提供服務了
上網也正常
-
總結
理論上主從同步會自動同步區域文件,但其同步頻率貌似不在可控范圍,可能造成需要數分鍾才能保持一致,在區域文件眾多且更改頻率快的情況下,采用git或者rsync+inotify自動實時同步效率會更好。不過一般的使用是沒問題的。
keepalived高可用在主發生故障時,需要其維護人員,將主恢復好后選擇在適當的時間將其恢復主的身份。如不需要切換回來,請設置主為不搶占模式,且把MASTER字段改為BACKUP。否則主會搶占VIP。
如果需要web界面的方式管理,可使用flask/Django+mysql+bind-dlz方式開發。不過這里花費的力氣將會成倍增加。
以上主從方案適用於中小型企業負載。在這種環境下因請求量和數據量較低,bind受服務器性能的影響不大,且dns服務為無狀態服務,軟件程序性能也比較好,對cpu和內存並沒有太大的壓力,所以單台服務器很難遇到性能上的障礙,建議使用queryperf進行壓測,但如果有巨量的請求,單台服務器是承受不了的,可考慮采用lvs+keepalive+bind,不過機器數量也在成倍增加,域名數量多,二級域名數量多,可參考互聯網解決方案將公司域名分為根域名+頂級域名+二級域名,采取分層解析。可平衡各個DNS服務器的壓力。還可以托管cdn或者采用商用方案。
最后如果有較大需求可以使用lvs+keepalived+bind方案,有人可能會問為什么不用nginx,lvs是處理轉發,其請求流量不會經過lvs,nginx的話會處理流量,nginx更擅長在應用層的轉發,這就會增加nginx的負擔,所以lvs四層網絡的並發能力是比nginx大很多的。