lvs+keepalived+tomcat负载均衡
#步骤
tomcat1:10.0.1.139
tomcat2:10.0.1.140
lvs1:10.0.1.137
lvs2:10.0.1.138
tips:nginx这里我们就不装了,主要nginx和tomcat都是web应用的一种,这里我们主要展示lvs+keepalived+tomcat负载均衡
1.安装tomcat1 、2
cd /data
tar zxvf jdk-8u161-linux-x64.tar.gz
mv jdk1.8.0_161/ jdk1.8
添加环境变量
vi /etc/profile
在末尾加入如下代码
JAVA_HOME=/data/jdk1.8
JRE_HOME=/data/jdk1.8
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
生效环境变量-检查是否安装成功
source /etc/profile
java -version
上传tamcat源码-解压源码
cd /data
rz
tar zxvf apache-tomcat-8.5.43.tar.gz
mv apache-tomcat-8.5.43 tomcat
启动tomcat
cd /data/tomcat/bin
./startup.sh
#tips:另一个你可以拷贝过去,也可以重新安装配置
2.安装lvs1.2
yum -y install keepalived
yum -y install ipvsadm keepalived
3.配置lvs1 和 2 负载均衡
cd /etc/keepalived/
vim keepalived.conf
!! Configuration File for keepalived
global_defs {
notification_email {
746593797@qq.com #填写邮箱用于监控,可不写,后期用zabbix监控
}
notification_email_from 746593797@qq.com #指定发件人
smtp_server 192.168.200.1 #smtp服务器地址
smtp_connect_timeout 30 #smtp连接超时时间
router_id Apache_lb01 #主机id,不可重复,要保持唯一性
}
# 这是一个示列
vrrp_instance VI_1 {
state MASTER #keepalive的状态,主还是备?这里设置为主
interface eth0 #设置绑定虚拟ip的网卡
virtual_router_id 51 #这个虚拟的id,主备必须保证都一样
priority 100 #优先级,值越大,优先级越高!
advert_int 1 #master和backup之间同步检查的时间间隔。
authentication {
#下面为2个keepalived之间的权限认证配置,auth_type 为验证类型,auth_pass 为密码。主备必须保证都一样。
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#设置的虚拟ip,可以设置多个
10.0.1.100
}
}
virtual_server 10.0.1.100 8080 { # 这里配置虚拟服务器 (192.168.1.220 为虚拟IP, 监听8080端口)客户端就访问这个地址。
delay_loop 6 #健康检查时间间隔,单位是秒。
lb_algo rr #负载均衡调度算法,互联网应用常使用 wlc 或 rr。
lb_kind DR #负载均衡转发规则。一般包括 DR,NAT,TUN3 种,本次使用DR的方式
nat_mask 255.255.255.255
persistence_timeout 0 #会话保持时间,单位是秒。这个会话是网络7层传输协议中的(第三层)会话。比如我们把它设置为60,那么客户端60秒内访问LVS虚拟服务器的请求都会被转到到同1个后台服务器节点。如果设置为0,那么每次请求都会根据配置的调度情况进行分发。
protocol TCP #转发协议 protocol. 一般有 tcp 和 udp 两种
real_server 10.0.1.139 8080 { #这里配置真实服务器的地址与端口。
weight 1 #权重,一般都是机器性能好的高一些,低的小一些
TCP_CHECK {
nb_get_retry 3
delay_before_retry 3
connect_timeout 5
connect_port 8080
}
}
real_server 10.0.1.140 8080 {
weight 1
TCP_CHECK { # 健康检测
nb_get_retry 3 # 重试次数
delay_before_retry 3 # 重试次数的时间间隔
connect_timeout 5 # 连接超时时间
connect_port 8080 # 健康检测的端口
}
}
}
第二个lvs2
! Configuration File for keepalived
global_defs {
notification_email {
746593797@qq.com #填写邮箱用于监控,可不写,后期用zabbix监控
}
notification_email_from 746593797@qq.com #指定发件人
smtp_server 192.168.200.1 #smtp服务器地址
smtp_connect_timeout 30 #smtp连接超时时间
router_id Apache_lb01 #主机id,不可重复,要保持唯一性
}
# 这是一个示列
vrrp_instance VI_1 {
state BACKUP #keepalive的状态,主还是备?这里设置为备注意这里一定要大写,这个是变量,所以别搞错了
interface eth0 #设置绑定虚拟ip的网卡
virtual_router_id 51 #这个虚拟的id,主备必须保证都一样
priority 90 #优先级,值越大,优先级越高!
advert_int 1 #master和backup之间同步检查的时间间隔。
authentication {
#下面为2个keepalived之间的权限认证配置,auth_type 为验证类型,auth_pass 为密码。主备必须保证都一样。
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#设置的虚拟ip,可以设置多个
10.0.1.100
}
}
virtual_server 10.0.1.100 8080 { # 这里配置虚拟服务器 (192.168.1.220 为虚拟IP, 监听8080端口)客户端就访问这个地址。
delay_loop 6 #健康检查时间间隔,单位是秒。
lb_algo rr #负载均衡调度算法,互联网应用常使用 wlc 或 rr。
lb_kind DR #负载均衡转发规则。一般包括 DR,NAT,TUN3 种,本次使用DR的方式
nat_mask 255.255.255.0
persistence_timeout 0 #会话保持时间,单位是秒。这个会话是网络7层传输协议中的(第三层)会话。比如我们把它设置为60,那么客户端60秒内访问LVS虚拟服务器的请求都会被转到到同1个后台服务器节点。如果设置为0,那么每次请求都会根据配置的调度情况进行分发。
protocol TCP #转发协议 protocol. 一般有 tcp 和 udp 两种
real_server 10.0.1.139 8080 { #这里配置真实服务器的地址与端口。
weight 1 #权重,一般都是机器性能好的高一些,低的小一些
TCP_CHECK {
nb_get_retry 3
delay_before_retry 3
connect_timeout 5
connect_port 8080
}
}
real_server 10.0.1.140 8080 {
weight 1
TCP_CHECK { # 健康检测
nb_get_retry 3 # 重试次数
delay_before_retry 3 # 重试次数的时间间隔
connect_timeout 5 # 连接超时时间
connect_port 8080 # 健康检测的端口
}
}
}
验证是否配置成功?
[root@lvs1 keepalived]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.1.100:8080 rr
-> 10.0.1.139:8080 Route 1 0 0
-> 10.0.1.140:8080 Route 1 0 0
4.tomcat1和2-创建real服务器运行脚本
vim /sbin/realdr.sh
#!/bin/bash
VIP=10.0.1.100 #这里修改成你自己的虚拟ip就可以了,其他不用动的
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/default/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/default/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
chmod 755 /sbin/realdr.sh
/sbin/realdr.sh start
#tips:另一个也是如此
5.测试
10.0.1.100:8080
此时访问虚拟机ip,应该是不断变化里面的内容的,如是,那就负载均衡成功
鼠标点不过来的话,按F5快速刷新
可能遇到的问题?
lvs负载均衡 虚拟ip:10.0.1.100 只显示10.0.1.139的内容,不显示10.0.1.140的内容 ?
排查:
1. 防火墙已关闭
2.端口已确认都是8080
3.也能ping通
4.二台后端服务器正常运行
5.浏览器缓存已清理
6.刷新了几十遍,就是不显示另外一台服务器的内容
7.已重启keepalived
解决:MASTER BACKUP 变量要设置大写,而且一个为主一个从