具体原理查看:https://blog.csdn.net/weixin_38044888/article/details/96898461
主机 | 服务 |
---|---|
真实主机localhost | 客户端 |
server1 | 主备master DS(Director Sever——LVS调度器) |
server4 | 辅备backup 当master宕机成为DS(Director Sever——LVS调度器) |
server2 | RS(Real Server——后端真实提供服务的虚拟机) |
server3 | RS(Real Server——后端真实提供服务的虚拟机) |
注意:我们所有的虚拟机server1-4的实验环境都是rhel7.5版本。
解压:tar -zxf keepalived-2.0.17.tar.gz
安装依赖:yum install -y gcc openssl-devel
cd keepalived-2.0.17/ # 进入keepalived目录
./configure --prefix=/usr/local/keepalived --with-init=systemd # 配置
make && make install #编译
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
systemctl stop ldirectord.service
chkconfig ldirectord off
vim /etc/keepalived/keepalived.conf
修改内容:
! Configuration File for keepalived
global_defs { #全局定义部分
notification_email { #设置警报邮箱
root@localhost #邮箱设置为本地
}
notification_email_from keepalived@localhost #设置发件人地址
smtp_server 127.0.0.1 #设置smtp server地址,为lo接口
smtp_connect_timeout 30 #设置smtp超时连接时间 以上参数可以不配置
router_id LVS_DEVEL #是Keepalived服务器的路由标识在一个局域网内,这个标识(router_id)是唯一的
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval
}
vrrp_instance VI_1 { #VRRP实例定义区块名字是VI_1
state MASTER #表示当前实例VI_1的角色状态这个状态只能有MASTER和BACKUP两种状态,并且需要大写这些字符ASTER为正式工作的状态,BACKUP为备用的状态
interface eth0
virtual_router_id 51 #虚拟路由ID标识,这个标识最好是一个数字,在一个keepalived.conf配置中是唯一的, MASTER和BACKUP配置中相同实例的virtual_router_id必须是一致的.
priority 100 #priority为优先级 越大越优先
advert_int 1 #为同步通知间隔。MASTER与BACKUP之间通信检查的时间间隔,单位为秒,默认为1.
authentication { #authentication为权限认证配置不要改动,同一vrrp实例的MASTER与BACKUP使用相同的密码才能正常通信。
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #设置虚拟IP地址
172.25.66.100 #此格式ip a显示 ifconfig不显示
}
#至此为止以上为实现高可用配置,如只需使用高可用功能下边配置可删除
#以下为虚拟服务器定义部分
virtual_server 172.25.66.100 80 { #设置虚拟服务器,指定虚拟IP和端口
delay_loop 6 #健康检查时间为6秒
lb_algo rr #设置负载调度算法 rr算法
lb_kind DR #设置负载均衡机制 #有NAT,TUN和DR三种模式可选
#persistence_timeout 50 #连接保留时间,50秒无响应则重新分配节点
protocol TCP #指定转发协议为TCP
real_server 192.168.5.150 80 { #RS节点1
weight 1 #权重
TCP_CHECK { #节点健康检查
connect_timeout 3 #延迟超时时间
retry 3 #重试次数
delay_before_retry 3 #延迟重试次数
}
}
real_server 192.168.50.149 80 { #RS节点2
TCP_CHECK {
weight 1
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
systemctl start keepalived.service
解压:tar -zxf keepalived-2.0.17.tar.gz
安装依赖:yum install -y gcc openssl-devel
cd keepalived-2.0.17/ # 进入keepalived目录
./configure --prefix=/usr/local/keepalived --with-init=systemd # 配置
make && make install #编译
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
systemctl stop ldirectord.service
chkconfig ldirectord off
vrrp_instance VI_1 {
state BACKUP # 改为backup
interface eth0
virtual_router_id 51
priority 50 # 优先级低于master
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.66.100
}
}
systemctl start keepalived.service
因为我们采用的是lvs的DR模式,所以,需要在RS上添加VIP,否则RS无法将数据包直接回给客户端。
[root@server2 ~]# ip addr add 172.25.66.100/24 dev eth0
[root@server2 ~]# ip a
1: lo: 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: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:79:d7:d9 brd ff:ff:ff:ff:ff:ff
inet 172.25.66.2/24 brd 172.25.66.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.25.66.100/24 scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe79:d7d9/64 scope link
valid_lft forever preferred_lft forever
server3上也要添加VIP。
[root@server3 ~]# ip addr add 172.25.66.100/24 dev eth0172.25.66.100
同时,我们需要在RS上使用arptables设置策略,拒绝接受想要访问VIP的请求。
yum install arptables -y
arptables -A INPUT -d 172.25.66.100 -j DROP
arptables -A OUTPUT -s 172.25.66.100 -j mangle --mangle-ip-s 172.25.66.2
arptables -nL
我们可以尝试删除master server1上的VIP,可以发现删除后又出现了。
[root@server1 keepalive_ldirectord]# ip addr del 172.25.66.100/24 dev eth0
[root@server1 keepalive_ldirectord]# ip a
1: lo: 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: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:cc:84:9c brd ff:ff:ff:ff:ff:ff
inet 172.25.66.1/24 brd 172.25.66.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.25.66.100/24 scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fecc:849c/64 scope link
valid_lft forever preferred_lft forever
可以清晰的看到发生的过程,因为master上VIP掉了,所以切换到BACKUP,但是此时检测优先级,因为master并没有宕机,所以又切换回master上创建VIP。
现在,我们可以在真实主机测试,访问VIP,然后故意让masterDS宕机,观察访问是否还正常。
一开始确实利用keepalived实现了lvs的DR模式,因为指定的是rr,所以,效果如下:
[root@localhost rht6.5]# curl 172.25.66.100
server2
[root@localhost rht6.5]# arp -d 172.25.66.100
[root@localhost rht6.5]# curl 172.25.66.100
server3
[root@localhost rht6.5]# curl 172.25.66.100
server2
[root@localhost rht6.5]# curl 172.25.66.100
server3
[root@localhost rht6.5]# curl 172.25.66.100
此时,我们模拟keepalived的masterDS宕机,观测是否影响我们的服务请求。
systemctl stop keepalived.service
[root@localhost rht6.5]# curl 172.25.66.100
server2
[root@localhost rht6.5]# curl 172.25.66.100
server3
[root@localhost rht6.5]# curl 172.25.66.100
server2
[root@localhost rht6.5]# curl 172.25.66.100
server3