環境採集cenots 6.3 64位迷你安裝,因爲安裝前,你需要做一些工作
yum install -y make wget
如果你願意可以更新下系統,更換下yum源.
1.安裝keepalive
官方最新版 keepalived-1.2.7
tar zxvf keepalived-1.2.7.tar.gz cd keepalived-1.2.7
在此之前。請安裝一下一些簡單的工具
yum install -y gcc openssl-devel popt-devel
不然會編譯不成功的。然後:
./configure make && make install cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ chmod +x /etc/init.d/keepalived chkconfig --add keepalived chkconfig keepalived on mkdir /etc/keepalived ln -s /usr/local/sbin/keepalived /usr/sbin/
2.安裝Nginx
tar zxvf nginx-1.2.5.tar.gz cd nginx-1.2.5
安裝一下相關組件.
yum install -y pcre-devel ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module make && make install
3.配置keepalive
兩臺服務器端keepalived.conf內容都爲如下,都設置爲backup,不搶佔,注意修改優先級不同,更詳細的keepalived配置文件說明可以執行man keepalived.conf查看:
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } #監控服務.NGINX mysql等 vrrp_script chk_nginx { script "/home/check_nginx.sh" interval 2 weight 2 } vrrp_instance VI_1 { state BACKUP #主從設置 MASTER interface eth2 #網卡名 virtual_router_id 51 mcast_src_ip 10.0.1.133 #本機IP priority 50 #從機小於主機 advert_int 1 authentication { auth_type PASS auth_pass chtopnet } virtual_ipaddress { 10.0.1.2 #VIP 的IP } track_script { chk_nginx #檢測腳本 } } virtual_server 10.0.1.2 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 10.0.1.132 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.1.133 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
啓動相關服務。我在這兒使用的是nginx ,每個上面開了一個站點,通過IP可以直接訪問的。啓動keepalive後,就可以通過VIP的虛擬IP 10.0.1.2來訪問站點了,測試方法就是 停止任何其中一個站點,看它是否能自動切換到從服務器上。
上面代碼中 nginx的檢測腳本如下 :
#!/bin/bash if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ] then /usr/local/nginx/sbin/nginx sleep 5 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ] then killall keepalived fi fi
在兩臺Web Server上執行realserver.sh腳本,爲lo:0綁定VIP地址10.0.1.2、抑制ARP廣播。
#!/bin/bash #description: Config realserver VIP=10.0.1.2 /etc/rc.d/init.d/functions case "$1" in start) /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/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 sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) /sbin/ifconfig lo:0 down /sbin/route del $VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
分別在主從機上執行 sh realserver.sh start 就可實現負載均衡及高可用集羣了;
keepalive相關參數說明
! Configuration File for keepalived global_defs { notification_email { [email protected] #設置報警郵件地址,可以設置多個,每行一個。 需開啓本機的sendmail服務 } notification_email_from [email protected] #設置郵件的發送地址 smtp_server 127.0.0.1 #設置smtp server地址 smtp_connect_timeout 30 #設置連接smtp server的超時時間 router_id LVS_DEVEL #表示運行keepalived服務器的一個標識。發郵件時顯示在郵件主題的信息 } vrrp_instance VI_1 { state MASTER #指定keepalived的角色,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器 interface eth0 #指定HA監測網絡的接口 virtual_router_id 51 #虛擬路由標識,這個標識是一個數字,同一個vrrp實例使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的 priority 100 #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級 advert_int 1 #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒 authentication { #設置驗證類型和密碼 auth_type PASS #設置驗證類型,主要有PASS和AH兩種 auth_pass 1111 #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信 } virtual_ipaddress { #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個 10.0.0.148 } } virtual_server 10.0.0.148 80 { #設置虛擬服務器,需要指定虛擬IP地址和服務端口,IP與端口之間用空格隔開 delay_loop 6 #設置運行情況檢查時間,單位是秒 lb_algo rr #設置負載調度算法,這裏設置爲rr,即輪詢算法 lb_kind DR #設置LVS實現負載均衡的機制,有NAT、TUN、DR三個模式可選 persistence_timeout 50 #會話保持時間,單位是秒。這個選項對動態網頁是非常有用的,爲集羣系統中的session共享提供了一個很好的解決方案。 #有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,直到超過這個會話的保持時間。 #需要注意的是,這個會話保持時間是最大無響應超時時間,也就是說,用戶在操作動態頁面時,如果50秒內沒有執行任何操作, #那麼接下來的操作會被分發到另外的節點,但是如果用戶一直在操作動態頁面,則不受50秒的時間限制 protocol TCP #指定轉發協議類型,有TCP和UDP兩種 real_server 10.0.0.137 80 { #配置服務節點1,需要指定real server的真實IP地址和端口,IP與端口之間用空格隔開 weight 3 #配置服務節點的權值,權值大小用數字表示,數字越大,權值越高,設置權值大小可以爲不同性能的服務器 #分配不同的負載,可以爲性能高的服務器設置較高的權值,而爲性能較低的服務器設置相對較低的權值,這樣才能合理地利用和分配系統資源 TCP_CHECK { #realserver的狀態檢測設置部分,單位是秒 connect_timeout 10 #表示3秒無響應超時 nb_get_retry 3 #表示重試次數 delay_before_retry 3 #表示重試間隔 connect_port 80 } } real_server 10.0.0.139 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }