1. 程式人生 > >2、高效能web架構之DNS負載均衡(LVS-DR+keepalived實現DNS和web輪詢)

2、高效能web架構之DNS負載均衡(LVS-DR+keepalived實現DNS和web輪詢)

LVS-DR+keepalived+DNS實現DNS高可用性:

一、介紹:

結合上一章的DNS主從複製,按現在大多數公司的需求是滿足不了的。DNS配置雖然簡單易用,但是它在網路中起到了主導作用。

如果客戶端設定的這臺首選DNS伺服器剛好宕機,即使客戶端還設定了備用DNS。還是會影響使用者的上網速度,因為客戶端使用首選DNS去解析,當首選DNS解析不了時,它會等待3秒才會去使用備用DNS。所以這裡我要通過LVS-DR+keepalived實現DNS高可用性,也順便把web的輪詢也一起實現了:

LVS-DR+keepalived特點:

LVS負載均衡採用直連路由工作模式(LVS-DR),採用半開放的網路結構,結構與IP隧道模式類似,但各節點並不是分散在各地,而是與排程器位於同一個物理網路,負載調節器與各節點伺服器通過本地網路連線,不需要建立專用的IP隧道。

Keepalived採用VRRP熱備份協議,以軟體的方式實現服務機的多機熱備功能。其主要用來提供故障切換和健康檢查功能——判斷LVS負載排程器、節點伺服器的可能性,及時隔離並替換為新的伺服器,當故障主機恢復後將其重新加入群集。

  • 部署:

1、網路拓撲:

2、環境描述:

系統描述

IP地址

作用

LVS-master

192.168.10.101

主備負載均衡器(同時做web和DNS排程)

LVS-backup

192.168.10.102

DNS-master

192.168.10.103

vip:192.168.10.66(主處理DNS輪詢請求)

DNS-backup

192.168.10.104

Web節點組

192.168.10.105-106

vip:192.168.10.88(主處理web輪詢請求)

環境準備(6臺CentOS7.2系統):

3、關閉防火牆\關閉SeLinux\設定時間同步(所有機器上操作

):

systemctl stop firewalld.service && systemctl disable firewalld.service

sed -i "s/SELINUX=enforcing/SELINUX=disabled/"   /etc/selinux/config

setenforce 0

yum -y install wget net-tools ntp ntpdate lrzsz

systemctl restart ntpdate.service ntpd.service && systemctl enable ntpd.service ntpdate.service

4、配置主機對映/etc/hosts(下面是在LVS-master和LVS-backup操作):

echo 192.168.10.101  linux-node1.server.com  >> /etc/hosts

echo 192.168.10.102  linux-node2.server.com  >> /etc/hosts

echo 192.168.10.103  linux-node3.server.com  >> /etc/hosts

echo 192.168.10.104  linux-node4.server.com  >> /etc/hosts

echo 192.168.10.105  linux-node5.server.com  >> /etc/hosts

echo 192.168.10.106  linux-node6.server.com  >> /etc/hosts

echo nameserver 192.168.10.66 >> /etc/resolv.conf //這裡的DNS設定只是臨時的,如果是生產環境,一定要在配置檔案設定DNS

echo nameserver 192.168.10.103 >> /etc/resolv.conf

echo nameserver 192.168.10.104 >> /etc/resolv.conf

hostnamectl --static set-hostname linux-node1.server.com

bash

  1. 設定虛擬網絡卡(下面是在LVS-master和LVS-backup操作):

[[email protected] ~]# cd /etc/sysconfig/network-scripts/

[[email protected] network-scripts]# cp ifcfg-eno16777736 ifcfg-eno16777736:0

[[email protected] network-scripts]# cp ifcfg-eno16777736 ifcfg-eno16777736:1

[[email protected] network-scripts]# cat ifcfg-eno16777736:0

TYPE=Ethernet

BOOTPROTO=static

NAME=eno16777736:0

UUID=682b8dd6-92e8-4d7b-aec2-f6bbc85533f8

DEVICE=eno16777736:0

ONBOOT=yes

IPADDR=192.168.10.66

NETMASK=255.255.255.0

[[email protected] network-scripts]# cat ifcfg-eno16777736:1

TYPE=Ethernet

BOOTPROTO=static

NAME=eno16777736:0

UUID=682b8dd6-92e8-4d7b-aec2-f6bbc85533f8

DEVICE=eno16777736:0

ONBOOT=yes

IPADDR=192.168.10.88

NETMASK=255.255.255.0

[[email protected] network-scripts]# systemctl restart network

[[email protected] network-scripts]# ip add

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:f9:b7:25 brd ff:ff:ff:ff:ff:ff

    inet 192.168.10.101/24 brd 192.168.10.255 scope global eno16777736

       valid_lft forever preferred_lft forever

    inet 192.168.10.66/24 brd 192.168.10.255 scope global secondary eno16777736:0

       valid_lft forever preferred_lft forever

    inet6 fe80::20c:29ff:fef9:b725/64 scope link

       valid_lft forever preferred_lft forever

[[email protected] network-scripts]# tail -3 /etc/sysctl.conf

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.eno16777736.send_redirects = 0

[[email protected] ~]# cd /etc/sysconfig/network-scripts/

[[email protected] network-scripts]# cp ifcfg-eno16777736 ifcfg-eno16777736:0

[[email protected] network-scripts]# cp ifcfg-eno16777736 ifcfg-eno16777736:1

[[email protected] network-scripts]# cat ifcfg-eno16777736:0

TYPE=Ethernet

BOOTPROTO=static

NAME=eno16777736:0

UUID=682b8dd6-92e8-4d7b-aec2-f6bbc85533f8

DEVICE=eno16777736:0

ONBOOT=yes

IPADDR=192.168.10.66

NETMASK=255.255.255.0

[[email protected] network-scripts]# cat ifcfg-eno16777736:1

TYPE=Ethernet

BOOTPROTO=static

NAME=eno16777736:1

UUID=682b8dd6-92e8-4d7b-aec2-f6bbc85533f8

DEVICE=eno16777736:1

ONBOOT=yes

IPADDR=192.168.10.88

NETMASK=255.255.255.0

[[email protected] network-scripts]#  systemctl restart network

[[email protected] network-scripts]# ip add

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:f9:b7:25 brd ff:ff:ff:ff:ff:ff

    inet 192.168.10.101/24 brd 192.168.10.255 scope global eno16777736

       valid_lft forever preferred_lft forever

    inet 192.168.10.66/24 brd 192.168.10.255 scope global secondary eno16777736:0

       valid_lft forever preferred_lft forever

    inet 192.168.10.88/24 brd 192.168.10.255 scope global secondary eno16777736:1

       valid_lft forever preferred_lft forever

    inet6 fd05:fa56:9fbc::101/128 scope global tentative dynamic

       valid_lft 86405sec preferred_lft 86405sec

    inet6 fd05:fa56:9fbc:0:20c:29ff:fef9:b725/64 scope global tentative noprefixroute dynamic

       valid_lft 7202sec preferred_lft 1802sec

    inet6 fe80::20c:29ff:fef9:b725/64 scope link

       valid_lft forever preferred_lft forever

[[email protected] network-scripts]# tail -3 /etc/sysctl.conf

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.eno16777736.send_redirects = 0

最後都要sysctl -p

6、安裝ipvsadm和keepalived(下面是在LVS-master和LVS-backup操作):

[[email protected] ~]# yum install ipvsadm -y

[[email protected] ~]# yum install ipvsadm -y

[[email protected] ~]# yum install keepalived -y

[[email protected] ~]# yum install keepalived -y

[[email protected] ~]# lsmod |grep ^ip_vs

ip_vs                 140944  0

[[email protected] ~]# lsmod |grep ^ip_vs

ip_vs                 140944  0

[[email protected] ~]# ipvsadm --save > /etc/sysconfig/ipvsadm    #需要手動去新增這條才能啟動

[[email protected] ~]# ipvsadm --save > /etc/sysconfig/ipvsadm

[[email protected] ~]# systemctl start ipvsadm && systemctl enable ipvsadm

[[email protected] ~]# systemctl start ipvsadm && systemctl enable ipvsadm

7、開啟路由轉發並配置ipvsadm規則(下面是在LVS-master和LVS-backup操作):

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

[[email protected] ~]# echo "options ip_vs conn_tab_bits=22" > /etc/modprobe.d/ip_vs.conf  //lvs增加併發

[[email protected] ~]#  systemctl stop ipvsadm   //先關閉ipvsadm,再新增53和80埠的規則

[[email protected] ~]# ipvsadm -A -u 192.168.10.66:53 -s rr

[[email protected] ~]# ipvsadm -a -u 192.168.10.66:53 -r 192.168.10.103 -g -w 1

[[email protected] ~]# ipvsadm -a -u 192.168.10.66:53 -r 192.168.10.104 -g -w 1

[[email protected] ~]# ipvsadm -A -t 192.168.10.88:80 -s rr

[[email protected] ~]# ipvsadm -a -t 192.168.10.88:80 -r 192.168.10.105 -g -w 1

[[email protected] ~]# ipvsadm -a -t 192.168.10.88:80 -r 192.168.10.106 -g -w 1

[[email protected] ~]# ipvsadm --save > /etc/sysconfig/ipvsadm //儲存規則,否則重啟失效

[[email protected] ~]# cat /etc/sysconfig/ipvsadm

-A -t 192.168.10.88:http -s rr

-a -t 192.168.10.88:http -r linux-node5.server.com:http -g -w 1

-a -t 192.168.10.88:http -r linux-node6.server.com:http -g -w 1

-A -u 192.168.10.66:domain -s rr

-a -u 192.168.10.66:domain -r linux-node3.server.com:domain -g -w 1

-a -u 192.168.10.66:domain -r linux-node4.server.com:domain -g -w 1

[[email protected] ~]# systemctl start ipvsadm

[[email protected] ~]# ipvsadm -L  //檢視排程規則

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.88:http rr

  -> linux-node5.server.com:http  Route   1      0          0         

  -> linux-node6.server.com:http  Route   1      0          0         

UDP  192.168.10.66:domain rr

  -> linux-node3.server.com:domai Route   1      0          0         

  -> linux-node4.server.com:domai Route   1      0          0

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

[[email protected] ~]#  systemctl stop ipvsadm //先關閉ipvsadm,再新增53和80埠的規則

[[email protected] ~]#  ipvsadm -A -u 192.168.10.66:53 -s rr

[[email protected] ~]#  ipvsadm -a -u 192.168.10.66:53 -r 192.168.10.103 -g -w 1

[[email protected] ~]#  ipvsadm -a -u 192.168.10.66:53 -r 192.168.10.104 -g -w 1

[[email protected] ~]#  ipvsadm -A -t 192.168.10.88:80 -s rr

[[email protected] ~]#  ipvsadm -a -t 192.168.10.88:80 -r 192.168.10.105 -g -w 1

[[email protected] ~]#  ipvsadm -a -t 192.168.10.88:80 -r 192.168.10.106 -g -w 1

[[email protected] ~]# ipvsadm --save > /etc/sysconfig/ipvsadm //儲存規則,否則重啟失效

[[email protected] ~]# cat /etc/sysconfig/ipvsadm

-A -t 192.168.10.88:http -s rr

-a -t 192.168.10.88:http -r linux-node5.server.com:http -g -w 1

-a -t 192.168.10.88:http -r linux-node6.server.com:http -g -w 1

-A -u 192.168.10.66:domain -s rr

-a -u 192.168.10.66:domain -r linux-node3.server.com:domain -g -w 1

-a -u 192.168.10.66:domain -r linux-node4.server.com:domain -g -w 1

[[email protected] ~]# systemctl start ipvsadm

[[email protected] ~]# ipvsadm -L

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.88:http rr

  -> linux-node5.server.com:http  Route   1      0          0         

  -> linux-node6.server.com:http  Route   1      0          0         

UDP  192.168.10.66:domain rr

  -> linux-node3.server.com:domai Route   1      0          0         

  -> linux-node4.server.com:domai Route   1      0          0       

注意:例如ipvsadm -A -t 192.168.10.88:80 -s rr(-A是新增-t是tcp協議rr是輪詢。如果是udp協議,則-t換成-u:u代表udp的意思。)

8、配置LVS排程器keepalived的配置檔案(下面是在LVS-master和LVS-backup操作

keepalived配置雙vrrp instance,分別為:WEB例項和DNS例項。

8.1LVSkeepalived的配置檔案內容:

[[email protected] ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

[[email protected] ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs { # 全域性設定

   notification_email { # 設定報警郵件地址

     [email protected]

     [email protected]

     [email protected]

   }

   notification_email_from [email protected]xx.com # 設定郵件的傳送地址

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_TEST_R1 # 表示該臺服務的ID

#   vrrp_skip_check_adv_addr

#   vrrp_strict

#   vrrp_garp_interval 0

#   vrrp_gna_interval 0

}

#================WEB-Instance start=====================

vrrp_instance VI_WEB { # vrrp 例項

    state MASTER #master狀態

    interface eno16777736 #繫結vip在那個網絡卡

    virtual_router_id 51 # master和backup的id一致

    priority 100

    advert_int 1  # master和backup之間的檢測時間

    authentication {

        auth_type PASS

        auth_pass yanyb

    }

    virtual_ipaddress {

        192.168.10.88/24 # 設定虛擬IP   

    }

}

#=================config LVS-WEB======================

virtual_server 192.168.10.88 80 { # 設定虛擬伺服器,ip埠以及花邊號用逗號隔開

    delay_loop 6 # 設定執行情況檢查時間,單位是秒

    lb_algo rr # 負載演算法,這裡是rr表示輪詢

    lb_kind DR  # LVS工作機制,這裡是DR模式

    nat_mask 255.255.255.0

    persistence_timeout 50 # 會話保持時間,單位是秒,這個選項對動態網頁非常有幫助,為集群系統中的session共享提供了一個很好的解決方案,有了這個會話保持功能,使用者的請求會被一直分發到某個服務節點,知道超過這個會話的保持時間,需要注意的是,這個會話保持時間是最大無響應的超時時間,in other words,使用者在動態頁面50秒以內沒有執行任何操作,那麼接下來的操作會重新排程到另一個節點上。如果一直在操作則不會影響

    protocol TCP # 有TCP,UDP

    real_server 192.168.10.105 80 { #設定真實伺服器地址以及埠

        weight 1 # 設定權重,數字越低,排程的比例越小

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

    real_server 192.168.10.106 80 {

        weight 1

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

#================DNS-66 Instance start=====================

vrrp_instance VI_DNS {

    state BACKUP

    interface eno16777736

    virtual_router_id 52

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass yanyb

    }

    virtual_ipaddress {

        192.168.10.66/24

    }

}

#==================config 66 LVS-DNS======================

virtual_server 192.168.10.66 53 {

    delay_loop 3

    lb_algo rr

    lb_kind DR #(注這裡有三種方式:NAT/DR/TUN)

    nat_mask 255.255.255.0

    persistence_timeout 50

    protocol UDP

    real_server 192.168.103 53 {

        weight 100

        MISC_CHECK {

            connect_port 53

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            misc_path "/usr/bin/sh /etc/keepalived/check_dns_resolve.sh 192.168.10.103"

            misc_timeout 5

        }

    }

    real_server 192.168.104 53 {

        weight 100

        MISC_CHECK {

            connect_port 53

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            misc_path "/usr/bin/sh /etc/keepalived/check_dns_resolve.sh 192.168.10.104"

            misc_timeout 5

        }

    }

}

8.2、檢測DNS的指令碼:

[[email protected] ~]# cat /etc/keepalived/check_dns_resolve.sh

#!/bin/bash

# check dns resolve

a_check="check.healthcheck.check"

ns_ip=$1

port=53

timeout=2

function EchoHelp(){

    echo "use: ./check_dns_resolve.sh [ip] {port}"

    exit 1

}

if [ $2 ]; then

    port=$2

fi

if [ $ns_ip -a $a_check ]; then

    /usr/bin/nslookup -timeout=${timeout} -port=$port $a_check $ns_ip > /dev/null

else

    EchoHelp

fi

exit $?

[[email protected] ~]# chmod +x /etc/keepalived/check_dns_resolve.sh

8.3、LVSkeepalived的配置檔案內容:

[[email protected] ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

[[email protected] ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

   notification_email {

     [email protected]

     [email protected]

     [email protected]

   }

   notification_email_from [email protected]

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_TEST_R2

#   vrrp_skip_check_adv_addr

#   vrrp_strict

#   vrrp_garp_interval 0

#   vrrp_gna_interval 0

}

#================WEB-Instance start=====================

vrrp_instance VI_WEB {

    state BACKUP

    interface eno16777736

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass yanyb

    }

    virtual_ipaddress {

        192.168.10.88/24

    }

}

#=================config LVS-WEB======================

virtual_server 192.168.10.88 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    nat_mask 255.255.255.0

#    persistence_timeout 50

    protocol TCP

    real_server 192.168.10.105 80 {

        weight 1

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

    real_server 192.168.10.106 80 {

        weight 1

        TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

#================DNSInstance start=====================

vrrp_instance VI_DNS {

    state MASTER

    interface eno16777736

    virtual_router_id 52

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass yanyb

    }

    virtual_ipaddress {

        192.168.10.66/24

    }

}

#==================config LVS-DNS======================

virtual_server 192.168.10.66 53 {

    delay_loop 3

    lb_algo rr

    lb_kind DR

    nat_mask 255.255.255.0

#    persistence_timeout 50

    protocol UDP

    real_server 192.168.103 53 {

        weight 100

        MISC_CHECK {

            connect_port 53

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            misc_path "/usr/bin/sh /etc/keepalived/check_dns_resolve.sh 192.168.10.103"

            misc_timeout 5

        }

    }

    real_server 192.168.104 53 {

        weight 100

        MISC_CHECK {

            connect_port 53

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            misc_path "/usr/bin/sh /etc/keepalived/check_dns_resolve.sh 192.168.10.103"

            misc_timeout 5

        }

    }

}

8.4、檢測DNS的指令碼:

[[email protected] ~]# cat /etc/keepalived/check_dns_resolve.sh

#!/bin/bash

# check dns resolve

a_check="check.healthcheck.check"

ns_ip=$1

port=53

timeout=2

function EchoHelp(){

    echo "use: ./check_dns_resolve.sh [ip] {port}"

    exit 1

}

if [ $2 ]; then

    port=$2

fi

if [ $ns_ip -a $a_check ]; then

    /usr/bin/nslookup -timeout=${timeout} -port=$port $a_check $ns_ip > /dev/null

else

    EchoHelp

fi

exit $?

[[email protected] ~]# chmod +x /etc/keepalived/check_dns_resolve.sh

9、配置LVS節點伺服器指令碼(WEB節點與DNS節點都要配置)

9.1 DNS節點的配置內容(主備DNS配置vip,並啟動vip):

[[email protected] ~]# cat /etc/init.d/dns_vip.sh

#!/bin/bash

#description:config lvs-vip

    vip=192.168.10.66

    mask='255.255.255.255'

    case $1 in

    start)

    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

    sysctl -p >/dev/null 2>&1

    /usr/sbin/ifconfig lo:0 $vip netmask $mask broadcast $vip up

    /usr/sbin/route add -host $vip dev lo:0

    echo "start VIP OK!!"

    ;;

    stop)

    /usr/sbin/ifconfig lo:0 down

    /usr/sbin/route del $vip >/dev/null 2>&1

    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

    echo "stop VIP !!"

    ;;

    *)

    echo "Usage $(basename $0) start|stop"

    exit 1

    ;;

    esac

[[email protected] ~]# chmod +x /etc/init.d/dns_vip.sh

[[email protected] ~]# /etc/init.d/dns_vip.sh start

start VIP OK!!

[[email protected] ~]# ifconfig

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.10.103  netmask 255.255.255.0  broadcast 192.168.10.255

        inet6 fd05:fa56:9fbc::884  prefixlen 128  scopeid 0x0<global>

        inet6 fe80::20c:29ff:fe67:a281  prefixlen 64  scopeid 0x20<link>

        inet6 fd05:fa56:9fbc:0:20c:29ff:fe67:a281  prefixlen 64  scopeid 0x0<global>

        ether 00:0c:29:67:a2:81  txqueuelen 1000  (Ethernet)

        RX packets 25913  bytes 25518120 (24.3 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 20641  bytes 1782415 (1.6 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 0  (Local Loopback)

        RX packets 56  bytes 5854 (5.7 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 56  bytes 5854 (5.7 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 192.168.10.66  netmask 255.255.255.255

        loop  txqueuelen 0  (Local Loopback

[[email protected] ~]# /etc/init.d/dns_vip.sh start

start VIP OK!!

[[email protected] ~]# ifconfig

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        inet 10.0.87.1  netmask 255.255.255.0  broadcast 0.0.0.0

        ether 02:42:40:1f:12:0c  txqueuelen 0  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.10.104  netmask 255.255.255.0  broadcast 192.168.10.255

        inet6 fd05:fa56:9fbc::eb8  prefixlen 128  scopeid 0x0<global>

        inet6 fd05:fa56:9fbc:0:20c:29ff:feb4:91ca  prefixlen 64  scopeid 0x0<global>

        inet6 fe80::20c:29ff:feb4:91ca  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:b4:91:ca  txqueuelen 1000  (Ethernet)

        RX packets 17149  bytes 15115091 (14.4 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 14432  bytes 1217454 (1.1 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 0  (Local Loopback)

        RX packets 65  bytes 6923 (6.7 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 65  bytes 6923 (6.7 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 192.168.10.66  netmask 255.255.255.255

        loop  txqueuelen 0  (Local Loopback)

9.2、在區域配置檔案新增A記錄(主備DNS配置操作,如果DNS安裝部署請看上一章)

[[email protected] ~]# cat /var/named/server.com.zone

$TTL 3600

@  SOA  server.com. admin.server.com. (

                                        2000    ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

@               IN      NS      linux-node3.server.com.

                IN      NS      linux-node4.server.com.

linux-node3     IN      A       192.168.10.103

linux-node4     IN      A       192.168.10.104

abc             IN      A       192.168.10.104

vip             IN      A       192.168.10.66

[[email protected] ~]# cat /var/named/10.168.192.arpa

$TTL 3600

@  SOA  server.com. admin.server.com. (

                                        2000    ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        IN      NS      linux-node3.server.com.

        IN      NS      linux-node4.server.com.

103     IN      PTR     linux-node3.server.com.

104     IN      PTR     linux-node4.server.com.

104     IN      PTR     abc.server.com.

66      IN      PTR     vip.server.com.

[[email protected] ~]#

[[email protected] ~]# rndc reload   #這裡主從都reload

server reload successful

9.3、 WEB節點的配置內容(web的所有節點都配置vip,並啟動vip)

[[email protected] ~]# cat /etc/init.d/web_vip.sh

#!/bin/bash

#description:config lvs-vip

    vip=192.168.10.88

    mask='255.255.255.255'

    case $1 in

    start)

    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

    sysctl -p >/dev/null 2>&1

    /usr/sbin/ifconfig lo:0 $vip netmask $mask broadcast $vip up

    /usr/sbin/route add -host $vip dev lo:0

    echo "start VIP OK!!"

    ;;

    stop)

    /usr/sbin/ifconfig lo:0 down

    /usr/sbin/route del $vip >/dev/null 2>&1

    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

    echo "stop VIP !!"

    ;;

    *)

    echo "Usage $(basename $0) start|stop"

    exit 1

    ;;

    esac

[[email protected] ~]# chmod +x /etc/init.d/web_vip.sh

[[email protected] ~]# /etc/init.d/web_vip.sh start

start VIP OK!!

[[email protected] ~]# ifconfig

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        inet 10.0.20.1  netmask 255.255.255.0  broadcast 0.0.0.0

        ether 02:42:49:62:01:b2  txqueuelen 0  (Ethernet)