当前位置: 首页 > news >正文

LVS+Keepalived+DNS 高可用项目

项目架构

主机规划

主机IP角色软件
lb-master172.25.250.105主备负载均衡器ipvsadm,keepalived
lb-backup172.25.250.106同时做web和dns调度ipvsadm,keepalived
dns-master172.25.250.107VIP:172.25.250.100bind
dns-slave172.25.250.108LVS DNS 节点互为主从同步bind
web01172.25.250.201nginx,bind-utils
web02172.25.250.202LVS WEB 节点,VIP:172.25.250.200nginx,bind-utils
web03172.25.250.203nginx,bind-utils

!!!本章笔记中博主是根据自己的主机规划来修改主机名以及 IP 地址的这一步不是必须的,大家根据自身虚拟机本来的就好,记得哪台主机做的什么角色就行

注意:所有主机的防火墙和 Selinux 都关闭
# 关闭防火墙
systemctl disable --now firewalld
 
# 临时关闭selinux
setenforce 0
# 永久关闭selinux
sed -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config

永久挂载仓库
[root@localhost ~]# vim /etc/fstab
[root@localhost ~]# cat /etc/fstab 
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=589b1fb8-b9eb-461f-ab73-55252609a21e /boot                   xfs     defaults        0 0
UUID=95BF-10A3          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
/dev/mapper/rhel-swap   none                    swap    defaults        0 0
/dev/sr0                /mnt                    iso9660  defaults       0 0 
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# mount -a

搭建 DNS 服务

配置主服务 DNS

修改主机名和 IP 地址

[root@localhost ~]# hostnamectl hostname dns-master
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual  ipv4.addresses 172.25.250.107 /24 ipv4.gateway 172.25.250.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160

挂载仓库并下载服务

[root@dns-master ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@dns-master ~]# dnf -y install bind

修改核心配置文件

[root@dns-master ~]# vim /etc/named.conf 
[root@dns-master ~]# cat /etc/named.conf 
options {
	listen-on port 53 { 172.25.250.107;172.25.250.100; };
	directory 	"/var/named";
};
zone "mingyue.com" IN {
	type master;
	file "mingyue.zone";
	allow-transfer { 172.25.250.108; };
};
zone "250.25.172.in-addr.arpa" IN {
	type master;
	file "mingyue.fanxiang";
	allow-transfer { 172.25.250.108; };
};

检查配置文件是否有误(没有消息提示说明配置文件修改没问题,若有根据提示修改配置文件)

[root@dns-master ~]# named-checkconf 

编写正向解析区域数据文件

[root@dns-master ~]# vim /var/named/mingyue.zone 
[root@dns-master ~]# cat /var/named/mingyue.zone 
$TTL	1D
@	IN	SOA	ns1.mingyue.com.	root.mingyue.com. (0 1H 1D 1W 3D)
	IN	NS	ns1.mingyue.com.
	IN	NS	ns2
ns1	IN	A	172.25.250.107
ns2	IN	A	172.25.250.108
www	IN	A	172.25.250.200
txt	IN	TXT	"AaBbCcDdEeFf"	

检查正向解析区域数据文件是否有误

[root@dns-master ~]# named-checkzone mingyue.com /var/named/mingyue.zone
zone mingyue.com/IN: loaded serial 0
OK

编写反向解析区域数据文件并检查是否有误

[root@dns-master ~]# cp -a /var/named/mingyue.zone /var/named/mingyue.fanxiang
[root@dns-master ~]# ll /var/named/
total 24
drwxrwx---. 2 named named    6 Aug 28  2024 data
drwxrwx---. 2 named named    6 Aug 28  2024 dynamic
-rw-r--r--. 1 root  root   202 Apr 12 14:09 mingyue.fanxiang
-rw-r--r--. 1 root  root   202 Apr 12 14:09 mingyue.zone
-rw-r-----. 1 root  named 2112 Aug 28  2024 named.ca
-rw-r-----. 1 root  named  152 Aug 28  2024 named.empty
-rw-r-----. 1 root  named  152 Aug 28  2024 named.localhost
-rw-r-----. 1 root  named  168 Aug 28  2024 named.loopback
drwxrwx---. 2 named named    6 Aug 28  2024 slaves
[root@dns-master ~]# vim /var/named/mingyue.fanxiang 
[root@dns-master ~]# cat /var/named/mingyue.fanxiang 
$TTL	1D
@	IN	SOA	ns1.mingyue.com.	root.mingyue.com. (0 1H 1D 1W 3D)
	IN	NS	ns1.mingyue.com.
	IN	NS	ns2
ns1	IN	A	172.25.250.107
ns2	IN	A	172.25.250.108
200	IN	PTR	www.mingyue.com.
txt	IN	TXT	"AaBbCcDdEeFf"	
[root@dns-master ~]# named-checkzone mingyue.com /var/named/mingyue.fanxiang 
zone mingyue.com/IN: loaded serial 0
OK

启动服务并测试

[root@dns-master ~]# systemctl start named
[root@dns-master ~]# dig -t NS mingyue.com @172.25.250.107

; <<>> DiG 9.16.23-RH <<>> -t NS mingyue.com @172.25.250.107
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14162
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: f082f46b7ee541bf0100000067fa0532ff3c047be69773cd (good)
;; QUESTION SECTION:
;mingyue.com.			IN	NS

;; ANSWER SECTION:
mingyue.com.		86400	IN	NS	ns1.mingyue.com.
mingyue.com.		86400	IN	NS	ns2.mingyue.com.

;; ADDITIONAL SECTION:
ns1.mingyue.com.	86400	IN	A	172.25.250.107
ns2.mingyue.com.	86400	IN	A	172.25.250.108

;; Query time: 2 msec
;; SERVER: 172.25.250.107#53(172.25.250.107)
;; WHEN: Sat Apr 12 14:16:18 CST 2025
;; MSG SIZE  rcvd: 136

[root@dns-master ~]# dig -t A www.mingyue.com @172.25.250.107

; <<>> DiG 9.16.23-RH <<>> -t A www.mingyue.com @172.25.250.107
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10116
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 8529c23b6b32e1a60100000067fa0561d02e583eade8e231 (good)
;; QUESTION SECTION:
;www.mingyue.com.		IN	A

;; ANSWER SECTION:
www.mingyue.com.	86400	IN	A	172.25.250.200

;; Query time: 0 msec
;; SERVER: 172.25.250.107#53(172.25.250.107)
;; WHEN: Sat Apr 12 14:17:05 CST 2025
;; MSG SIZE  rcvd: 88

[root@dns-master ~]# dig -x 172.25.250.200 @172.25.250.107

; <<>> DiG 9.16.23-RH <<>> -x 172.25.250.200 @172.25.250.107
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57737
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: d8d9bf0abd0af37d0100000067fa0587155762c6e39574b9 (good)
;; QUESTION SECTION:
;200.250.25.172.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
200.250.25.172.in-addr.arpa. 86400 IN	PTR	www.mingyue.com.

;; Query time: 9 msec
;; SERVER: 172.25.250.107#53(172.25.250.107)
;; WHEN: Sat Apr 12 14:17:43 CST 2025
;; MSG SIZE  rcvd: 113

配置从服务 DNS

修改主机名和 IP 地址

[root@localhost ~]# hostnamectl hostname dns-slave
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual  ipv4.addresses 172.25.250.108/24 ipv4.gateway 172.25.250.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160

挂载仓库并下载软件

[root@dns-slave ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@dns-slave ~]# dnf -y install bind

修改核心配置文件

[root@dns-slave ~]# vim /etc/named.conf 
[root@dns-slave ~]# cat /etc/named.conf 
options {
	listen-on port 53 { 172.25.250.108;172.25.250.100; };
	 directory       "/var/named";
};

zone "mingyue.com" IN {
	type slave;
	file "slaves/mingyue.zone";
	masters { 172.25.250.107; };
	allow-transfer  { none; };
};

zone "250.25.172.in.addr.arpa" IN {
	type slave;
	masters { 172.25.250.107; };
	file "slaves/mingyue.fanxiang";
	allow-transfer { none; };
};

检查配置文件是否有误(没有消息提示说明配置文件修改没问题,若有根据提示修改配置文件)

[root@dns-slave ~]# named-checkconf 

启动服务并测试(若是没有文件检查防火墙是否关闭)

[root@dns-slave ~]# ls /var/named/slaves
[root@dns-slave ~]# systemctl start named
[root@dns-slave ~]# ls /var/named/slaves/
mingyue.fanxiang  mingyue.zone

[root@dns-slave ~]# dig -t A www.mingyue.com @172.25.250.107

; <<>> DiG 9.16.23-RH <<>> -t A www.mingyue.com @172.25.250.107
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64898
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: ce420687d228d5b40100000067fa0d06077ab9fafd700f17 (good)
;; QUESTION SECTION:
;www.mingyue.com.		IN	A

;; ANSWER SECTION:
www.mingyue.com.	86400	IN	A	172.25.250.200

;; Query time: 4 msec
;; SERVER: 172.25.250.107#53(172.25.250.107)
;; WHEN: Sat Apr 12 14:49:42 CST 2025
;; MSG SIZE  rcvd: 88

[root@dns-slave ~]# dig -t A www.mingyue.com @172.25.250.108

; <<>> DiG 9.16.23-RH <<>> -t A www.mingyue.com @172.25.250.108
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14843
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 137473cba75fd4b90100000067fa0d18e153428993edd1ef (good)
;; QUESTION SECTION:
;www.mingyue.com.		IN	A

;; ANSWER SECTION:
www.mingyue.com.	86400	IN	A	172.25.250.200

;; Query time: 2 msec
;; SERVER: 172.25.250.108#53(172.25.250.108)
;; WHEN: Sat Apr 12 14:50:00 CST 2025
;; MSG SIZE  rcvd: 88

搭建 web 服务

web01

修改主机名和 IP 地址

[root@localhost ~]# hostnamectl hostname web01
[root@web01 ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:68:31:7f brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.25.250.201/24 brd 172.25.250.255 scope global dynamic noprefixroute ens160
       valid_lft 1753sec preferred_lft 1753sec
    inet6 fe80::20c:29ff:fe68:317f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

挂载仓库并下载软件

[root@web01 ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@web01 ~]# dnf -y install nginx

配置 nginx

[root@web01 ~]# vim /etc/nginx/conf.d/web01.conf
[root@web01 ~]# cat /etc/nginx/conf.d/web01.conf
server {
	listen  	80;
	server_name	www.mingyue.com;
	root		/usr/share/nginx/html;
}

修改 DNS

[root@web01 ~]# nmcli c modify ens160 ipv4.dns 172.25.250.100
[root@web01 ~]# nmcli c up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@web01 ~]# nmcli d show | grep DNS
IP4.DNS[1]:                             172.25.250.100

编写首页

[root@web01 ~]# echo $(hostname) - $(hostname -I) > /usr/share/nginx/html/index.html 

启动服务并测试

[root@web01 ~]# systemctl start nginx
[root@web01 ~]# curl localhost
web01 - 172.25.250.201

web02

修改主机名和 IP 地址

[root@localhost ~]# hostnamectl hostname web02
[root@web02 ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:7e:8e:dc brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.25.250.202/24 brd 172.25.250.255 scope global dynamic noprefixroute ens160
       valid_lft 987sec preferred_lft 987sec
    inet6 fe80::20c:29ff:fe7e:8edc/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

挂载仓库并下载软件

[root@web02 ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@web02 ~]# dnf -y install nginx

配置 nginx

[root@web02 ~]# vim /etc/nginx/conf.d/web02.conf
[root@web02 ~]# cat /etc/nginx/conf.d/web02.conf 
server {
	listen		80;
	server_name	www.mingiyue.com;
	root		/usr/share/nginx/html;
}

修改 DNS

[root@web02 ~]# nmcli c modify ens160 ipv4.dns 172.25.250.100
[root@web02 ~]# nmcli c up ens160 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@web02 ~]# nmcli d show ens160 | grep DNS
IP4.DNS[1]:                             172.25.250.100

编写首页

[root@web02 ~]# echo $(hostname) - $(hostname -I) > /usr/share/nginx/html/index.html 

启动服务并测试

[root@web02 ~]# systemctl start nginx
[root@web02 ~]# curl localhost
web02 - 172.25.250.202

web03

修改主机名和 IP 地址

[root@localhost ~]# hostnamectl hostname web03
[root@web03 ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:12:a5:be brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.25.250.203/24 brd 172.25.250.255 scope global dynamic noprefixroute ens160
       valid_lft 1027sec preferred_lft 1027sec
    inet6 fe80::20c:29ff:fe12:a5be/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

挂载仓库并下载软件

[root@web03 ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@web03 ~]# dnf -y install nginx

配置 nginx

[root@web03 ~]# vim /etc/nginx/conf.d/web03.conf
[root@web03 ~]# cat /etc/nginx/conf.d/web03.conf 
server {
	listen		80;
	server_name	www.mingyue.com;
	root		/usr/share/nginx/html;
}

修改 DNS

[root@web03 ~]# nmcli c modify ens160 ipv4.dns 172.25.250.100
[root@web03 ~]# nmcli c up ens160 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@web03 ~]# nmcli d show ens160 | grep DNS
IP4.DNS[1]:                             172.25.250.100

编写首页

[root@web03 ~]# echo $(hostname) - $(hostname -I) > /usr/share/nginx/html/index.html 

启动服务并测试

[root@web03 ~]# systemctl start nginx
[root@web03 ~]# curl localhost
web03 - 172.25.250.203

搭建 Keepalived 和 LVS 

配置master

修改主机名和 IP 地址

[root@localhost ~]# hostnamectl hostname lb-master
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual  ipv4.addresses 172.25.250.105/24 ipv4.gateway 172.25.250.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160

挂载仓库并下载软件

[root@lb-master ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@lb-master ~]# dnf -y install keepalived ipvsadm bind-utils

配置 Keepalived

[root@lb-master ~]# vim /etc/keepalived/keepalived.conf 
[root@lb-master ~]# cat /etc/keepalived/keepalived.conf 
global_defs {
   router_id LVS_master
}

vrrp_instance VI_web {
    state MASTER
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.250.200
    }
}

virtual_server 172.25.250.200 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    protocol TCP

    real_server 172.25.250.201 80 {
        weight 3
	TCP_CHECK{
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }


    real_server 172.25.250.202 80 {
        weight 2
        TCP_CHECK{
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.250.203 80 {
        weight 1
        TCP_CHECK{
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

vrrp_instance VI_dns {
    state BACKUP
    interface ens160
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.250.100
    }
}

virtual_server 172.25.250.100 53 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol UDP

    real_server 172.25.250.107 53 {
        weight 1
	MISC_CHECK {
            connect_timeout 3
            misc_path "/etc/keepalived/checkdns.sh -h 172.25.250.107 txt.chengke.com"
        }
    }

    real_server 172.25.250.108 53 {
        weight 1
	MISC_CHECK {
            connect_timeout 3
            misc_path "/etc/keepalived/checkdns.sh -h 172.25.250.108 txt.chengke.com"
        }
    }
}

编写检测脚本文件并赋予权限

[root@lb-master ~]# vim /etc/keepalived/checkdns.sh
[root@lb-master ~]# cat /etc/keepalived/checkdns.sh
#!/bin/bash
[ $# -le 2 ] && { echo "usage: $0 -h <ip>"; exit 2; }
domain=$3
while getopts "h:" OPT; do
        case $OPT in
                h)
                        host=$OPTARG
                        ;;
                *)
                        echo "usage: $0 -h <ip>" && exit 1
                        ;;
        esac
done
dig @${host} txt ${domain} +time=1 | grep "\<AaBbCcDdEeFf\>" > /dev/null
exit $?
[root@lb-master ~]# chmod a+x /etc/keepalived/checkdns.sh 
[root@lb-master ~]# ll /etc/keepalived/checkdns.sh 
-rwxr-xr-x. 1 root root 411 Apr 12 15:41 /etc/keepalived/checkdns.sh

启动服务

[root@lb-master ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lb-master ~]# systemctl start keepalived.service ipvsadm.service 

[root@lb-master ~]# ip a show ens160 
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:22:88:c0 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.25.250.105/24 brd 172.25.250.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 172.25.250.200/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe22:88c0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

查看 LVS 规则

 

[root@lb-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.250.200:80 wrr
  -> 172.25.250.201:80            Route   3      0          0         
  -> 172.25.250.202:80            Route   2      0          0         
  -> 172.25.250.203:80            Route   1      0          0         
UDP  172.25.250.100:53 rr
  -> 172.25.250.107:53            Route   1      0          0         
  -> 172.25.250.108:53            Route   1      0          0      

配置backup

修改主机名和 IP 地址

[root@localhost ~]# hostnamectl hostname lb-backup
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual  ipv4.addresses 172.25.250.106/24 ipv4.gateway 172.25.250.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160

挂载仓库并下载软件

[root@lb-backup ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@lb-backup ~]# dnf -y install keepalived ipvsadm bind-utils

复制 keepalived 的配置文件到 backup 主机中并修改

[root@lb-master ~]# scp /etc/keepalived/keepalived.conf 172.25.250.106:/etc/keepalived
The authenticity of host '172.25.250.106 (172.25.250.106)' can't be established.
ED25519 key fingerprint is SHA256:zQRVAzxowh+vQParI9tLut0o4tqknS8RIH86Oa4QB/A.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.25.250.106' (ED25519) to the list of known hosts.
root@172.25.250.106's password: 
keepalived.conf                                                                       100% 1652   287.3KB/s   00:00 


[root@lb-backup ~]# vim /etc/keepalived/keepalived.conf 
[root@lb-backup ~]# cat /etc/keepalived/keepalived.conf 
global_defs {
   router_id LVS_backup
}

vrrp_instance VI_web {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.250.200
    }
}

virtual_server 172.25.250.200 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    protocol TCP

    real_server 172.25.250.201 80 {
        weight 3
	TCP_CHECK{
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }


    real_server 172.25.250.202 80 {
        weight 2
        TCP_CHECK{
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.250.203 80 {
        weight 1
        TCP_CHECK{
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

vrrp_instance VI_dns {
    state MASTER
    interface ens160
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.250.100
    }
}

virtual_server 172.25.250.100 53 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol UDP

    real_server 172.25.250.107 53 {
        weight 1
	MISC_CHECK {
            connect_timeout 3
            misc_path "/etc/keepalived/checkdns.sh -h 172.25.250.107 txt.chengke.com"
        }
    }

    real_server 172.25.250.108 53 {
        weight 1
	MISC_CHECK {
            connect_timeout 3
            misc_path "/etc/keepalived/checkdns.sh -h 172.25.250.108 txt.chengke.com"
        }
    }
}

复制检测脚本文件到 backup 主机中

[root@lb-master ~]# scp /etc/keepalived/checkdns.sh  172.25.250.106:/etc/keepalived
root@172.25.250.106's password: 
checkdns.sh                                                                           100%  411    71.5KB/s   00:00    

[root@lb-backup ~]# cd /etc/keepalived/
[root@lb-backup keepalived]# ll
total 8
-rwxr-xr-x. 1 root root  411 Apr 12 15:46 checkdns.sh
-rw-r--r--. 1 root root 1652 Apr 12 15:48 keepalived.conf

启动服务

[root@lb-backup ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lb-backup ~]# systemctl start keepalived.service ipvsadm.service 

[root@lb-backup ~]# ip a show ens160 
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:66:17:9c brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.25.250.106/24 brd 172.25.250.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 172.25.250.100/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe66:179c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

查看 LVS 规则

[root@lb-backup ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.250.200:80 wrr
  -> 172.25.250.201:80            Route   3      0          0         
  -> 172.25.250.202:80            Route   2      0          0         
  -> 172.25.250.203:80            Route   1      0          0         
UDP  172.25.250.100:53 rr
  -> 172.25.250.107:53            Route   1      0          0         
  -> 172.25.250.108:53            Route   1      0          0      

DNS 服务器增加 VIP 和配置内核参数

主服务器

增加 VIP

[root@dns-master ~]# ifconfig lo:0 172.25.250.100 netmask 255.255.255.255 up
[root@dns-master ~]# route add -host 172.25.250.100 dev lo:0
[root@dns-master ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
    inet 172.25.250.100/32 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

配置内核参数

[root@dns-master ~]# vim /etc/sysctl.conf 
[root@dns-master ~]# cat /etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

[root@dns-master ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

从服务器

增加 VIP

[root@dns-slave ~]#  ifconfig lo:0 172.25.250.100 netmask 255.255.255.255 up
[root@dns-slave ~]# route add -host 172.25.250.100 dev lo:0
[root@dns-slave ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
    inet 172.25.250.100/32 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

配置内核参数

[root@dns-slave ~]# vim /etc/sysctl.conf   
[root@dns-slave ~]# cat /etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

[root@dns-slave ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

修改 web 服务器

web01

增加 VIP

[root@web01 ~]# ifconfig lo:0 172.25.250.200 netmask 255.255.255.255 up
[root@web01 ~]# route add -host 172.25.250.200 dev lo:0
[root@web01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
    inet 172.25.250.200/32 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:68:31:7f brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.25.250.201/24 brd 172.25.250.255 scope global dynamic noprefixroute ens160
       valid_lft 1420sec preferred_lft 1420sec
    inet6 fe80::20c:29ff:fe68:317f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

配置内核参数

[root@web01 ~]# vim /etc/sysctl.conf 
[root@web01 ~]# sysctl -p
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
net.ipv4.ip_forward = 0

web02

增加 VIP

[root@web02 ~]# ifconfig lo:0 172.25.250.200 netmask 255.255.255.255 up
[root@web02 ~]# route add -host 172.25.250.200 dev lo:0
[root@web02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
    inet 172.25.250.200/32 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:7e:8e:dc brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.25.250.202/24 brd 172.25.250.255 scope global dynamic noprefixroute ens160
       valid_lft 1477sec preferred_lft 1477sec
    inet6 fe80::20c:29ff:fe7e:8edc/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

配置内核参数

[root@web02 ~]# vim /etc/sysctl.conf 
[root@web02 ~]# sysctl -p
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
net.ipv4.ip_forward = 0

web03

增加 VIP

[root@web03 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
    inet 172.25.250.200/32 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:12:a5:be brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.25.250.203/24 brd 172.25.250.255 scope global dynamic noprefixroute ens160
       valid_lft 1612sec preferred_lft 1612sec
    inet6 fe80::20c:29ff:fe12:a5be/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

配置内核参数

[root@web03 ~]# vim /etc/sysctl.conf 
[root@web03 ~]# sysctl -p
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
net.ipv4.ip_forward = 0

测试

[root@client ~]# curl 172.25.250.200
web03 - 172.25.250.203
[root@client ~]# curl 172.25.250.200
web02 - 172.25.250.202
[root@client ~]# curl 172.25.250.200
web01 - 172.25.250.201
[root@client ~]# curl 172.25.250.200
web01 - 172.25.250.201
[root@client ~]# curl 172.25.250.200
web02 - 172.25.250.202
[root@client ~]# curl 172.25.250.200
web01 - 172.25.250.201
[root@client ~]# curl 172.25.250.200
web03 - 172.25.250.203
[root@client ~]# curl 172.25.250.200
web02 - 172.25.250.202

服务搭建完成!!!

相关文章:

  • L36.【LeetCode题解】查找总价格为目标值的两个商品(剑指offer:和为s的两个数字) (双指针思想,内含详细的优化过程)
  • 【第三章】14-常用模块2-ngx_http_proxy_module
  • 【场景应用5】深入探讨去噪扩散概率模型及训练推理过程
  • 电路方案分析(二十)TPS63xxx系列DC/DC电源EMI PCB设计方案
  • Odoo 部署本地 把現時的excel計算表格部署上odoo 教程
  • 利用 pyecharts 实现地图的数据可视化——第七次人口普查数据的2d、3d展示(关键词:2d 、3d 、map、 geo、涟漪点)
  • 基于Yolov8的植物病虫害检测系统
  • Linux线程属性与多线程开发:API详解与实战代码解析
  • 【一起来学kubernetes】37、lstio使用详解
  • 【前端】webpack一本通
  • HTML入门—表格与表单设计
  • 十大PDF解析工具在不同文档类别中的比较研究
  • HTTP 协议-应用层
  • STM32蓝牙连接Android实现云端数据通信(电机控制-开源)
  • Unity UI中的Pixels Per Unit
  • 从源码安装ROS的serial包(替换github的方案)
  • Python中的strip()
  • VSCode CMake调试CPP程序
  • 闲鱼分销玩法详解
  • 深入解读 React 纯组件(PureComponent)
  • 网站开发怎样实现上传视频教程/软件开发培训机构
  • dedecms做网站/郑州网站优化公司
  • 兰山网站建设/今天刚刚发生的新闻最新新闻
  • 濮阳建站公司流程/数据指数
  • 口碑营销的前提及好处有哪些/做seo需要用到什么软件
  • 购物网站首页界面设计/免费论坛建站系统