那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Keepalive基礎知識

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2024-12-19 09:57 ? 次閱讀

Keepalive

1 keepalived介紹

官網:http://keepalived.org/

功能:

基于vrrp協議完成地址流動

為vip地址所在的節點生成ipvs規則(在配置文件中預先定義)

為ipvs集群的各RS做健康狀態檢測

基于腳本調用接口完成腳本中定義的功能,進而影響集群事務,以此支持nginx、haproxy等服務

2 Keepalived 架構

官方文檔:

https://keepalived.org/doc/
http://keepalived.org/documentation.html

83afe822-bc5a-11ef-8732-92fbcf53809c.png

用戶空間核心組件:

vrrp stack:VIP消息通告 虛擬ip

checkers:監測real server(簡單來說 就是監控后端真實服務器的服務)是否存活

system call:實現 vrrp 協議狀態轉換時調用腳本的功能

SMTP:郵件組件(報警郵件)

IPVS wrapper:生成IPVS規則(直接生成ipvsadm)

Netlink Reflector:網絡接口(將虛擬地址ip(vip)地址飄動)

WatchDog:監控進程(整個架構是否有問題)

控制組件:提供keepalived.conf 的解析器,完成Keepalived配置

IO復用器:針對網絡目的而優化的自己的線程抽象

內存管理組件:為某些通用的內存管理功能(例如分配,重新分配,發布等)提供訪問權限

keeplive可以配合ngnix等軟件,反向代理

83befb5a-bc5a-11ef-8732-92fbcf53809c.png

3安裝keepalive

yum  install   keepalived  -y

3.1 編譯安裝 keepalived

yum install gcc curl openssl-devel libnl3-devel net-snmp-devel  -y
# 安裝依賴包環境

https://keepalived.org/download.html
# 官網下載安裝包
wget https://keepalived.org/software/keepalived-2.2.2.tar.gz


tar  xf   keepalived-2.2.2.tar.gz
cd   keepalived-2.2.2/


./configure --prefix=/usr/local/keepalived
make   &&  make  install

自動生成service文件

#生成怕并修改配置文件
mkdir    /etc/keepalived 
cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf 

需要修改配置文件的21行  網卡名稱, 否則起不來

sed  -i   's/eth0/ens33/'       

4 Keepalived 相關文件

軟件包名:keepalived

主程序文件:/usr/sbin/keepalived

主配置文件:/etc/keepalived/keepalived.conf

配置文件示例:/usr/share/doc/keepalived/

Unit File:/lib/systemd/system/keepalived.service

Unit File的環境配置文件:

/etc/sysconfig/keepalived CentOS

4.1配置組成

/etc/keepalived/keepalived.conf 配置組成

GLOBAL CONFIGURATION

Global definitions(全局配置):定義郵件配置,route_id ,vrrp配置,組播地址 等

VRRP CONFIGURATION

VRRP instance(s):定義vrrp協議中的每個vrrp虛擬路由器的規則,基本信息

LVS CONFIGURATION(lvs調度服務器的規則設置)

Virtual server group(s)

Virtual server(s):LVS集群的VS和RS

4.2全局配置

#/etc/keepalived/keepalived.conf 
global_defs {
 notification_email {
 root@localhost
 #keepalived 發生故障切換時郵件發送的目標郵箱,可以按行區分寫多個
 root@localhost
 360601212@qq.com 
 }
 notification_email_from keepalived@localhost  #發郵件的地址
 smtp_server 127.0.0.1   #郵件服務器地址
 smtp_connect_timeout 30   #郵件服務器連接timeout
 router_id   LVS01
 #每個keepalived主機唯一標識,建議使用當前主機名,但多節點重名不影響
 vrrp_skip_check_adv_addr 
 #對所有通告報文都檢查,會比較消耗性能,啟用此配置后,如果收到的通告報文和上一個報文是同一個路由器,則跳過檢查,默認值為全檢查
vrrp_strict 
#嚴格遵守VRRP協議,啟用此項后以下狀況將無法啟動服務:1.無VIP地址 2.配置了單播鄰居 3.在VRRP版本2中有IPv6地址,開啟動此項并且沒有配置vrrp_iptables時會自動開啟iptables防火墻規則,默認導致VIP無法訪問,建議不加此項配置。
 vrrp_garp_interval 0 
 #gratuitous ARP messages 免費ARP報文發送延遲,0表示不延遲
 vrrp_gna_interval 0 
 #unsolicited NA messages (不請自來)消息發送延遲
 vrrp_mcast_group4 225.0.0.18
 #指定組播IP地址范圍:224.0.0.0到239.255.255.255,默認值:224.0.0.18 
 vrrp_iptables    
 #此項和vrrp_strict同時開啟時,則不會添加防火墻規則,如果無配置vrrp_strict項,則無需啟用此項配置
}

4.3配置虛擬路由器

vrrp_instance  {
#為vrrp的實例名,一般為業務名稱
 配置參數
 ......
 }
#配置參數:
state MASTER|BACKUP
#當前節點在此虛擬路由器上的初始狀態,狀態為MASTER或者BACKUP
interface IFACE_NAME 
#綁定為當前虛擬路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一個網卡
virtual_router_id VRID 
#每個虛擬路由器惟一標識,范圍:0-255,每個虛擬路由器此值必須唯一,否則服務無法啟動,同屬一個虛擬路由器的多個keepalived節點必須相同,務必要確認在同一網絡中此值必須唯一
priority 100 
#當前物理節點在此虛擬路由器的優先級,范圍:1-254,值越大優先級越高,每個keepalived主機節點此值不同

advert_int 1
#vrrp通告的時間間隔,默認1s


authentication { 
#認證機制
 auth_type AH|PASS  
 #AH為IPSEC認證(不推薦),PASS為簡單密碼(建議使用)
 auth_pass  
 #預共享密鑰,僅前8位有效,同一個虛擬路由器的多個keepalived節點必須一樣
}
include    /etc/keealived/conf.d/*.conf
virtual_ipaddress { 
#虛擬IP,生產環境可能指定上百個IP地址
 / brd  dev  scope  label 

范例:

[root@localhost keepalived]#vim keepalived.conf
global_defs {
   notification_email {
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1  #郵箱地址寫成自己
   smtp_connect_timeout 30
   router_id lvs_01   #修改成主機名
   vrrp_skip_check_adv_addr
   #vrrp_strict   注釋嚴格模式
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
include   /etc/keepalived/conf.d/*.conf  #添加子配置文件


[root@localhost keepalived]#mkdir  conf.d
[root@localhost conf.d]# vim  conf.d/test.conf
vrrp_instance VI_1 {
    state MASTER
    interface ens33   #修改網卡
    virtual_router_id 51  #路由器id 需要主從保持一致
    priority 100   
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.91.188/24   #設置虛擬ip
    }
}


將配置文件復制到從節點
scp  keepalived.conf    192.168.91.11:/etc/keepalived/
scp  keepalived.conf    192.168.91.11:/etc/conf.d/test.conf


修改配置文件
global_defs {
   notification_email {
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1  
   smtp_connect_timeout 30
   router_id lvs_02  #修改成主機名
   vrrp_skip_check_adv_addr
   #vrrp_strict   注釋嚴格模式
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
include   /etc/keepalived/conf.d/*.conf  #添加子配置文件


vrrp_instance VI_1 {
    state BACKUP       #修改類型為備節點
    interface ens33  
    virtual_router_id 51  #路由器id 需要主從保持一致   不用修改
    priority 80           #優先級調小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.91.188/24   #設置虛擬ip
    }
}

4.3.1各種模式實驗(依托于大實驗成功后)

搶占模式,非搶占模式,延遲搶占模式

[root@localhost keepalived]#tcpdump -i ens33 -nn host 224.0.0.18
#啟動服務可以抓包查看 
[root@localhost ~]#ping 192.168.91.10
#真實服務器ping是可以通的
可以做實驗 一直抓包

#非搶占模式
默認模式 使用的 搶占式
主節點會搶占回來,會造成 兩次網絡動蕩。
#注意:要關閉 VIP搶占,必須將各 keepalived 服務器state配置為BACKUP
#非搶占式
#1主機配置
vrrp_instance VI_1 {
 state BACKUP   #都為BACKUP
 interface ens33
 virtual_router_id 66
 priority 100  #優先級高
 advert_int 1
 nopreempt     #添加此行,都為nopreempt
#2主機配置
vrrp_instance VI_1 {
 state BACKUP     #都為BACKUP
 interface ens33
 virtual_router_id 66
 priority 80    #優先級低
 advert_int 1
 nopreempt  #添加此行,都為nopreempt
 
#延遲搶占
preempt_delay #   #指定搶占延遲時間為#s,默認延遲300s
#注意:需要各keepalived服務器state為BACKUP,并且不要啟用 vrrp_strict
#1主機配置
vrrp_instance VI_1 {
 state BACKUP   #都為BACKUP
 interface eth0
 virtual_router_id 66
 
 priority 100     #優先級高
 advert_int 1 
 preempt_delay 30 #搶占延遲模式,默認延遲300s
 
 #2主機配置
vrrp_instance VI_1 {
 state BACKUP    #都為BACKUP
 interface eth0
 virtual_router_id 66:
 priority 80     #優先級低
 advert_int 1 
 
 priority 80   #優先級高
 advert_int 1 
 preempt_delay 30  #搶占延遲模式,默認延遲300s

4.3.2 單播多播地址

修改多播:

#兩邊都要加主從

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_R1
   vrrp_mcast_group4 234.6.6.6
   #添加此行
   0-127
   128-191
   192-223
   
   224-239
   
}
[root@localhost ~]# tcpdump -i ens33 -nn host 234.6.6.6
#抓包查看查看
[root@localhost keepalived]#systemctl stop keepalived.service
#模擬故障,可以正常切換

修改單播:

#在所有節點vrrp_instance語句塊中設置對方主機的IP,建議設置為專用于對應心跳線網絡的地址,而非
使用業務網絡
unicast_src_ip  #指定發送單播的源IP
unicast_peer {
     #指定接收單播的對方目標主機IP
  ......
}

#主服務器
vrrp_instance VI_1 {
  state MASRER
  interface eth0
  virtual_router_id 66
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    10.0.0.10/24 dev eth0 label eth0:1
  }
  unicast_src_ip 192.168.91.100   #本機IP     master 100   backup101
  unicast_peer{
  192.168.91.101 #指向對方主機IP 如果有多個keepalived,再下面加其它節點的I
  }
}


vrrp_instance VI_2 {
  state BACKUP
  interface eth0
  virtual_router_id 66
  priority 80
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    10.0.0.11/24 dev eth0 label eth0:1
  }
  unicast_src_ip 192.168.91.100   #本機IP
  unicast_peer {
  192.168.91.101 #指向對方主機IP 如果有多個keepalived,再下面加其它節點的IP
  }
}


備服務器
vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 66
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    10.0.0.10/24 dev eth0 label eth0:1
  }
}


vrrp_instance VI_2 {
  state MASTER
  interface eth0
  virtual_router_id 66
  priority 80
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    10.0.0.11/24 dev eth0 label eth0:1
  }
  
}



#復制段
unicast_src_ip 192.168.91.100   
  unicast_peer {
   192.168.91.101
 }

unicast_src_ip 192.168.91.101   
  unicast_peer {
   192.168.91.100  
 }
 
[root@localhost ~]#tcpdump -i ens33 host -nn 192.168.91.100
#在從節點抓包驗證

#復制有問題試試這段
unicast_src_ip 192.168.91.100
    unicast_peer {
    192.168.91.101
    }

4.3.3 通知腳本

當前節點成為主節點時觸發的腳本

notify_master |

當前節點轉為備節點時觸發的腳本

notify_backup |

當前節點轉為“失敗”狀態時觸發的腳本

notify_fault |

通用格式的通知觸發機制,一個腳本可完成以上三種狀態的轉換時的通知

notify |

當停止VRRP時觸發的腳本

notify_stop |
#配置郵箱
[root@localhost opt]#vim /etc/mail.rc 
set from=940132245@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=940132245@qq.com
set smtp-auth-password=
[root@localhost opt]#vim keepalive.sh 
#!/bin/bash
#
contact='940132245@qq.com'
notify() {
 mailsubject="$(hostname) to be $1, vip floating"
 mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
 echo "$mailbody" | mail -s "$mailsubject" $contact:
}
case $1 in

master)
 notify master
 ;;
backup)
 notify backup
 ;;
fault)
 notify fault
 ;;
*)
 echo "Usage: $(basename $0) {master|backup|fault}"
 exit 1
 ;;
esac

[root@localhost opt]#vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    preempt_delay 30
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.16
    }
   notify_master "/opt/keepalive.sh master"
   notify_backup "/opt/keepalive.sh backup"
   notify_fault "/opt/keepalive.sh fault"
}


[root@ka1-centos7 ~]#chmod +x   /etc/keepalived/keepalived.conf
#模擬master故障
[root@ka1-centos7 ~]#killall keepalived  

4.3.4 日志功能

開啟單獨日志功能

[root@localhost opt]#keepalived --help
#查看幫助
[root@localhost opt]#ps aux |grep keep
root      25326  0.0  0.0 118616  1372 ?        Ss   11月20   0:00 /usr/sbin/keepalived -D
root      25327  0.0  0.1 127480  3336 ?        S    11月20   0:01 /usr/sbin/keepalived -D
root      25328  0.0  0.1 129500  2852 ?        S    11月20   0:01 /usr/sbin/keepalived -D
root      26877  0.0  0.0 112676   980 pts/0    S+   00:37   0:00 grep --color=auto keep
[root@localhost opt]#vim /lib/systemd/system/keepalived.service 
EnvironmentFile=-/etc/sysconfig/keepalived
ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS
[root@localhost opt]#vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"

[root@localhost opt]#vim /etc/rsyslog.conf 
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
local6.*                                                /var/log/keepalived.log

[root@localhost opt]#systemctl restart keepalived.service rsyslog.service 
[root@localhost opt]#cat /var/log/keepalived.log
#查看日志文件

83cf7b60-bc5a-11ef-8732-92fbcf53809c.png

實際操作:

LVS + Keepalived 高可用群集

環境

主keepalived:192.168.91.100     lvs
備keepalived:192.168.91.101     lvs
web1:192.168.91.102
web2:192.168.91.103    
vip:192.168.91.188
客戶機訪問
systemctl stop firewalld.service 
setenforce 0
[root@localhost ~]#systemctl stop firewalld.service 
[root@localhost ~]#setenforce 0
[root@localhost ~]#yum install ipvsadm keepalived -y
[root@localhost ~]#modprobe ip_vs
[root@localhost ~]#cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost keepalived]#ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost keepalived]#systemctl start ipvsadm.service
[root@localhost keepalived]#cd /etc/keepalived/
[root@localhost keepalived]#cp keepalived.conf keepalived.conf.bak
#復制一份

[root@localhost keepalived]#vim keepalived.conf
global_defs {
   router_id HA_TEST_R2                  ####本路由器的服務器名稱 HA_TEST_R2
}
vrrp_instance VI_1 {                     ####定義VRRP熱備實列
   state BACKUP                          ####熱備狀態,backup表示輔服務器
   interface ens33                       ####表示承載VIP地址的物理接口
   virtual_router_id 1                   ####虛擬路由器的ID號,每個熱備組保持一致
   priority 99                           ####優先級,優先級越大優先級越高
   advert_int 1                          ####通告間隔秒數(心跳頻率)
   authentication {                      ####認證信息,每個熱備組保持一致
      auth_type PASS                     ####認證類型
      auth_pass 123456                   ####認證密碼
   }
   virtual_ipaddress {                   ####漂移地址(VIP),可以是多個
      192.168.100.10
   }
}




#需要修改項

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   #修改郵箱指向自己(10行)
   smtp_connect_timeout 30
   router_id LVS_01
   #指定服務器名稱主備需要不一樣(12行)
   vrrp_skip_check_adv_addr
   #vrrp_strict
   #14行需要注釋否則服務啟動有問題
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    #指定服務器類型MASTER為主 BACKUP為備(20行)
    interface ens33
    #修改網卡名稱為ens33(21)
    virtual_router_id 10
    #指定虛擬路由器的ID號主備需要一致
    #nopreempt 
    #非搶占模式兩個節點都需要配置去掉注釋
    priority 100
    #設定優先級數字越大優先級越高,準備需要不一樣
    advert_int 1
    #通告間隔(查看是否存活)
    authentication {
        auth_type PASS
        #認證類型
        auth_pass 123456
        #修改驗證密碼,主備需要一樣(27行)
    }
    virtual_ipaddress {
        192.168.91.188
        #指定群集vip地址
    }
}
virtual_server 192.168.91.188 80 {
    delay_loop 6
    #健康間隔時間6秒
    lb_algo rr
    #調度算法輪詢
    lb_kind DR
    #lvs模式為DR 
    persistence_timeout 0
    #連接保持時間改為0 否則 無法體現效果
    protocol TCP
    #采用協議
    
 real_server 192.168.91.103 80 {
 #43行修改地址為真實主機地址
        weight 1
        #45行刪除
        #節點權重
        TCP_CHECK {
            connect_port 80
            #檢查目標端口
            connect_timeout 3
            #連接超時 
            nb_get_retry 3
            #重試次數
            delay_before_retry 3
            #重試間隔時間
        }
    }
 real_server 192.168.91.105 80 {
 #第二個
        weight 1
        TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }



#從服務器配置
systemctl stop firewalld.service 
setenforce 0
[root@localhost ~]#systemctl stop firewalld.service 
[root@localhost ~]#setenforce 0
[root@localhost ~]#yum install ipvsadm keepalived -y
[root@localhost keepalived]#scp keepalived.conf root@192.168.91.101:/etc/keepalived/
#將配置文件拷入 從服務器
[root@localhost keepalived]#systemctl start keepalived.service 
[root@localhost keepalived]#ip a
[root@localhost keepalived]#vim /etc/sysctl.conf 
[root@localhost keepalived]#sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0 




[root@localhost keepalived]#vim keepalived.conf
#備份keepalive
12    router_id LVS_02
20     state BACKUP
23     priority 99
[root@localhost keepalived]#systemctl start keepalived.service 
[root@localhost keepalived]#ipvsadm
[root@localhost keepalived]#ipvsadm -ln
[root@localhost keepalived]#vim /etc/sysctl.conf 
[root@localhost keepalived]#sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

節點模式

[root@localhost ~]#systemctl stop firewalld

[root@localhost ~]#systemctl start httpd
[root@localhost ~]#yum install httpd -y
[root@localhost html]#ifconfig lo:0 192.168.91.188 netmask 255.255.255.255
[root@localhost html]#vim /etc/sysctl.conf 
[root@localhost html]#sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@localhost network-scripts]#route add -host 192.168.91.188 dev lo:0
#設置路由

5 面試重點 keepalived 主上也有188 從188

#模擬腦裂
[root@localhost keepalived]#iptables -A INPUT -s 192.168.91.100 -j REJECT 
#在備份主機中加入此項
[root@localhost keepalived]#ip a
#可以在主備上都發現vip地址

腦裂解釋

什么是腦裂?
在高可用(HA)系統中,當聯系2個節點的“心跳線”斷開時,本來為一整體、動作協調的HA系統,就分裂成為2個獨立的個體。
由于相互失去了聯系,都以為是對方出了故障。兩個節點上的HA軟件像“裂腦人”一樣,爭搶“共享
資源”、爭起“應用服務”,就會發生嚴重后果。共享資源被瓜分、兩邊“服務”都起不來了;或者兩邊
“服務”都起來了,但同時讀寫“共享存儲”,導致數據損壞


都有哪些原因導致腦裂?
高可用服務器對之間心跳線鏈路發生故障,導致無法正常通信。
因心跳線壞了(包括斷了,老化)。
因網卡及相關驅動壞了,ip配置及沖突問題(網卡直連)
因心跳線間連接的設備故障(網卡及交換機)
高可用服務器上開啟了 iptables防火墻阻擋了心跳消息傳輸。
高可用服務器上心跳網卡地址等信息配置不正確,導致發送心跳失敗
其他服務配置不當等原因,如心跳方式不同,心跳廣插沖突、軟件Bug等。
多組keepalive服務器造成   組播沖突    1.換組播地址   2.改成單播          
默認: 
單播:
組播: 
廣播:
A   1 -127
B   128-191
C   192-223
D   224-239          224.0.0.18    


20. 如何解決keepalived腦裂問題?
在實際生產環境中,我們從以下方面防止腦裂:
#同時使用串行電纜和以太網電纜連接、同時使用兩條心跳線路,這樣一條線路斷了,另外一條還是好的,依然能傳送心跳消息
#當檢查腦裂時強行關閉一個心跳節點(這個功能需要特殊設備支持,如stonith、fence)相當于備節點接收不到心跳消息,通過單獨的線路發送關機命令關閉主節點的電源

rsyslog   分割日志

#做好對腦裂的監控報警解決常見方案:
如果開啟防火墻,一定要讓心跳消息通過,一般通過允許IP段的形式解決
可以拉一條以太網網線或者串口線作為主被節點心跳線路的冗余
開發檢測程序通過監控軟件檢測腦裂



keepalived      lvs      負載均衡  反向代理
lvs   高可用
后端服務器的 健康性檢查問題


正向代理作用:    加快訪問速度     可以繞過防火墻
代理的客戶端
我要訪問   google       正向代理服務器             google 服務器



反向代理:   負載均衡     優化資源    
代理的服務端的

客戶端 不需要知道服務端到底是什么樣子的,只要能訪問就行


keepalived  腦裂
vrrp  協議  心跳線收不到

6.實現其它應用的高可用性VRRP Script

keepalived利用 VRRP Script 技術,可以調用外部的輔助腳本進行資源監控,并根據監控的結果實現優先動態調整,從而實現其它應用的高可用性功能

任何軟件組合 形成 高科用的 架構

vrrp script

手動編寫腳本 , 來實現 故障的切換

參考配置文件:

/usr/share/doc/keepalived/keepalived.conf.vrrp.localcheck

6.1VRRP Script配置

分兩步實現:

定義腳本

vrrp_script:自定義資源監控腳本,vrrp實例根據腳本返回值,公共定義,可被多個實例調用,定義在vrrp實例之外的獨立配置塊,一般放在global_defs設置塊之后。通常此腳本用于監控指定應用的狀態。一旦發現應用的狀態異常,則觸發對MASTER節點的權重減至低于SLAVE節點,從而實現 VIP 切換到 SLAVE 節點

vrrp_script  {
 script |  #此腳本返回值為非0時,會觸發下面OPTIONS執行
 OPTIONS 
}



vrrp_script   cxk   {
 script   "/opt/nginx.sh"
 interval  5    每個5s  執行上面的腳本 測試  nginx  是否存活 
  weight   -30   自動減優先級  30 
  fall     2    nginx 測試失敗了   1次失敗不算 需要2次失敗 才認定你真的死了
  rise     2    ngnix  恢復了  測試2次都是正常 才讓你變回主
}


if  systemctl   status  nginx   
then 
else  


調用腳本

track_script:調用vrrp_script定義的腳本去監控資源,定義在VRRP實例之內,調用事先定義的vrrp_script

track_script {
 SCRIPT_NAME_1
 SCRIPT_NAME_2
}

6.2定義VRRP script

vrrp_script  { #定義一個檢測腳本,在global_defs 之外配置
   script | #shell命令或腳本路徑(注意執行權限)   0 不會執行以下操作,   1 就會執行以下操作
   interval  #間隔時間,單位為秒,默認1秒
   timeout  #超時時間
   weight   #默認為0,如果設置此值為負數,當上面腳本返回值為非0時,會將此值與本節點權重相加可以降低本節點權重,即表示fall. 如果是正數,當腳本返回值為0,會將此值與本節點權重相加可以提高本節點權重,即表示 rise.通常使用負值
   fall        #執行腳本連續幾次都失敗,則轉換為失敗,建議設為2以上
   rise   #執行腳本連續幾次都成功,把服務器從失敗標記為成功
   user USERNAME [GROUPNAME] #執行監測腳本的用戶或組   
   init_fail     #設置默認標記為失敗狀態,監測成功之后再轉換為成功狀態
}

實際操作:

[root@localhost keepalived]#vim /etc/keepalived/ng.sh 
#編寫腳本
#!/bin/bash
ng=$(ps -elf |grep nginx |egrep -cv "grep|$$")

if [ $ng -eq 0 ]
then
systemctl stop keealived
fi



killall  -0   nginx
killall  -0   mysql  

[root@localhost keepalived]#chmod +x /etc/keepalived/ng.sh
#權限  

[root@localhost keepalived]#vim /etc/keepalived/keepalived.conf
# 全局配置下配置     
#腳本不要忘記加執行權限
global{


}

vrrp_script check_down {
        script  "/etc/keepalived/ng.sh"   
        interval 1
        weight -30
        fall  3
        rise 2
        timeout 2
}

vrrp_script check_down {
        script  "/etc/keepalived/ng.sh"   #指明腳本的位置   
        interval 1            #每隔1s 執行一次檢測
        weight -30             #如果 腳本執行失敗自動減少優先級30
        fall  3                # 3次不成功才標注為失敗 
        rise 2                 #nginx  重新起來后檢測兩次成功 才真的成功  
        timeout 2               #超時時間  2s 
}



vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.188
    }
    track_script {
     check_down
 }
}


反向代理模塊

upstream  反向代理模塊 在  http模塊下
upstream w1 {
#定義反向代理 組名  w1    
        server 192.168.91.102:80;
        #第一臺代理服務器 
        server 192.168.91.103:80;
        #第二臺代理服務器
        }
        
        
server 模塊下        
        location / {
        proxy_pass http://w1;
        #調用  upstream  模塊
 }



6.3實際操作

83db2e60-bc5a-11ef-8732-92fbcf53809c.png

后端服務器

7-3
7-4
systemctl stop firewalld
setenforce 0
yum  install httpd  -y
echo  7-3 > /var/www/html/index.html
systemctl start httpd



systemctl stop firewalld
setenforce 0
yum  install httpd  -y
echo  7-4 > /var/www/html/index.html
systemctl start httpd

代理服務器

7-1
7-2
systemctl stop firewalld
setenforce 0
yum install  epel-release.noarch -y 
yum install  -y  nginx
systemctl start nginx

vim   /etc/nginx/nginx.conf

 upstream web  {
    server 192.168.91.102;
    server 192.168.91.103;
    }


 location /  {
         proxy_pass  http://web;
        }


scp   /etc/nginx/nginx.conf    192.168.91.101:/etc/nginx/nginx.conf

systemctl stop firewalld
setenforce 0
yum install  epel-release.noarch -y 
yum install  -y   nginx
systemctl start nginx



安裝keepalived 7-1 7-2

7-1   7-2 都要操作
yum install keepalived   -y

7-1
vim /etc/keepalived/keepalived.conf


! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1      # 修改郵箱地址
   smtp_connect_timeout 30  
   router_id LVS01            # 修改名稱
   vrrp_skip_check_adv_addr  
   #vrrp_strict              #關閉嚴格模式
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_down {
        script  "/etc/keepalived/ng.sh"   
        interval 1
        weight -30
        fall  3
        rise 2
        timeout 2
}

vrrp_script check_down {
        script  "/etc/keepalived/ng.sh"   #指明腳本的位置   
        interval 1            #每隔1s 執行一次檢測
        weight -30             #如果 腳本執行失敗自動減少優先級30
        fall  3                # 3次不成功才標注為失敗 
        rise 2                 #nginx  重新起來后檢測兩次成功 才真的成功  
        timeout 2               #超時時間  2s 
}



vrrp_instance VI_1 {
    state MASTER
    interface ens33    #修改網卡的名稱
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
         auth_type PASS
         auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.188   #修改vip 
    }
     track_script {
     check_down
 }
    
}




vim    /etc/keepalived/ng.sh
killall   -0    nginx

chmod +x    /etc/keepalived/ng.sh
scp  /etc/keepalived/keepalived.conf   192.168.91.101://etc/keepalived/
   


7-2  上操作
從節點做修改   192.168.91.101
 /etc/keepalived/keepalived.conf
 
 global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1     
   smtp_connect_timeout 30  
   router_id LVS01          
   vrrp_skip_check_adv_addr  
   #vrrp_strict             
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_down {
        script  "/etc/keepalived/ng.sh"   
        interval 1
        weight -30
        fall  3
        rise 2
        timeout 2
}




vrrp_instance VI_1 {
    state BACKUP    #變成backup
    interface ens33    
    virtual_router_id 51
    priority 80   #調整優先級 
    advert_int 1
    authentication {
         auth_type PASS
         auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.188   #修改vip 
    }
     track_script {
     check_down
 }
    
}

vim    /etc/keepalived/ng.sh
killall   -0    nginx

chmod +x    /etc/keepalived/ng.sh

鏈接:https://www.cnblogs.com/zhj0708/p/18276824

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 架構
    +關注

    關注

    1

    文章

    519

    瀏覽量

    25556
  • Keepalived
    +關注

    關注

    0

    文章

    6

    瀏覽量

    4029

原文標題:Keepalive

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    labview基礎知識

    labview基礎知識labview基礎知識labview基礎知識labview基礎知識
    發表于 03-08 17:56

    EMC基礎知識

    EMC基礎知識EMC基礎知識---華為.pdf (440.74 KB )
    發表于 06-06 04:36

    通信基礎知識教程

    通信基礎知識 1、電信基礎知識2、通信電源技術3、配線設備結構、原理與防護4、防雷基礎知識5、EMC基礎知識6、防腐蝕原理與技術7、產品安
    發表于 03-04 16:48 ?33次下載

    QC基礎知識

    QC基礎知識闡述
    發表于 06-02 10:01 ?154次下載

    軟板基礎知識

    軟板基礎知識
    發表于 06-30 19:22 ?1334次閱讀

    電子電路基礎知識

    電子電路基礎知識 電路基礎知識(一)電路基礎知識(1
    發表于 01-15 09:47 ?23.3w次閱讀

    電池基礎知識(集全版)

    電池基礎知識(集全版)  電池基礎知識
    發表于 11-10 14:19 ?2536次閱讀

    電池隔膜基礎知識

    電池隔膜基礎知識
    發表于 11-17 13:40 ?1183次閱讀

    計算機基礎知識介紹

    計算機基礎知識計算機基礎知識計算機基礎知識
    發表于 12-03 16:13 ?0次下載

    使用Eclipse基礎知識

    使用Eclipse 基礎知識 使用Eclipse 基礎知識 適合初學者學習使用
    發表于 02-26 10:30 ?0次下載

    synplify基礎知識說明

    synplify基礎知識說明
    發表于 06-17 17:40 ?25次下載

    電源管理基礎知識電源管理基礎知識電源管理基礎知識

    電源管理基礎知識電源管理基礎知識電源管理基礎知識
    發表于 09-15 14:36 ?76次下載
    電源管理<b class='flag-5'>基礎知識</b>電源管理<b class='flag-5'>基礎知識</b>電源管理<b class='flag-5'>基礎知識</b>

    電路基礎知識分享

    電路基礎知識分享。
    發表于 03-10 14:38 ?121次下載

    優質LDO基礎知識分享

    本節分享下LDO的基礎知識,主要來源于Ti的文檔《LDO基礎知識》。
    的頭像 發表于 03-26 11:03 ?1437次閱讀

    射頻與微波基礎知識

    射頻與微波基礎知識
    的頭像 發表于 01-16 10:05 ?915次閱讀
    射頻與微波<b class='flag-5'>基礎知識</b>
    威尼斯人娱乐城真人赌博| 里尼的百家乐策略| 百家乐玩法注意事项| 百家乐娱乐城返水| 百家乐怎么玩最保险| 威尼斯人娱乐城提款| 大发888博爱彩| 妈祖棋牌迷| 秦皇岛市| 百家乐官网大轮转| 易胜博百家乐下载| 鑫鼎百家乐的玩法技巧和规则| 大发888真钱官网| 网上百家乐官网可靠| 百家乐官网技巧之微笑心法 | 百家乐官网赚水方法| 做生意店内格局| 温州百家乐的玩法技巧和规则| 尚品棋牌注册| 百家乐官网网络视频游戏| 网络百家乐官网赚| 百家乐顺序| kk娱乐城开户| 如何看百家乐官网的路纸| 百家乐试玩活动| 明溪百家乐的玩法技巧和规则| 德州扑克 技巧| 康马县| 恒利百家乐官网的玩法技巧和规则 | 百家乐官网娱乐城公司| 百家乐官网老是输| ez百家乐技巧| 真人娱乐城排行榜| 赌百家乐官网怎样能赢| 百家乐制胜软件| 澳门赌场分布| 老钱庄百家乐官网的玩法技巧和规则 | 百家乐官网视频无法显示| 百家乐路单网下载| 博彩论坛18good| 百家乐官网二代理解|