Keepalived是一個免費開源的,用C編寫的相似於layer3, 4 & 7交換機制軟件,具有咱們平時說的第3層、第4層和第7層交換機的功能。主要提供loadbalancing(負載均衡)和 high-availability(高可用)功能,負載均衡實現須要依賴Linux的虛擬服務內核模塊(ipvs),而高可用是經過VRRP協議實現多臺機器之間的故障轉移服務。 html
上圖是Keepalived的功能體系結構,大體分兩層:用戶空間(user space)和內核空間(kernel space)。
內核空間:主要包括IPVS(IP虛擬服務器,用於實現網絡服務的負載均衡)和NETLINK(提供高級路由及其餘相關的網絡功能)兩個部份。
用戶空間:linux
Keepalived的全部功能是配置keepalived.conf文件來實現的。ios
su - root yum -y install kernel-devel* yum -y install openssl-* yum -y install popt-devel yum -y install lrzsz yum -y install openssh-clients yum -y install libnl libnl-devel popt
下面介紹安裝keepalived,並將其加入啓動服務。nginx
將keepalived-1.2.15.tar.gz上傳到服務器/usr/local/下。算法
cd /usr/local tar -zxvf keepalived-1.2.15.tar.gz cd keepalived-1.2.15
一、configure執行配置命令shell
./configure --prefix=/usr/local/keepalived
二、編譯make服務器
make網絡
三、安裝make installapp
至此安裝成功,下面爲了使用的方便,安裝成功後作成服務模式,方便啓動和關閉負載均衡
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/sbin/keepalived /usr/sbin/
安裝完成後,進入安裝目錄的etc目錄下,將keepalived相應的配置文件拷貝到系統相應的目錄當中。keepalived啓動時會從/etc/keepalived目錄下查找keepalived.conf配置文件,若是沒有找到則使用默認的配置。/etc/keepalived目錄安裝時默認是沒有安裝的,須要手動建立。配置文件目錄結構以下所示:
shell> tree -l /usr/local/keepalived/etc -- keepalived | |-- keepalived.conf | `-- samples | |-- keepalived.conf.status_code | |-- keepalived.conf.track_interface | |-- keepalived.conf.vrrp | |-- 。。。 |-- rc.d | `-- init.d | `-- keepalived `-- sysconfig `-- keepalived
分別對應系統目錄(忽略samples目錄):
/etc/keepalived/keepalived.conf /etc/rc.d/init.d/keepalived /etc/sysconfig/keepalived
將配置文件拷貝到系統對應的目錄下:
#建立keepalived文件夾
shell> mkdir /etc/keepalived
#將keepalived配置文件拷貝到etc下 shell> cp /usr/local/keepalived/etc/keepalived.conf /etc/keepalived/keepalived.conf
#將init.d文件拷貝到etc下,加入開機啓動項 shell> cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
#添加可執行權限
shell> chmod +x /etc/init.d/keepalived
#將keepalived文件拷貝到etc下,加入網卡配置 shell> cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
設置keepalived服務開機啓動:
shell> chkconfig keepalived on shell> service keepalived start #啓動服務 shell> service keepalived stop #中止服務 shell> service keepalived restart #重啓服務
添加完可查詢系統服務是否存在:
chkconfig --list
另外須要注意的一點是,keepalived啓動時不會檢查配置文件的語法是否正確,因此咱們在編寫配置文件時要特別當心,別寫錯了,不然會出現一些意想不到的現象。
使用service keepalived start
命令啓動服務時,默認會將/etc/sysconfig/keepalived
文件中KEEPALIVED_OPTIONS
參數做爲keepalived
服務啓動時的參數,並從/etc/keepalived/
目錄下加載keepalived.conf配置文件,或用 -f 參數指定配置文件的位置。
# Options for keepalived. See `keepalived --help' output and keepalived(8) and # keepalived.conf(5) man pages for a list of all options. Here are the most # common ones : # # --vrrp -P Only run with VRRP subsystem. # --check -C Only run with Health-checker subsystem. # --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop. # --dont-release-ipvs -I Dont remove IPVS topology on daemon stop. # --dump-conf -d Dump the configuration data. # --log-detail -D Detailed log messages.日誌默認輸出在/var/log/message文件中 # --log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON) # KEEPALIVED_OPTIONS="-D"
運行keepalived --help
能夠查看啓動時的可選參數,這些可選參數均可以配置在/etc/sysconfig/keepalived
文件中的KEEPALIVED_OPTIONS
選項中,做爲服務啓動時的參數。
keepalived正常運行後,會啓動3個進程,其中一個是父進程,負責監控其子進程。一個是vrrp子進程,另一個是checkers子進程。
shell> ps -ef | grep keepalived root 831 1 0 11:22 ? 00:00:00 keepalived -D root 840 831 0 11:22 ? 00:00:00 keepalived -D root 841 831 0 11:22 ? 00:00:00 keepalived -D
chkconfig --add keepalived #添加時必須保證/etc/init.d/keepalived存在 chkconfig keepalived on
添加完可查詢系統服務是否存在:
chkconfig --list
到此keepalived就安裝完成了。
啓動:service keepalived start
中止:service keepalived stop
重啓:service keepalived restart
keepalived服務安裝完成以後,後面的主要工做就是在keepalived.conf文件中配置HA和負載均衡。一個功能比較完整的經常使用的keepalived配置文件,主要包含三塊:全局定義塊、VRRP實例定義塊和虛擬服務器定義塊。全局定義塊是必須的,若是keepalived只用來作ha,虛擬服務器是可選的。下面是一個功能比較完整的配置文件模板:
#全局定義塊 global_defs { # 郵件通知配置 notification_email { email1 email2 } notification_email_from email smtp_server host smtp_connect_timeout num lvs_id string router_id string ## 標識本節點的字條串,一般爲hostname } #VRRP 實例定義塊 vrrp_sync_group string { group { string string } } vrrp_instance string { state MASTER|BACKUP virtual_router_id num interface string mcast_src_ip @IP priority num advert_int num nopreempt smtp_alert lvs_sync_daemon_interface string authentication { auth_type PASS|AH auth_pass string } virtual_ipaddress { # Block limited to 20 IP addresses @IP @IP @IP } } #虛擬服務器定義塊 virtual_server (@IP PORT)|(fwmark num) { delay_loop num lb_algo rr|wrr|lc|wlc|sh|dh|lblc lb_kind NAT|DR|TUN persistence_timeout num protocol TCP|UDP real_server @IP PORT { weight num notify_down /path/script.sh TCP_CHECK { connect_port num connect_timeout num } } real_server @IP PORT { weight num MISC_CHECK { misc_path /path_to_script/script.sh(or misc_path 「/path_to_script/script.sh <arg_list>」) } } real_server @IP PORT { weight num HTTP_GET|SSL_GET { url { # You can add multiple url block path alphanum digest alphanum } connect_port num connect_timeout num nb_get_retry num delay_before_retry num } } }
一、email通知(notification_email、smtp_server、smtp_connect_timeout):用於服務有故障時發送郵件報警,可選項,不建議用。須要系統開啓sendmail服務,建議用第三獨立監控服務,如用nagios全面監控代替。
二、lvs_id:lvs負載均衡器標識,在一個網絡內,它的值應該是惟一的。
三、router_id:用戶標識本節點的名稱,一般爲hostname
四、花括號{}:用來分隔定義塊,必須成對出現。若是寫漏了,keepalived運行時不會獲得預期的結果。因爲定義塊存在嵌套關係,所以很容易遺漏結尾處的花括號,這點須要特別注意。
1.將keepalived日誌輸出到local0:
vi /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"
2.在/etc/rsyslog.conf裏添加:
local0.* /var/log/keepalived.log
3.從新啓動keepalived和rsyslog服務:
service rsyslog restart
service keepalived restart
iptables -A INPUT -d 224.0.0.18 -j ACCEPT /etc/rc.d/init.d/iptables save
一、Keepalived安裝與配置:
https://blog.csdn.net/xyang81/article/details/52554398
二、nginx和keepalived實現nginx高可用
https://blog.csdn.net/u012453843/article/details/69668663
LVS + Keepalived Chinese application doc
Keepalived User Guide
Linux服務器集羣系統(一) – LVS項目介紹
Linux服務器集羣系統(二)–LVS集羣的體系結構
Linux服務器集羣系統(三)–LVS集羣中的IP負載均衡技術
Linux服務器集羣系統(四) – LVS集羣的負載調度
LVS原理詳解及部署之一:ARP原理準備
LVS原理詳解及部署之二:LVS原理詳解(3種工做方式8種調度算法)
LVS原理詳解及部署之三:手動部署LVS
LVS原理詳解及部署之四:keepalived介紹