生產環境搭建高可用Harbor(PG13故障自動切換篇)

語言: CN / TW / HK

各個概述:

生產環境搭建高可用Harbor(包括恢復演練實操) 篇幅中已經提到,為了簡單部署,只是講解了:

基於阿里雲的SLB四層實現了對2臺ECS部署了Harbor服務的負載均衡與高可用;

使用2臺ECS搭建了主從複製模式的PG13,以保障資料安全;

使用阿里雲NFS做映象資料共享;

複用已有的阿里雲RDS(Redis)的4個index做快取與會話共享;

模擬PG13發生主節點故障後手動切換從節點的演練以及災難性恢復;

但其實對於最核心也最重要的資料層PG13來講並沒有實現真正的高可用,只是對資料做了一層基於PG的XLGO複製,保障主節點宕機後,可以快速手動將從節點提升為主節點;就這個問題,今天我們來聊聊,如何使用開源元件keepalived結合阿里雲的EIP+HAVIP讓PG13可以實現HA自動切換,從而成為真正意義的高可用、負載均衡的Harbor。

就官方的高可用部署方案而言,推薦把所有服務都分佈在k8s叢集中,對於各個服務可用性與效能來講,肯定是提高了,但是這樣也一定會對你使用的資源有所要求與消耗,並且增加了使用與技術維護成本,同時對k8s小白也非常的不友好;另外,對於任何系統架構設計, 能解耦的,絕不把 雞蛋放在一個籃子裡,要相信墨菲定律~

而我們這裡所講的方案,就是簡單原則,化繁為簡,學以致用;在控制成本的的前提下,以最小資源環境,使用大家都熟知的技術手段設計一套 高可用,負載均衡 ,並且可以將資源利用率完全發揮到極致!

準備工作:

阿里雲專有網路 高可用開源元件 EIP
HAVIP keepalived xxx.xxx.xxx.xxx

實現目標:

keepalived  是什麼,這裡就不過多敘述了,自行百度與谷歌吧!只對如何使用阿里雲的EIP+HAVIP與keepalived來實現PG13資料庫主節點故障以後, 實現自動切換從節點,以達到高可用目的,使資料庫服務對Harbor繼續提供訪問~

PS: 

因為阿里雲現在已經不支援宿主機ECS建立 繫結 VIP,但是!阿里雲把這個功能整合在了專用網路裡,起名為HAVIP!阿西吧~所以,我們只能在阿里雲的專用網路中申請HAVIP來配合keepalived做高可用。

申請時注意事項:

  1. 需要在ECS所屬區域中的交換機申請HAVIP,切記不要選錯,比如我的ECS在北京區域某個交換機中,那麼我就需要把區域切換到北京,然後在這個交換機中申請HAVIP,交換機的id可以在ECS詳情中檢視。

  2. 阿里雲HAVIP只支援單播,所以要使用unicast_src_ip引數,且要使用unicast_peer配置對端的裝置IP。

  3. HaVip僅支援繫結到同一個交換機下的ECS例項,每個HaVip最多可以繫結兩臺ECS例項。

申請阿里雲HAVIP

申請連結 https://vpcnext.console.aliyun.com/vpc/cn-shanghai/havips

建立HaVip

安裝、配置keeplived

在每個ECS安裝keepalived 安裝命令: apt install keepalived -y ,我的是ubuntu18.04,如果是CentOS,請使用yum install安裝。

配置主節點keepalived

# 配置 主節點 keepalived ECS253
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER # 設定ECS253例項為主例項
interface eth0 # ECS網絡卡: eth0
virtual_router_id 51
nopreempt
priority 100 # 設定優先順序,數字越大,優先順序越高.
advert_int 1
authentication {
auth_type PASS
auth_pass 111111
}
unicast_src_ip 172.19.48.253 # ECS例項的私網IP地址: 172.19.48.253
unicast_peer {
172.19.48.254 # 對端ECS例項的私網IP地址: 172.19.48.254
}
virtual_ipaddress {
172.19.48.188 # HaVip的IP地址: 172.19.48.188
}
notify_master "/etc/keepalived/script/pg13_action.sh MASTER"
notify_backup "/etc/keepalived/script/pg13_action.sh BACKUP"
notify_fault "/etc/keepalived/script/pg13_action.sh FAULT"
notify_stop "/etc/keepalived/script/pg13_action.sh STOP"
garp_master_delay 1
garp_master_refresh 5

track_interface {
eth0 # ECS網絡卡為eth0
}
}

配置備節點 keepalived

# 配置 備節點 keepalived ECS254
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_instance VI_1 {
state BACKUP # ECS254例項為備用例項
interface eth0 # 網絡卡:eth0
virtual_router_id 51
nopreempt
priority 10 # 設定優先順序,數字越大,優先順序越高.
advert_int 1
authentication {
auth_type PASS
auth_pass 111111
}
unicast_src_ip 172.19.48.254 # ECS例項的私網IP地址: 172.19.48.254
unicast_peer {
172.19.48.253 # 對端ECS例項的私網IP地址: 172.19.48.253
}
virtual_ipaddress {
172.19.48.188 # HaVip的IP地址: 172.19.48.188
}
notify_master "/etc/keepalived/script/pg13_action.sh MASTER"
notify_backup "/etc/keepalived/script/pg13_action.sh BACKUP"
notify_fault "/etc/keepalived/script/pg13_action.sh FAULT"
notify_stop "/etc/keepalived/script/pg13_action.sh STOP"
garp_master_delay 1
garp_master_refresh 5

track_interface {
eth0 # ECS網絡卡為eth0
}
}

因涉及到業務私密性,指令碼就不提供了,自己嘗試寫寫吧,有問題可以加我微信諮詢。

將HAVIP與主備ECS例項繫結

完成以下操作,將HaVip分別與主備ECS例項繫結。

登入專有網路管理控制檯。

在左側導航欄,單擊 高可用虛擬IP

在頂部選單欄處,選擇HaVip的地域。

找到步驟一:建立HaVip建立的HaVip例項,單擊HaVip例項的ID。

繫結資源 區域 ECS例項 處,單擊 立即繫結

繫結ECS

在彈出的對話方塊中,選擇ECS1例項,然後單擊 確定

重複上述步驟,將HaVip與ECS2例項繫結。

繫結成功後,在 繫結資源 區域,檢視HaVip繫結的ECS例項。

將HAVIP與EIP繫結

將HaVip與EIP繫結,繫結後該HaVip可以通過EIP提供公網服務。

登入專有網路管理控制檯。

在左側導航欄,單擊 高可用虛擬IP

在頂部選單欄處,選擇HaVip的地域。

找到步驟一:建立HaVip建立的HaVip例項,單擊HaVip例項的ID。

繫結資源 區域,單擊 彈性公網IP 右側的 立即繫結

繫結EIP

在彈出的對話方塊中,選擇需要繫結的EIP,然後單擊 確定

繫結成功後,您可以檢視繫結的EIP。

故障演練測試

完成如上操作後,訪問已經配置的Harbor域名,因為我們之前已經做了負載均衡,只需要模擬一下將PG13停止掉,便可觸發了自動切換, 此時, 我們已經做好了Harbor的PG13資料庫高可用!

在基於DevOps思想 建設 自動化運維改革的大道上,一直砥礪前行,從未停歇。

道阻且長,行則將至,行而不輟,未來可期。

歡迎搜尋 k8stech 關注公眾號 Kubernetes技術棧 ,定時更新關於運維開發、雲原生、SRE等文章。