日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 高可用----keepalived+lvs

發布時間:2023/11/29 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 高可用----keepalived+lvs 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是高可用?

HA(high availability)即高可用性;就是在高可用集群中發生單點故障時,能夠自動轉移資源并切換服務,以保證服務一直在線的機制。

LVS

LVS:(linux virtual server)即linux虛擬服務器;開源項目,主要達到負載均衡的作用。

LVS組成

LVS 由2部分程序組成,包括 ipvs 和 ipvsadm

  • ipvs(ip virtual server):一段代碼工作在內核空間,叫ipvs,是真正生效實現調度的代碼。
  • ipvsadm:另外一段是工作在用戶空間,叫ipvsadm,負責為ipvs內核框架編寫規則,定義誰是集群服務,而誰是后端真實的服務器(Real Server)
  • ipvsadm包安裝

    ╭─root@localhost.localdomain ~ ╰─? yum install ipvsadm -y

    負載均衡比較

    LVS:

  • 抗負載能力強。抗負載能力強、性能高,能達到F5硬件的60%;對內存和cpu資源消耗比較低
  • 工作在網絡4層,通過vrrp協議轉發(僅作分發之用),具體的流量由linux內核處理,因此沒有流量的產生。
  • 穩定性、可靠性好,自身有完美的熱備方案;(如:LVS+Keepalived)
  • 應用范圍比較廣,可以對所有應用做負載均衡;
  • 不支持正則處理,不能做動靜分離。
  • 支持負載均衡算法:rr(輪循)、wrr(帶權輪循)、lc(最小連接)、wlc(權重最小連接)
  • 配置 復雜,對網絡依賴比較大,穩定性很高。
  • Ngnix:

  • 工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構;
  • Nginx對網絡的依賴比較小,理論上能ping通就就能進行負載功能;
  • Nginx安裝和配置比較簡單,測試起來比較方便;
  • 也可以承擔高的負載壓力且穩定,一般能支撐超過1萬次的并發;
  • 對后端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。
  • Nginx對請求的異步處理可以幫助節點服務器減輕負載;
  • Nginx僅能支持http、https和Email協議,這樣就在適用范圍較小。
  • 不支持Session的直接保持,但能通過ip_hash來解決。、對Big request header的支持不是很好,
  • 支持負載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權輪循)、Ip-hash(Ip哈希)
  • Nginx還能做Web服務器即Cache功能。
  • HAProxy:

  • 支持兩種代理模式:TCP(四層)和HTTP(七層),支持虛擬主機;
  • 能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作
  • 支持url檢測后端的服務器出問題的檢測會有很好的幫助。
  • 更多的負載均衡策略比如:動態加權輪循(Dynamic Round Robin),加權源地址哈希(Weighted Source Hash),加權URL哈希和加權參數哈希(Weighted Parameter Hash)已經實現
  • 單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度。
  • HAProxy可以對Mysql進行負載均衡,對后端的DB節點進行檢測和負載均衡。
  • 支持負載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權輪循)、source(原地址保持)、RI(請求URL)、rdp-cookie(根據cookie)
  • 不能做Web服務器即Cache
  • LVS三種工作模式

  • NAT模式
  • 路由模式
  • 隧道模式
  • NAT模式

    調度器環境:

    ##連接外部的網卡: 192.168.31.100 255.255.255.0 192.168.31.1 ##連接real_server的網卡: 172.16.100.1 255.255.255.0

    real_server1環境:

    172.16.100.2 255.255.255.0 172.16.100.1 #網關指向調度器

    real_server2環境:

    172.16.100.3 255.255.255.0 172.16.100.1 #網關指向調度器

    調度器配置:

    ╭─root@localhost.localdomain ~ ╰─? cat /proc/sys/net/ipv4/ip_forward 0 ╭─root@localhost.localdomain ~ ╰─? echo 1 > /proc/sys/net/ipv4/ip_forward或者vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #調度器配置命令 ipvsadm -A -t 192.168.31.100:80 -s rr ipvsadm -a -t 192.168.31.100:80 -r 192.168.250.2 -m ipvsadm -a -t 192.168.31.100:80 -r 192.168.250.3 -m

    查看配置LVS內容:

    ╭─root@localhost.localdomain ~ ╰─? ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.137.3:80 rr-> 172.16.100.10:80 Masq 1 0 2 -> 172.16.100.20:80 Masq 1 0 2

    特點:

    • 調度器會成為性能上的瓶頸
    • 可以不同網段

    路由模式

    DR模式環境:direct_server:192.168.254.17real_server:192.168.254.18real_server:192.168.254.19#vip為虛擬服務ipvip:192.168.254.250 .................................................................................................................... 調度器: direct_server:ipvsadm -C #清除配置信息#添加對外提供的服務ipipvsadm -A -t 192.168.254.250:80 -s rr #-A為ADD -t為tcp -s rr為設置算法為輪叫算法#添加2臺real_server主機ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.18:80 -g #-a為add -t為tcp -r為realserver -g為DR路由模式ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.19:80 -g #-a為add -t為tcp -r為realserver -g為DR路由模式#配置網卡的子網口為vip,ip地址為192.168.254.250ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up#添加路由(訪問192.168.254.250都走ens33:0這個網卡)route add -host 192.168.254.250 dev ens33:0 ........................................................................................................................ real_server端:real_server:#在回環地址的子網口上配置服務ip(vip)ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up #添加靜態路由指定lo:0端口route add -host 192.168.254.250 dev lo:0echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2">/proc/sys/net/ipv4/conf/lo/arp_announceecho "1">/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2">/proc/sys/net/ipv4/conf/all/arp_announceecho "0">/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0">/proc/sys/net/ipv4/conf/lo/arp_announceecho "0">/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0">/proc/sys/net/ipv4/conf/all/arp_announcearp_ignore:定義接收到ARP請求時的響應級別 0:默認,只用本地配置的有響應地址都給予響應 1:僅僅在目標IP是本地地址,并且是配置在請求進來的接口上的時候才給予響應(僅在請求的目標地址配置請求到達的接口上的時候,才給予響應)arp_announce:定義將自己的地址向外通告時的級別 0:默認,表示使用配置在任何接口的任何地址向外通告 1:盡量僅向目標網絡通告與其網絡匹配的地址 2:僅向與本地接口上地址匹配的網絡進行通告

    拓展:python 遠程布置LVS路由模式代碼:

    import paramiko vip = '192.168.254.250' ds = '192.168.254.13' rs1 = '192.168.254.11' rs2 = '192.168.254.12' ds_cmd = ''' ipvsadm -C; ipvsadm -A -t {vip}:80 -s wrr; ipvsadm -a -t {vip}:80 -r {rs1}:80 -w 1 -g; ipvsadm -a -t {vip}:80 -r {rs2}:80 -w 2 -g; ifconfig ens33:0 {vip} broadcast {vip} netmask 255.255.255.255 up; route add -host {vip} dev ens33:0; '''.format(vip=vip, rs1=rs1, rs2=rs2)rs1_cmd = ''' ifconfig lo:0 {vip} broadcast {vip} netmask 255.255.255.255 up; route add -host {vip} dev lo:0; echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore; echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce; echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore; echo "2">/proc/sys/net/ipv4/conf/all/arp_announce; service httpd restart '''.format(vip=vip) rs2_cmd = ''' ifconfig lo:0 {vip} broadcast {vip} netmask 255.255.255.255 up; route add -host {vip} dev lo:0; echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore; echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce; echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore; echo "2">/proc/sys/net/ipv4/conf/all/arp_announce; service httpd restart '''.format(vip=vip)ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())def direct_server():ssh.connect('{ds}'.format(ds=ds), 22, 'root', 'root',timeout=3)stdin, stdout, stderr = ssh.exec_command(ds_cmd)print(stderr.read().decode('utf-8'))print(stdout.read().decode('utf-8'))print('dicret_server配置完成!!!')def real_server1():ssh.connect('{rs1}'.format(rs1=rs1), 22, 'root', 'root', timeout=3)stdin, stdout, stderr = ssh.exec_command(rs1_cmd)print(stderr.read().decode('utf-8'))print(stdout.read().decode('utf-8'))print('real_server1配置完成!!!')def real_server2():ssh.connect('{rs2}'.format(rs2=rs2), 22, 'root', 'root', timeout=3)stdin, stdout, stderr = ssh.exec_command(rs2_cmd)print(stderr.read().decode('utf-8'))print(stdout.read().decode('utf-8'))print('real_server2配置完成!!!')def main():direct_server()real_server1()real_server2()ssh.close()if __name__ == '__main__':main()

    keepalived

    vrrp協議

    VRRP協議是一種主備模式的協議,通過VRRP可以在網絡發生故障時透明地進行設備切換不影響主機間的數據通信,這其中涉及兩個概念:物理路由器和虛擬路由器

    VRRP可以將兩臺或者多臺物理路由器設備虛擬成一個虛擬路由器,這個虛擬路由器通過虛擬IP(一個或多個)對外提供服務,

    在虛擬路由器內部,是多個物理路由器協同工作,同一時間只有一臺物理路由器對外提供服務,這臺物理路由器被稱之為主路由器(處于master狀態角色)。它擁有對外提供的虛擬ip,提供各種網絡功能,比如arp請、icmp、數據轉發等,

    其他物理路由器不擁有對外提供服務的虛擬ip,也不提供對外網絡功能,僅僅接收master的vrrp狀態通告信息,這些路由器被統稱為備份路由器(處于backup角色)。

    在一個虛擬路由器中,只有處于master角色的路由器會一直發送vrrp數據包,處于backup角色的路由器只接受master發過來的報文信息,用來監控master運行狀態,因此,不會發生master搶占的現象,除非它的優先級更高,

    當master不可用時,backup也就無法收到master發過來的報文信息,于是就認定master出現故障,接著多臺backup就會進行選舉,優先級最高的backup將成為新的master,這種選舉并進行角色的過程非???#xff0c;因此也就保證了服務的持續可用性

    keepalived結構體系

    安裝keepalived

    ╭─root@localhost.localdomain ~ ╰─? yum install keepalived -y

    keepalived主配置文件

    ╭─root@localhost.localdomain ~ ╰─? vim /etc/keepalived/keepalived.conf

    主配置文件分三部分:

    • 全局配置
    • VRRP配置
    • LVS配置

    拓展1:基于mysql或者mariadb數據庫的高可用如下配置

    ! Configuration File for keepalivedglobal_defs {notification_email {} }vrrp_script chk_mysql { #check_mysql是為執行腳本計劃起的名字script "/root/sh/check_mysql.sh" #指定要執行腳本的路徑interval 2 #腳本執行間隔,每2s檢測一次 }vrrp_instance HA_1 {state BACKUPinterface ens33virtual_router_id 151priority 100advert_int 1nopreemptauthentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.254.250/24}track_script { #跟蹤腳本計劃( chk_mysql)chk_mysql} }

    腳本文件內容:

    ╭─root@localhost.localdomain ~/sh ╰─? vim check_mysql.sh ................................................... #!/bin/bash service mariadb status if [ $? -nq 0 ];thenservice keepalived stop ..................................................

    拓展2:基于web網站的負載均衡高可用如下配置

    keepalived:yum install keepalivedvim /etc/keepalived/keepalived.conf! Configuration File for keepalived #全局配置 global_defs {notification_email {#收件人地址}#郵件服務器 } VRRP配置DS1 vrrp_instance VI_1 {state MASTER #角色類型MASTER|BACKUPinterface ens33 #網卡名稱virtual_router_id 51 #虛擬路由id(需要與BACKUP一致)priority 100 #優先級advert_int 1 #沒1秒檢查一次#nopreempt #非搶占模式authentication {auth_type PASS #認證類型 主備之間必須一樣auth_pass 1111 #認證密碼 主備之間必須一樣}virtual_ipaddress {192.168.254.250/24 #虛擬ip(vip)} }#LVS配置 virtual_server 192.168.254.250 80 { delay_loop 3 #健康檢查時間間隔lb_algo rr #負載均衡調度算法 lb_kind DR #負載均衡轉發規則 protocol TCP #協議real_server 192.168.254.18 80 { #要監控的real_server的ip和端口號weight 1 #權重TCP_CHECK { #基于tcp協議的檢查connect_timeout 3 #連接時間超時retry 3 #重連次數delay_before_retry 3 #重連間隔時間}}real_server 192.168.254.19 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3} } }

    轉載于:https://www.cnblogs.com/du-z/p/11120825.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的linux 高可用----keepalived+lvs的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。