keepalive+lvs這種方式配置很快捷,一塊網卡就可以搞定,網絡斷掉,機器關掉或者服務停掉都可以切換過去,而且還會發送郵件通知,推薦。
主備機上的軟件包安裝與配置
- Virtual IP:192.168.0.147
- Load Balancer: eth0:192.168.0.46
- Load Balancer: eth0:192.168.0.94
- Real Server 1:192.168.0.64
- Real Server 2:192.168.0.67
- keepalived-1.2.2.tar.gz
- kernel-devel (整合內核中的lvs功能)
- gcc
- make
- openssl-devel
- popt-devel
- libnl-devel
- tar zxf keepalived-1.2.2.tar.gz
- ./configure --with-kernel-dir=/usr/src/kernels/2.6.32-71.el6.x86_64/ --prefix=/usr/local/keepalive (制定內核源碼位置,制定安裝位置便於以後管理)
- make
- make install
- ln -s /usr/local/keepalive/etc/rc.d/init.d/keepalived /etc/init.d/
- ln -s /usr/local/keepalive/etc/keepalived/ /etc/
- ln -s /usr/local/keepalive/sbin/keepalived /usr/sbin/
- ln -s /usr/local/keepalive/etc/sysconfig/keepalived /etc/sysconfig/
- ln -s /usr/local/keepalive/etc/rc.d/init.d/keepalived /etc/init.d/
- vi /etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
- global_defs {
- notification_email {
- root@localhost #接收警報的 email 地址,可以添加多個
- }
- notification_email_from yejkkeepalive@localhost
- smtp_server 127.0.0.1 #使用本機轉發 email
- smtp_connect_timeout 30
- router_id LVS_yejk #load balancer 的標識 ID,用於 email 警報
- }
- vrrp_instance VI_1 {
- state MASTER #備機改爲 BACKUP,此狀態是由 priority 的值來決定的
- interface eth0 #HA 監測網絡接口
- virtual_router_id 82 #主、備機的 virtual_router_id 必須相同
- priority 150 #主機的優先級,備份機改爲 50
- advert_int 1 #主備之間的通告間隔秒數
- authentication { #主備切換時的驗證
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress { #HA 虛擬 ip,可加多個
- 192.168.0.147
- }
- }
- virtual_server 192.168.0.111 80 {
- delay_loop 6 #每隔 6 秒查詢 realserver狀態
- lb_algo rr #lvs 調度算法,這裏使用輪叫
- lb_kind DR #lvs 負載均衡機制,這裏使用直連路由
- # persistence_timeout 50 #同一 IP 的連接 50 秒內被分配到同一臺 realserver
- protocol TCP #用 TCP 協議檢查 realserver 狀態
- real_server 192.168.0.64 80 {
- weight 1
- TCP_CHECK {
- connect_timeout 3
- nb_get_retry 3 #故障重試秒數
- delay_before_retry 3 #重試延遲
- }
- }
- real_server 192.168.0.67 80 {
- weight 1
- TCP_CHECK {
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- }
- }
- }
- 注:備機的 keepalived 配置文件只改state和priority
分別在 realserver 上執行以下命令
- vi /etc/sysctl.conf
- net.ipv4.conf.all.arp_ignore = 1
- net.ipv4.conf.lo.arp_ignore = 1
- net.ipv4.conf.all.arp_announce = 2
- net.ipv4.conf.lo.arp_announce = 2
- sysctl -p
- ifconfig eth0:0 192.168.0.147 netmask 255.255.255.255 up
- route add -host 192.168.0.147 dev eth0:0
- echo `hostname` > /var/www/html/index.html
- service httpd start
測試:
訪問 http://192.168.0.111,看到頁面在兩個 realserver 上切換表示成功!
也可以通過 ipvsadm -Lnc 查看詳細連接情況!