linux 高可用----keepalived+lvs
什么是高可用?
HA(high availability)即高可用性;就是在高可用集群中發生單點故障時,能夠自動轉移資源并切換服務,以保證服務一直在線的機制。
LVS
LVS:(linux virtual server)即linux虛擬服務器;開源項目,主要達到負載均衡的作用。
LVS組成
LVS 由2部分程序組成,包括 ipvs 和 ipvsadm
ipvsadm包安裝
╭─root@localhost.localdomain ~ ╰─? yum install ipvsadm -y負載均衡比較
LVS:
Ngnix:
HAProxy:
LVS三種工作模式
NAT模式
調度器環境:
##連接外部的網卡: 192.168.31.100 255.255.255.0 192.168.31.1 ##連接real_server的網卡: 172.16.100.1 255.255.255.0real_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,這種選舉并進行角色的過程非常快,因此也就保證了服務的持續可用性
keepalived結構體系
安裝keepalived
╭─root@localhost.localdomain ~ ╰─? yum install keepalived -ykeepalived主配置文件
╭─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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到做事怎么都做不好
- 下一篇: 梦到山林着火是什么意思