本文详细介绍了如何使用LVS和Keepalived实现集群高可用。首先,我们在LVS服务器上安装ipvsadm和keepalived服务,然后在WEB服务器上安装nginx服务并配置index.html文件。接着,我们在LVS服务器上配置keepalived.conf文件和RS服务,最后通过访问VIP来验证配置的正确性。整个过程中,我们详细解释了每一步的操作和配置的含义,帮助读者更好地理解和实践。
机器说明
IP | 说明 |
---|---|
192.168.199.13 | LVS服务器 |
192.168.199.11 | WEB服务器1 |
192.168.199.12 | WEB服务器2 |
192.168.199.101 | VIP(虚拟IP) |
LVS服务器
# 安装ipvsadm
[root@localhost ~] yum install ipvsadm -y
# 安装keepalived服务
[root@localhost ~] yum install keepalived -y
WEB服务器1
# 安装nginx服务
[root@localhost ~] yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
[root@localhost ~] wget https://nginx.org/download/nginx-1.21.3.tar.gz && tar -zxf nginx-1.21.3.tar.gz && cd nginx-1.21.3/
[root@localhost ~] ./configure && make && make install
[root@localhost ~] /usr/local/nginx/sbin/nginx
# 配置index.html文件
[root@localhost ~] cat /usr/local/nginx/html/index.html
192.168.199.11
# 修改arp_ignore和arp_announce配置
# 注意!!!我的网卡是ens33,按自己实际网卡来操作,比如eth0目录下
[root@localhost ~] echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
[root@localhost ~] echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
[root@localhost ~] echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~] echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# 环回接口配置VIP,实现对内可见对外隐藏
# 切记!!! 切记!!! 掩码是4个255
[root@localhost ~] ifconfig lo:2 192.168.199.101 netmask 255.255.255.255
WEB服务器2
操作同WEB服务器1
LVS服务器
# 修改keepalived.conf文件
[root@localhost ~] cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
# ... 此处省略关于邮件的配置
router_id LVS_01 # 表示运行keepalived服务器的一个标识
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
interface ens33 # 指定HA监测的网卡 根据自己实际网卡配置,例如eth0
virtual_router_id 51 # 虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 100 # 定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
advert_int 1 # 设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { # 设置验证类型和密码
auth_type PASS # 设置验证类型,主要有PASS和AH两种
auth_pass 1111 # 设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress { # 设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
192.168.199.101/24 dev ens33 label ens33:2 # 192.168.199.101为vip ens33同上 ens33:2接口
}
}
# 配置RS服务
virtual_server 192.168.199.101 80 {
delay_loop 6 # 设置运行情况检查时间,单位是秒
lb_algo rr # 设置负载调度算法,这里设置为rr,即轮询算法
lb_kind DR # 设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
persistence_timeout 50 # 会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
# 有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
# 需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作
# 那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
protocol TCP # 指定转发协议类型,有TCP和UDP两种
# WEB服务器1 80端口
real_server 192.168.199.11 80 {
weight 1 # 配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
# 分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3 # 表示3秒无响应超时
nb_get_retry 3 # 表示重试次数
delay_before_retry 3 # 表示重试间隔
}
}
# WEB服务器2 80端口
real_server 192.168.199.12 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# 配置完成之后重启keepalived
# centos7
[root@localhost ~] systemctl restart keepalived.service
# ipvsadm 查看rs情况
# ipvsadm -lnc 会查看当前连接情况
[root@localhost ~] ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.199.101:80 rr
-> 192.168.199.11:80 Route 1 0 0
-> 192.168.199.12:80 Route 1 0 0
访问VIP
# 请求结果会轮着来
[root@localhost ~] curl -X GET http://192.168.199.101:80
192.168.199.11
[root@localhost ~] curl -X GET http://192.168.199.101:80
192.168.199.12