工具及软件
1. centos 7.x (安装在 vm 中) 不会可以百度
2. nginx -1.6.2 不会 请看这里
3. tomcat7 不会请看这里
4. jdk 1.7 不会请看这里
5.工作目录 /mytest
6. keepalived -1.2.1
在进行本章前,请先完成 nginx+tomcat实现应用服务器负载均衡
热备:(MASTER)-(BACKUP )模式,备份机平常就是个摆设,浪费资源
互备:(MASTER、BACKUP)-(BACKUP、MASTER)模式,备份机也是主机,主机也是备份机,资源利用率高
热备又分为两种情况:
第一种情况:服务器层的热备(比如服务器宕机、keepalived宕、网络不同,这个主要针对ip及keepalived)
第二种情况:应用层(web)的热备(比如web应用端口不同,nginx进程被意外kill,这个主要针对端口)
网络拓扑
3台虚拟机
finder02 (192.168.1.202): 安装 2个 tomcat 端口 8081 8082
finder220 (192.168.1.220) :安装 2个 tomcat 端口 8081 8082 , 1个 nginx 端口 80 1个 keepalived (master)
finder221 (192.168.1.221): 安装 2个 tomcat 端口 8081 8082 ,1个 nginx 端口 80 1个 keepalived (slave)
高可靠性配置
我们现在接着 章节《nginx+tomcat实现应用服务器负载均衡》来配置 HA 。所以我们已经在 finder220 上配置了 nginx 集群
接下来 我们 在 finder02 上 安装 2个 tomcat 具体安装这里不在赘述
在 finder 221上 安装2个 tomcat ,nginx 具体安装这里不在赘述
我们可以先启动所有的 tomcat
接下来我们配置 finder221上的nginx
启动 finder221 nginx:
[root@finder221 bin]# /usr/local/webserver/nginx/sbin/nginx
配置 keepalived
安装keepalived , 我们使用 yum 安装,当然也可以手动安装
[root@finder220 ~]# yum install keepalived
安装完成后需要配置keepalived的配置文件,文件位于/etc/keepalived/keepalived.conf,下图中为需要修改的部分,默认的配置文件中在其后还有很多内容,本实例只是简单的DEMO,所以那些内容暂时用不上,可以全部删除,接下来说下图中这部分的配置
- state 主服务器为MASTER,其他服务器均为BACKUP
- interface 通信用的网卡,在之前查看IP时可以看到 我的是 ens33
- virtual_router_id #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下的MASTER和BACKUP必须一致
- priority 优先级,主服务器必须大于其他服务器,数值越大优先级越高
- authentication 主从服务器必须一致
- mcast_src_ip #vrrp实体(本机)服务器的IP 发送多播包的地址,如果不设置默认使用绑定网卡的primary ip
- virtual_ipaddress 虚拟IP地址,主从服务器必须一致,此IP为客户端访问时使用的IP 可以设置多个虚拟IP地址,每行一个
- auth_type PASS #主从服务器验证方式 设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 101
advert_int 1
mcast_src_ip 192.168.1.220
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.225
}
slave keepalived 配置
vrrp_instance VI_1 {
state SLAVE
interface ens33
virtual_router_id 51
priority 100
advert_int 1
mcast_src_ip 192.168.1.221
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.225
}
启动 keepalivd
# service keepalived start
查看 网卡信息
可以看到 finder220 上 虚拟IP地址
如果在 finder221 上看不到
但是如果finder221上也看到 虚拟IP地址,原因是防火墙阻止了服务器之间的vrrp通信,分别执行以下命令,需要针对自己电脑进行修改的只有interface后的网卡,其他的照抄即可
224.0.0.18为组播地址
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
至此Keepalived的配置也完成了,通过ip addr查看可发现主服务上带有192.168.1.220的虚拟IP而从服务器上没有,关闭主服务器的keepalived,虚拟IP则会转移到从服务器上来,测试服务器通过浏览器访问 http://192.168.1.225 可看到虚拟IP转移的效果,页面会从主服务器的页面转换为从服务器的页面
完成上述步骤之后keepalived已经可以实现虚拟IP转移了,但是实际应用当中我们需要的是自动进行虚拟IP的转移,所以我们还需要配置keepalived的脚本,使其能够在某一个nginx无法提供服务的时候自动将虚拟IP转移到备用服务器,以下脚本说明: 监控nginx的进程, 如果进程关闭 再次启动,等5秒后 再看nginx是否启动成功,如果没有nginx进程,那么就关闭 keepalived进程,我们在/etc/keepalived目录下创建一个名为check_status.sh的文件,然后键入以下内容
并且添加可执行权限
# vi /etc/keepalived/check_status.sh
#!/bin/bash
while :
do
nginxpid=`ps -C nginx --no-header | wc -l`
if [ $nginxpid -eq 0 ];then
/usr/local/webserver/nginx/sbin/nginx 测试的时候这个不要执行 ,正式部署的时候打开
sleep 5
nginxpid=`ps -C nginx --no-header | wc -l`
echo $nginxpid
if [ $nginxpid -eq 0 ];then
service keepalived stop
fi
fi
sleep 5
done
添加可执行权限
# chmod +x check_status.sh
配置keepalived.conf
[root@finder220 ~]# vi /etc/keepalived/keepalived.conf
vrrp_script check_status { s和{需要空格
script "/etc/keepalived/check_status.sh"
interval 5
weight -5
}
#应用层热备需要添加的内容
vrrp_script chk_http_port {
script "</dev/tcp/127.0.0.1/80"
interval 1 #检测脚本执行的间隔
weight -2 #权重
}
virtual_ipaddress {
192.168.1.225
}
track_script { 注意 t和{ 需要空格
chk_http_port
check_status
}
从keepalived 中 配置
vrrp_instance VI_1 {
state MASTER 注意 从服务器这里的state 不是SLAVE 需要改成 MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
mcast_src_ip 192.168.1.221
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.225
}
track_script {
chk_http_port
check_status
重启 keepalived
# service keepalived restart
这时 我们
关闭 finder220 nginx =》 finder220 keepalived关闭 自动转到 finder221
这时重新开启 nginx =》 虚拟IP 又转到了finder220上
至此 高可靠性集群 搭建成功。
其他命令 :
ip addr
service keepalived restart
service keepalived stop
service keepalived start
service keepalived status
tail -f /var/log/message => keepalived 动态默认日志