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