目前需要做一個項目需要高可用 項目采用Keepalived+VIP(虛擬IP)進行一個故障轉移。Keepalived和VIP的相關知識就不在這里廢話介紹了 介紹一下當前的高可用環境實現思路。
目前有三台服務器。分別為三台服務器上部署keepalived 進行故障轉移,當用戶訪問虛擬IP時,其keepalived會判斷其優先級,主要根據監控的相關的服務端口 如
nginx 監聽的端口 80
數據庫服務端口 3306
php-fpm的9000端口
將優先級的進行虛擬IP(VIP)的地址漂移。使用ip a 可以查看到其綁定的虛擬IP在哪一台服務器上,或通過相關日志進行查看。
服務器相關IP配置
資源 | IP |
服務器1 | 192.168.1.101 |
服務器1 | 192.168.1.102 |
服務器1 | 192.168.1.103 |
步驟一 先從部署或交付那邊拿到配置好的虛擬IP 如:192.168.1.86
步驟二 啟動關鍵的端口服務 如 ngngx php-fpm mysql 使用lsof -i:80 命令進行查看
步驟三 修改或新增一個keepalived的配置 如 keepalived.conf
下面貼出我的配置文件
! Configuration File for keepalived
global_defs {
notification_email {
yuluolishang@qq.com
}
notification_email_from yuluolishang@yisa.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
script_user root
enable_script_security
vrrp_skip_check_adv_addr
#vrrp_strict
#vrrp_iptables
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_mysql_port {
script "</dev/tcp/127.0.0.1/3306" # connects and exits
interval 1 # check every second
weight -20 # default priority: -20 if connect fails
}
vrrp_script chk_php_port {
script "</dev/tcp/127.0.0.1/9000" # connects and exits
interval 1 # check every second
weight -20 # default priority: -20 if connect fails
}
vrrp_script chk_nginx_port {
script "</dev/tcp/127.0.0.1/80" # connects and exits
interval 1 # check every second
weight -20 # default priority: -20 if connect fails
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass Feipeng$
}
unicast_src_ip 192.168.1.101
unicast_peer {
192.168.1.102
192.168.1.103
}
virtual_ipaddress {
192.168.1.86/22
}
track_script {
chk_mysql_port
chk_php_port
chk_nginx_port
}
}
配置相關說明 :
state BACKUP 三台服務器都被BACKUP 角色
interface etho 這個為該服務器的網卡名稱
virtual_router_id 虛擬路由 這個三台服務器為同一個 必須同一個
priority 100 優先級 三台服務器需一次填寫100 99 98
authentication 認證密碼 三台服務器密碼必須設置相同 否則故障轉移不成功。
unicast_src_ip 廣播地址 即本機IP地址
unicast_peer 廣播接收地址 即另外兩台服務器的IP地址
virtual_ipaddress 虛擬IP(VIP)地址 后面的/22 代表子網掩碼 一般與三台服務器的真實IP在同一網段中。
track_script 里面為各監控的端口腳本名稱 一行寫一個檢測。
步驟四 啟動keepalived 進程 啟動故障轉移 本keepalived 為離線部署 離線包目錄結構如下:
啟動命令 /keepalived/sbin/keepalived -f /keepalived/etc/keepalived/keepalived.conf
/keepalived/sbin/keepalived -f /keepalived/etc/keepalived/keepalived.conf
步驟五 驗證啟動
查看keepalived 進程是否有啟動 輸入 ps aux|grep keepalived
ps aux|grep keepalived
會輸出如下:
ps aux|grep keepalived
root 182037 0.0 0.0 44096 888 ? Ss 17:13 0:00 /keepalived/sbin/keepalived -f /keepalive/etc/keepalived/keepalived.conf
root 182038 0.1 0.0 44096 1308 ? S 17:13 0:00 /keepalived/sbin/keepalived -f /keepalive/etc/keepalived/keepalived.conf
root 182343 0.0 0.0 112812 968 pts/0 S+ 17:13 0:00 grep --color=auto keepalive
輸入ip a 查看當前漂移VIP 綁定情況
步驟六 模擬故障 比如說nginx 掛掉了
輸入命令 pkill nginx
然后輸入lsof -i:80 此時可以得出 nginx 服務被停掉了
pkill nginx
lsof -i:80
此時 剛才綁定的VIP的所在服務器上 此VIP不在其服務器了,而是跑到另一台服務器上綁定了VIP虛擬IP
至此 keepalived 故障轉移部署成功!!
坑:
1.同一組故障轉移集群 virtual_router_id 虛擬路由IP 必須一樣 要不然部署不成功。
2.interface etho 網卡名稱一定要填寫當前服務器IP的所在網卡名稱
3.若同一個局域網內,有多個keepalived 實例,keepalived兩台機器同時出現vip問題!keepalived默認為廣播,應改為單播