接着上一篇继续延伸 准备环境 vip 192.168.12.100 lvs_director_master 192.168.12.4 lvs_director_slave 192.168.12.8 nginx1 192.168.12.2 nginx2 192.168.12.3 tomcat1 192.168.12.6 tomcat2 192.168.12.7nginx
###What did you do today ###什么是高可用?web
lvs做为负载均衡器,全部请求都先到达lvs,可见lvs处于很是重要的位置,若是lvs服务器宕机,后端web服务器将没法提供服务,影响严重。算法
为了防止负载均衡服务器的宕机,须要创建一个备份机。主服务器和备份机上都运行高可用监控程序,经过传送诸如"i am alive"这样的信息来监控对方的运行情况。当备份机不能再必定的时间内收到这样的信息,它就接管主服务器的服务ip并继续提供负载均衡服务,当备用服务器又从主服务器收到"i am alive"这样的信息时,它就释放服务ip地址,这样主服务器就开始再次提供负载均衡服务。vim
###什么是keepalived?后端
keepalived是集群管理中保证集群高可用的一个服务软件,用于防止单点故障。tomcat
keepalived的做用是检测web服务器的状态,若是有一台web服务器司机或者工做出现故障,keepalived将检测到,而且将有故障的web服务器从系统中剔除,当web服务器工做正常后keepalived自动将web服务器加入到服务器群中 ,这些工做所有自动完成,不须要人工干涉,须要人工作的只是修复故障的web服务器。bash
###keepalived工做原理服务器
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。负载均衡
虚拟路由冗余协议,能够认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup。master上面有一个对外提供服务的vip(该路由器所在局域网内其余机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就须要根据VRRP的优先级来选举一个backup当master,这样的话就能够保证路由器的高可用了。jsp
keepalived主要有3个模块,分别是core、check和VRRP。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各类检查方式。VRRP模式是来实现VRRP协议的。
###LVS+Keepalived实现主备过程
初始状态
![]()
主机宕机,备用机提供服务
![]()
主机恢复
![]()
keepalived基础配置完毕后,查询系统服务是否存在
chkconfig --list
![]()
配置日志文件
1.将keepalived日志输出到local0 vim /etc/sysconfig/keepalived,KEEPALIVED_OPTIONS="-D -d -S 0"
2.在/etc/rsyslog.conf添加: local0.* /var/log/keepalived.log ![]()
3.重启启动keepalived和rsyslog服务: service rsyslog restart service keepalived restart 4. 进入/var/log/下面,找到keepalived.log ![]()
5.查看keepalived.log。tail -f keepalived.log ![]()
6.差一点忘记说了,添加可执行权限:chmod +x /etc/init.d/keepalived ![]()
####配置keepalived
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
}
virtual_server 192.168.200.100 443 {
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.201.100 443 {
weight 1
SSL_GET {
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 10.10.10.2 1358 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
sorry_server 192.168.200.200 1358
real_server 192.168.200.2 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.200.3 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 10.10.10.3 1358 {
delay_loop 3
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.200.4 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.200.5 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
复制代码
! Configuration File for keepalived
global_defs {
notification_email {
# 发生故障时发送的邮箱
#xxxx@163.com
}
# 使用哪一个邮箱发送
#notification_email_from xxxx@163.com
# 发件服务器
#smtp_server xxx.com
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_lvs {
script "/etc/keepalived/lvs_check.sh" ##监控脚本
interval 2 ##时间间隔,2秒
weight -20 ##权重
}
vrrp_instance VI_1 {
state MASTER # 标示为主lvs
interface eth0 # HA检测端口
virtual_router_id 51 # 主备的virtual_router_id 必须相同
priority 100 # 优先级,备lvs要比主lvs稍小
advert_int 1 # VRRP Multicast 广播周期秒数
authentication { # 定义认证
auth_type PASS # 认证方式为口令认证
auth_pass 1111 # 定义口令
}
track_script {
check_lvs #监控脚本
}
virtual_ipaddress { # 定义vip
192.168.12.100 # 多个vip可换行添加
}
}
virtual_server 192.168.12.100 80 {
delay_loop 6 # 每隔6秒查看realserver状态
lb_algo wlc # 调度算法为加权最小链接数
lb_kind DR # lvs工做模式为DR(直接路由)模式
nat_mask 255.255.255.0
persistence_timeout 50 # 同一IP 的链接50秒内被分配到同一台realserver(测试时建议改成0)
protocol TCP # 用TCP监测realserver的状态
real_server 192.168.12.2 80 { # 定义realserver
weight 3 # 定义权重
TCP_CHECK { # 注意TCP_CHECK和{之间的空格,若是没有的话只会添加第一个realserver
connect_timeout 3 # 三秒无响应超时
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.12.3 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
复制代码
修改备用lvs下/etc/keepalived/keepalived.conf文件。配置内容基本和主lvs保持一致,须要注意的地方:修改state为BACKUP,priority比MASTER低,virtual_router_id和master保持一致。
在主备lvs中/etc/keepalived/目录下,建立lvs_check.sh脚本,内容以下:
#!/bin/sh
aa=`ipvsadm -ln`
str="Route"
bb=`echo $aa|grep $str|wc -l`
if [ $bb = 0 ];then
service lvsdr start
sleep 3
aa=`ipvsadm -ln`
bb=`echo $aa|grep $str|wc -l`
if [ $bb = 0 ];then
killall keepalived
fi
fi
复制代码
service lvsdr stop service keepalived stop
![]()
![]()
咱们接着经过ipvsadm查看lvs是否处于启动状态,发现lvs启动了!
![]()
![]()
开启192.168.12.2和192.16812.3的nginx服务和lvsdr服务。
开启192.168.12.6和192.168.12.7的tomcat
接着咱们经过ip a 命令查看虚拟ip
主lvs设备的虚拟ip信息
备lvs设备的虚拟ip信息 ![]()
![]()
出现这种状况彷佛和咱们想象的不太同样。咱们能够先关闭防火墙。咱们先关闭主lvs的keepalived服务,而后再关闭备lvs的keepalived服务。而后从新启动主lvs、备用lvs的keepalived服务便可。重启以后,咱们发现备用lvs的eth0节点没有虚拟ip192.168.12.100了,如我所愿!
主备lvs启动成功后,第一次访问192.168.12.100。
第二次访问192.168.12.100
当咱们停掉主lvs,发现192.168.12.100还能够访问。此时咱们在备lvs,经过ip a 查看发现eth0节点多了虚拟ip 192.168.12.100
###Summary
明天进行问题总结,而后实现LVS+Keepalived双主模式。