LVS+Keepalived搭建双机热备高可用负载均衡

1.去官网下载keepalived

https://keepalived.org/download.html

2.用winscp将压缩包发送到服务器上

 3.解压以及初始化

#解压
[root@localhost app]# ll
总用量 2240
-rw-r--r--  1 root root 1180180 3月   5 10:24 keepalived-2.2.7.tar.gz
drwxr-xr-x. 9 1001 1001     186 5月   2 10:04 nginx-1.23.3
-rw-r--r--. 1 root root 1108958 12月 14 00:18 nginx-1.23.3.tar.gz
[root@localhost app]# tar -zxvf keepalived-2.2.7.tar.gz 
#初始化
./configure --prefix=/usr/local/keepalived --sysconf=/etc 
#出现了警告
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
#解决方法
安装依赖并重新编译
[root@localhost keepalived-2.2.7]# yum -y install libnl libnl-devel
make 
make install

4.修改配置文件

[root@localhost keepalived-2.2.7]# whereis keepalived
keepalived: /etc/keepalived /usr/local/keepalived
[root@localhost keepalived-2.2.7]# cd /etc/keepalived/
[root@localhost keepalived]# ll
总用量 8
-rw-r--r-- 1 root root 3550 5月   2 17:06 keepalived.conf.sample
drwxr-xr-x 2 root root 4096 5月   2 17:06 samples

5.开启服务

[root@localhost etc]# cp sysconfig/keepalived /etc/sysconfig/
#启动报错
[root@localhost etc]# systemctl start keepalived.service 
Job for keepalived.service failed because the control process exited with error code. See "systemctl status keepalived.service" and "journalctl -xe" for details.
[root@localhost etc]# systemctl status keepalived.service
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 二 2023-05-02 17:20:04 CST; 18s ago
     Docs: man:keepalived(8)
           man:keepalived.conf(5)
           man:genhash(1)
           https://keepalived.org
  Process: 13945 ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=6)

5月 02 17:20:04 localhost.localdomain systemd[1]: Starting LVS and VRRP High ....
5月 02 17:20:04 localhost.localdomain Keepalived[13945]: Starting Keepalived v...
5月 02 17:20:04 localhost.localdomain systemd[1]: keepalived.service: control...6
5月 02 17:20:04 localhost.localdomain systemd[1]: Failed to start LVS and VRR....
5月 02 17:20:04 localhost.localdomain systemd[1]: Unit keepalived.service ent....
5月 02 17:20:04 localhost.localdomain systemd[1]: keepalived.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
#解决方案
做好备份并修改名字
[root@localhost keepalived]# cp keepalived.conf.sample keepalived.conf.sample.bak
[root@localhost keepalived]# mv keepalived.conf.sample keepalived.conf
[root@localhost keepalived]# ll
总用量 12
-rw-r--r-- 1 root root 3504 5月   2 17:13 keepalived.conf
-rw-r--r-- 1 root root 3504 5月   2 17:22 keepalived.conf.sample.bak
drwxr-xr-x 2 root root 4096 5月   2 17:06 samples
#重新启动
[root@localhost keepalived]# systemctl daemon-reload 
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ps -ef |grep keepalived
root      14123      1  0 17:23 ?        00:00:00 /usr/local/keepalived/sbin/keepalived -D
root      14124  14123  0 17:23 ?        00:00:00 /usr/local/keepalived/sbin/keepalived -D
root      14125  14123  0 17:23 ?        00:00:00 /usr/local/keepalived/sbin/keepalived -D
root      14139   1681  0 17:24 pts/0    00:00:00 grep --color=auto keepalived

 6.测试

#开启keepalived时产生了虚拟ip192.168.0.110
[root@localhost keepalived]# ip addr
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:94:b3:e5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.101/24 brd 192.168.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.1.110/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::794d:c23c:83d1:e2e8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
#关闭keepalived 发现虚拟IP消失了可以正常使用
[root@localhost keepalived]# systemctl stop keepalived.service 
[root@localhost keepalived]# ip addr
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:94:b3:e5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.101/24 brd 192.168.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::794d:c23c:83d1:e2e8/64 scope link no
#查看master服务器断开后backup服务器是否可用
[root@localhost keepalived]# ip addr
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:56:1c:8b brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.40/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.1.110/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe56:1c8b/64 scope link 
       valid_lft forever preferred_lft forever

7.配置双主热备

原理:

是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台机器出现故障的时候,另外一台机器会马上自动接管并且提供服务,当故障机器恢复后立即成为新的备份机器,而且切换的时间非常短。

192.168.0.101的配置:

 

 192.168.0.40的配置:

 8.测试

 #101机器为主机器时产生的虚拟ip为110
    inet 192.168.0.101/24 brd 192.168.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.1.110/32 scope global ens33
       valid_lft forever preferred_lft forever
#此时备份40机器虚拟IP为111
    inet 192.168.0.40/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.1.111/32 scope global ens33
       valid_lft forever preferred_lft forever
#当101机器主机器宕机时,主机器的虚拟IP会跳转到备份机上使其成为主机器
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:56:1c:8b brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.40/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.1.111/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.1.110/32 scope global ens33
       valid_lft forever preferred_lft forever

9.LVS

#关闭网络配置
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl disable NetworkManager

10.配置

#虚拟ip
[root@localhost ~]# ifconfig ens33:1 192.168.0.171 broadcast 192.168.0.255 netmask 255.255.255.0 up
[root@localhost ~]# ip addr
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:61:e1:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.123/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.0.171/24 brd 192.168.0.255 scope global secondary ens33:1
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe61:e12c/64 scope link 
       valid_lft forever preferred_lft forever




[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33test
[root@localhost network-scripts]# vim ifcfg-ens33test
#修改ifcfg-ens33test配置
yum -y install ipvsadm
ipvsadm -Ln
#rs真实服务器配置
修改ifcfg-lo网卡
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lotest
[root@localhost network-scripts]# ls
ifcfg-ens33   ifdown-isdn      ifup          ifup-plusb     ifup-wireless
ifcfg-lo      ifdown-post      ifup-aliases  ifup-post      init.ipv6-global
ifcfg-lotest  ifdown-ppp       ifup-bnep     ifup-ppp       network-functions
ifdown        ifdown-routes    ifup-eth      ifup-routes    network-functions-ipv6
ifdown-bnep   ifdown-sit       ifup-ippp     ifup-sit
ifdown-eth    ifdown-Team      ifup-ipv6     ifup-Team
ifdown-ippp   ifdown-TeamPort  ifup-isdn     ifup-TeamPort
ifdown-ipv6   ifdown-tunnel    ifup-plip     ifup-tunnel
[root@localhost network-scripts]# vim ifcfg-lotest 
[root@localhost network-scripts]# cat ifcfg-lotest 
DEVICE=lotest
IPADDR=192.168.0.111
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
[root@localhost etc]# vim sysctl.
sysctl.conf  sysctl.d/  
[root@localhost etc]# vim sysctl.conf 
[root@localhost etc]# cat sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
#####################################
route -n 
route add -host 192.168.0.111 dev lotest
echo "route add -host 192.168.0.111 dev lotest" >> /etc/rc.local vim sysctl.
sysctl.conf  sysctl.d/  
[root@localhost etc]# vim sysctl.conf 
[root@localhost etc]# cat sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
#####################################
route -n 
route add -host 192.168.0.111 dev lotest
echo "route add -host 192.168.0.111 dev lotest" >> /etc/rc.local

11.构建集群

#构建集群
[root@localhost etc]# ipvsadm -h
ipvsadm -A -t 192.168.0.111:80 -s rr
ipvsadm -Ln
#添加服务器
ipvsadm -a -t 192.168.0.111:80 -r 192.168.0.80:80 -g
ipvsadm -a -t 192.168.0.111:80 -r 192.168.0.50:80 -g

ipvsadm -Ln --stats # 查看状态
# 修改访问时间
ipvsadm -E -t 192.168.0.111:80 -s rr -p 5 

ipvsadm --set 1 1 1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值