1. 程式人生 > >記一次keepalived雙主DR模式實驗

記一次keepalived雙主DR模式實驗

類型 boot 一次 ML value linux conn org 執行

實驗環境 CENTOS 7.5
DIP1 192.168.119.110
DIP2 192.168.119.111
RIP1 192.168.119.120
RIP2 192.168.119.121
VIP1 192.168.119.130
VIP2 192.168.119.131
雙主模式需要準備兩個VIP

DS上安裝 yum install -y keepalived ipvsadm
修改配置文件 vim /etc/keepalived/keepalived.conf
DS1上

! Configuration File for keepalived

global_defs {                                                               #全局定義部分
#notification_email { }                                                 設置報警郵件地址,可設置多個
#notification_email_from [email protected]                 設置 郵件的發送地址
#smtp_server smtp.163.com                                    設置 smtp server 地址
#smtp_connect_timeout 30                                       設置 連接 smtp server的超時時間
#router_id LVS_DEVEL                                             設置 keepalived 服務器的一個標識。發郵件時顯示在郵件主題中的信息
#vrrp_skip_check_adv_addr
#vrrp_strict
#vrrp_garp_interval 0
#vrrp_gna_interval 0 
        router_id LVS1                                                            #id_唯一標識
}

vrrp_instance VI_1 {                                                   #vrrp 實例部分定義,VI_1自定義名稱
        state MASTER                                                   #指定 keepalived 的角色,必須大寫 可選值:MASTER|BACKUP
        interface ens33                                                   #網卡設置,lvs需要綁定在網卡上,realserver綁定在回環口。區別:lvs對訪問為外,realserver為內不易暴露本機信息
        virtual_router_id 51                                             #虛擬路由標識,是一個數字,同一個vrrp 實例使用唯一的標識,MASTER和BACKUP 的 同一個 vrrp_instance 下 這個標識必須保持一致
        priority 100                                                          #定義優先級,數字越大,優先級越高。
        advert_int 1                                                         #設定 MASTER 與 BACKUP 負載均衡之間同步檢查的時間間隔,單位為秒,兩個節點設置必須一樣
        authentication {                                                   #設置驗證類型和密碼,兩個節點必須一致
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {                                              #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個
                192.168.119.130
        }
}

virtual_server 192.168.119.130 80                            #定義RealServer對應的VIP及服務端口,IP和端口之間用空格隔開
        delay_loop 6                                                      #每隔6秒查詢realserver狀態
        lb_algo rr                                                           #後端調試算法(load balancing algorithm)
        lb_kind DR                                                        #LVS調度類型NAT/DR/TUN
        #persistence_timeout 60                                  同一IP的連接60秒內被分配到同一臺realserver
        protocol TCP                                                    #用TCP協議檢查realserver狀態
        real_server 192.168.119.120 80 {
                weight 1                                                           #權重,最大越高,lvs就越優先訪問
                TCP_CHECK {                                               #keepalived的健康檢查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
                         connect_timeout 10                               #10秒無響應超時
                         retry 3                                                    #重連次數3次
                        delay_before_retry 3                               #重連間隔時間
                        connect_port 80                                      #健康檢查realserver的端口
                 }
        }

        real_server 192.168.119.121 80 {
                weight 1                                                           #權重,最大越高,lvs就越優先訪問
                TCP_CHECK {                                               #keepalived的健康檢查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
                        connect_timeout 10                                #10秒無響應超時
                        retry 3                                                     #重連次數3次
                        delay_before_retry 3                               #重連間隔時間
                        connect_port 80                                      #健康檢查realserver的端口
                }
        }
}

vrrp_instance VI_2 {                                                        #vrrp 實例部分定義,VI_1自定義名稱
        state   BACKUP                                                      #指定 keepalived 的角色,必須大寫 可選值:MASTER|BACKUP 分別表示(主|備)
        interface ens33                                                       #網卡設置,綁定vip的子接口,lvs需要綁定在網卡上,realserver綁定在回環口。區別:lvs對訪問為外,realserver為內不易暴露本機信息
        virtual_router_id 52                                                 #虛擬路由標識,是一個數字,同一個vrrp 實例使用唯一的標識,MASTER和BACKUP 的 同一個 vrrp_instance 下 這個標識必須保持一致
        priority 90                                                                #定義優先級,數字越大,優先級越高。
        advert_int 1                                                             #設定 MASTER 與 BACKUP 負載均衡之間同步檢查的時間間隔,單位為秒,兩個節點設置必須一樣
        authentication {                                                       #設置驗證類型和密碼,兩個節點必須一致
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {                                                 #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個
                192.168.119.131

        }
}

virtual_server 192.168.119.131 80 {                             #定義RealServer對應的VIP及服務端口,IP和端口之間用空格隔開
        delay_loop 6                                                          #每隔6秒查詢realserver狀態
        lb_algo rr                                                                #後端調試算法(load balancing algorithm)
        lb_kind DR                                                             #LVS調度類型NAT/DR/TUN
        #persistence_timeout 60                                       #同一IP的連接60秒內被分配到同一臺realserver
        protocol TCP                                                          #用TCP協議檢查realserver狀態
        real_server 192.168.119.120 80 {
                weight 1                                                          #權重,最大越高,lvs就越優先訪問
                TCP_CHECK {                                              #keepalived的健康檢查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
                        connect_timeout 10                               #10秒無響應超時
                        retry 3                                                    #重連次數3次
                        delay_before_retry 3                              #重連間隔時間
                        connect_port 80                                     #健康檢查realserver的端口
                }
        }
        real_server 192.168.119.121 80 {
                weight 1                                                          #權重,最大越高,lvs就越優先訪問
                TCP_CHECK {                                               #keepalived的健康檢查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
                        connect_timeout 10                                #10秒無響應超時
                        retry 3                                                     #重連次數3次
                        delay_before_retry 3                               #重連間隔時間
                        connect_port 80                                      #健康檢查realserver的端口
                }
        }
}

DS2上

! Configuration File for keepalived

global_defs {
        router_id LVS2 
}

vrrp_instance VI_1 {     
        state BACKUP         
        interface ens33      
        virtual_router_id 51 
        priority 90          
        advert_int 1         
        authentication {     
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {  
                192.168.119.130
        }
}

virtual_server 192.168.119.130 80 { 
        delay_loop 6                    
        lb_algo rr                      
        lb_kind DR                      
        #persistence_timeout 60         
        protocol TCP                    
        real_server 192.168.119.120 80 {
                weight 1                    
                TCP_CHECK {                 
                        connect_timeout 10      
                        retry 3                 
                        delay_before_retry 3    
                        connect_port 80         
                }
        }
        real_server 192.168.119.121 80 {
                weight 1                    
                TCP_CHECK {                 
                        connect_timeout 10      
                        retry 3                 
                        delay_before_retry 3    
                        connect_port 80         
                }
        }
}

vrrp_instance VI_2 {     
        state MASTER         
        interface ens33      
        virtual_router_id 52 
        priority 100         
        advert_int 1         
        authentication {     
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {  
                192.168.119.131
        }
}

virtual_server 192.168.119.131 80 {  
        delay_loop 6                     
        lb_algo rr                       
        lb_kind DR                       
        #persistence_timeout 60          
        protocol TCP                     
        real_server 192.168.119.120 80 {
                weight 1                     
                TCP_CHECK {                  
                        connect_timeout 10       
                        retry 3                  
                        delay_before_retry 3     
                        connect_port 80          
                }
        }
        real_server 192.168.119.121 80 {
                weight 1                     
                TCP_CHECK {                  
                        connect_timeout 10       
                        retry 3                  
                        delay_before_retry 3     
                        connect_port 80          
                }
        }
}



後端RS上的配置

限制ARP響應請求
echo net.ipv4.conf.lo.arp_ignore = 1 >> /etc/sysctl.conf
echo net.ipv4.conf.all.arp_ignore = 1 >> /etc/sysctl.conf
限制arp發送請求
echo net.ipv4.conf.lo.arp_announce = 2 >> /etc/sysctl.conf
echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf
sysctl -p


回環綁定vip
echo DEVICE=lo:0 >> /etc/sysconfig/network-scripts/ifcfg-lo:0
echo IPADDR=192.168.119.130 >> /etc/sysconfig/network-scripts/ifcfg-lo:0
echo NETMASK=255.255.255.255 >> /etc/sysconfig/network-scripts/ifcfg-lo:0
echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-lo:0
echo NAME=lo:0 >> /etc/sysconfig/network-scripts/ifcfg-lo:0

echo DEVICE=lo:1 >> /etc/sysconfig/network-scripts/ifcfg-lo:1
echo IPADDR=192.168.119.131 >> /etc/sysconfig/network-scripts/ifcfg-lo:1
echo NETMASK=255.255.255.255 >> /etc/sysconfig/network-scripts/ifcfg-lo:1
echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-lo:1
echo NAME=lo:1 >> /etc/sysconfig/network-scripts/ifcfg-lo:1

systemctl restart network

添加主機路由
chmod +x /etc/rc.d/rc.local(centos7默認沒有x權限,重啟os後不會執行內容)
echo route add -host 192.168.119.130 dev lo:0 >> /etc/rc.d/rc.local
echo route add -host 192.168.119.131 dev lo:1 >> /etc/rc.d/rc.local

安裝nginx
yum -y install gcc gcc-c++
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

wget http://tengine.taobao.org/download/tengine-2.1.2.tar.gz

tar -zxvf tengine-2.1.2.tar.gz

cd tengine-2.1.2

groupadd -r -g 1000 nginx
useradd -r -g nginx -u 1000 -s /bin/false -M nginx

./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/data/weblogs/nginx/error/error.log \
--http-log-path=/data/weblogs/nginx/access/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx

chown -R nginx: /etc/nginx/
chown -R nginx: /usr/local/nginx
chown -R nginx: /data/weblogs/nginx
chmod u+s /usr/local/sbin/nginx

RS1上 echo web1 > /usr/local/nginx/html/index.html
RS2上 echo web2 > /usr/local/nginx/html/index.html


防火墻設置
關閉selinux setenforce 0
vim /etc/selinux/config -->> SELINUX=disabled
開啟80端口
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

註意事項 DS上添加vrrp協議,否則會出現vip漂移
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.119.0/24" destination address="224.0.0.18" protocol value="vrrp" accept"

記一次keepalived雙主DR模式實驗