- GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯系小編并注明來源,
- GreatSQL是MySQL的國產分支版本,使用上與MySQL一致,
- 作者:蟹黃瓜子
- 文章來源:社區投稿
1.前言
在集群當中離不開的一個詞就是是高可用,用本文來簡單聊聊Keepalived是什么、Keepalived如何實作高可用、Keepalived的使用場景,
- 首先,假設一個應用場景,內網有一臺tomcat服務器,隨著業務的增加、流量的增加一臺tomcat服務器就變得不夠用了,因此需要增加多臺tomcat服務器,他們擁有相同的業務處理能力,為了可以統一對這些tomcat的訪問同時更好地調度到不同的tomcat完成業務,可以添加一臺nginx服務器,它的作用是為內網中的多臺tomcat服務器提供負載均衡的動態訪問,通過nginx,我們可以以不同的調度方式來到不同的tomcat來進行下一步的操作,
- 但這種模式是十分脆弱的,如果此時nginx宕機了,tomcat服務器就都訪問不了了,假設也增加一臺nginx賦予這臺nginx相同的業務能力,那就又涉及到了這個問題,它需要一個統一的入口,如果在這兩臺nginx服務器的前面再放一臺nginx或者是一臺lvs服務器做這兩臺nginx的調度,只會使得這種部署方案進入一個死回圈,變成一個無解的答案,
- 可以試著換一種思路,我就讓這臺nginx作為主機進行作業,同時為這臺nginx準備一臺備機,當主機宕機了,這臺備機就可以及時頂替主機的作業,當然還需要考慮到這兩臺服務器是不同的ip,客戶訪問的是主機,怎么變成訪問備機呢?如果要把備機的ip“換成主機的”顯然不可取,有可能主機只是過熱的短暫故障,如果ip被備機使用了,主機又突然恢復了,這個時候問題又出現了,因此,我們需要使用一個虛擬ip,
因此,實作的效果應是一主一備,主機宕機備機上線提供服務,不可能同時提供服務,訪問業務通過的入口為vip,因此我們引入Keepalived,讓其跑在兩臺nginx上,達到Keepalived之間的相互通信,檢測心跳,如果主機宕機,Kpalived就將主機的vip漂移到備機上,這樣就可以實作不需要關注這兩臺nginx的具體ip地址是多少就可以實作來者之間高可用的切換,至于宕機的服務器恢復以后重新上線是否作為主機就要根據組態檔里面的優先級進行競選,
2.Kepalived介紹
Keepalived是一款保證集群高可用的一個服務軟體,用來防止單點故障,Kepalived是以VRRP(Virtual Router Redundancy Protocol)協議(虛擬路由冗余協議)為實作基礎的,
虛擬路由冗余協議,可以認為是實作路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master,這樣的話就可以保證路由器的高可用了,
3.Keepalived部署
假設nginx服務器為192.168.1.1、192.168.1.2,vip為192.168.1.200:
為機子安裝環境,采用yum源安裝:
[root@localhost ~]# yum -y install kernel-devel*
[root@localhost ~]# yum -y install openssl-*
[root@localhost ~]# yum -y install popt-devel
[root@localhost ~]# yum -y install lrzsz
[root@localhost ~]# yum -y install openssh-clients
[root@localhost ~]# yum -y install libnl libnl-devel popt
[root@localhost ~]# yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
- 進入
/usr/local/目錄:
[root@localhost ~]# cd /usr/local/
- 把下載“keepalived-1.2.15.tar.gz”放入目錄下,解壓:
[root@localhost local]# tar zxvf keepalived-1.2.15.tar.gz
- 進入目錄:
[root@localhost local]# cd keepalived-1.2.15/
[root@localhost keepalived-1.2.15]#
- 通過configure進行安裝:
[root@localhost keepalived-1.2.15]# ./configure --prefix=/usr/local/keepalived
- 進行編譯安裝:
[root@localhost keepalived-1.2.15]# make
[root@localhost keepalived-1.2.15]# make install
- 拷貝執行檔案:
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
- 將init.d檔案拷貝到etc下,加入開機啟動項:
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/keepalived
- 將keepalived檔案拷貝到etc下,加入網卡配置:
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
- 創建keepalived檔案夾,將keepalived組態檔拷貝到etc下:
[root@localhost keepalived-1.2.15]# mkdir -p /etc/keepalived
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
- 添加可執行權限,同時加入開機啟動:
[root@localhost keepalived-1.2.15]# chmod +x /etc/init.d/keepalived
# 添加時必須保證/etc/init.d/keepalived存在
[root@localhost keepalived-1.2.15]# chkconfig --add keepalived
[root@localhost keepalived-1.2.15]# chkconfig keepalived on
# 添加完可查詢系統服務是否存在
[root@localhost keepalived-1.2.15]# chkconfig --list
- 使用:
啟動:service keepalived start
停止:service keepalived stop
重啟:service keepalived restart
- 將keepalived日志輸出到local0:
[root@localhost keepalived-1.2.15]# vi /etc/sysconfig/keepalived
# 添加:
KEEPALIVED_OPTIONS="-D -d -S 0"
- .在/etc/rsyslog.conf里添加配置:
[root@localhost keepalived-1.2.15]# vi /etc/rsyslog.conf
# 內容:
local0.* /var/log/keepalived.log
- 重新啟動keepalived和rsyslog服務后配置防火墻通訊地址:
[root@localhost keepalived-1.2.15]# service rsyslog restart
[root@localhost keepalived-1.2.15]# service keepalived restart
- 主機組態檔:
! Configuration File for keepalived
global_defs {
router_id NG_DEVEL1
}
vrrp_instance NG {
# 標示為主nginx
state MASTER
# HA檢測埠,查看主機服務器的網卡
interface eth33
# 主備上的id必須相同
virtual_router_id 51
# 配置優先級,本示例備機比主機優先級小
priority 100
# VRRP Multicast 廣播周期秒數
advert_int 1
# 定義認證
authentication {
# 認證方式為口令認證
auth_type PASS
# 定義口令
auth_pass 1111
}
# 定義vip,可以設定多個
virtual_ipaddress {
192.168.1.200
}
}
- 備機組態檔:
! Configuration File for keepalived
global_defs {
router_id NG_DEVEL2
}
vrrp_instance NG {
# 標示為備nginx
state BACKUP
# HA檢測埠,查看主機服務器的網卡
interface eth33
# 主備上的id必須相同
virtual_router_id 51
# 配置優先級,本示例備機比主機優先級小
priority 50
# VRRP Multicast 廣播周期秒數
advert_int 1
# 定義認證
authentication {
# 認證方式為口令認證
auth_type PASS
# 定義口令
auth_pass 1111
}
# 定義vip,可以設定多個
virtual_ipaddress {
192.168.1.200
}
}
- 重啟服務:
[root@localhost keepalived-1.2.15]# service keepalived restart
- 可以進行簡單的測驗,當主機宕機后,vip成功漂移到備機
4.結語
Keepalived的使用不止局限于nginx,他的作用是作用于服務器,去檢測服務器來實作單點訪問的高可用,因此可以使用keepalived的場景就十分豐富了,lvs可以使用,也可以通過keepalived來實作MySQL的雙主模式切換,也可以設定多個vip系結在不同的機器上,通過dns輪詢的方式訪問vip,如果發生宕機就把宕機的主機vip漂移到其他主機上,在由文章中的模擬實驗環境搭建可以參考上一篇文章《搭建基于lvs+nginx的負載均衡服務集群》,
keepalived的原理其實很簡單就是通過服務器上的keepalived行程進行相互通信,這個時候需要注意,假設服務器沒有宕機但是服務器的業務報錯了,這個時候沒有實作切換,可以寫相應的運維腳本,通過腳本檢測當前的業務是否出現錯誤,出現錯誤就將keepalived行程kill掉來實作切換,這里就不繼續展開了,
Enjoy GreatSQL ??
關于 GreatSQL
GreatSQL是由萬里資料庫維護的MySQL分支,專注于提升MGR可靠性及性能,支持InnoDB并行查詢特性,是適用于金融級應用的MySQL分支版本,
相關鏈接: GreatSQL社區 Gitee GitHub Bilibili
GreatSQL社區:
捉蟲活動詳情:https://greatsql.cn/thread-97-1-1.html
社區博客有獎征稿詳情:https://greatsql.cn/thread-100-1-1.html

技術交流群:
微信:掃碼添加
GreatSQL社區助手微信好友,發送驗證資訊加群,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/540492.html
標籤:其他
