Nginx+Keepalived实现主从双机热备

使用两台虚拟机:
192.168.0.127 主服务器
192.168.0.128 备用服务器
虚拟IP地址(访问地址):192.168.0.189
监听端口:8081

1,在主备机器上安装keepalived,
sudo apt-get install keepalived
2,配置keepalived
配置中的state MASTER决定了节点为主节点
priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
新建配置文件keepalived.conf到 /etc/keepalived/(也需要新建文件夹)
主节点的配置如下:
vrrp_instance VI_1{
state MASTER #备用服务器为BACKUP
interface eth0
virtual_router_id 51
priority 100 #备用服务器比100小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.189
}
}
备用节点的配置如下:
vrrp_instance VI_1{
state BACKUP #备用服务器为BACKUP
interface eth0 #监测网络接口
virtual_router_id 51
priority 90 #备用服务器比100小
advert_int 1 #VRRP Multicast广播周期秒数
authentication {
auth_type PASS #VRRP认证方式,主备必须一致
auth_pass 1111 #密码
}
virtual_ipaddress {
192.168.0.189 #VRRP HA虚拟地址
}
}
3.安装Nginx
sudo apt-get install nginx

4.主备机器配置Nginx
删除/etc/nginx/sites-available/default文件中的所有原配置
添加配置:
upstream jzq {
ip_hash; #ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上
server 192.168.0.127:8081 weight=100;#权重,越大分配越多
server 192.168.0.128:8081 weight=10;
}
server {
listen 80; #nginx监听80端口
server_name localhost;
location / {
proxy_pass http://jzq/;
}
}

5.启动keepalived和nginx
cd /etc/init.d
./keepalived restart
nginx -s reload
6.启动tomcat访问。
说明:分别在主备服务器上执行:ip addr
192.168.0.127服务器显示:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:84:83:df brd ff:ff:ff:ff:ff:ff
inet 192.168.0.127/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.0.189/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe84:83df/64 scope link
valid_lft forever preferred_lft forever
192.168.0.128服务器显示:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:cb:7f:20 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.128/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fecb:7f20/64 scope link
valid_lft forever preferred_lft forever
keepalived把192.168.0.189虚拟IP地址分配个主服务器192.168.0.127,所以192.168.0.127服务器上会出现192.168.0.189的IP, 当192.168.0.127关机时,keepalived会把192.168.0.189的IP分配给192.168.0.128。manster由服务器192.168.0.127转移到192.168.0.128。当192.168.0.127服务器开机时,keepalived会把manster重新分配给192.168.0.127

192.168.0.127服务器nginx 收到访问192.168.0.189的请求,再由nginx把请求转发至192.168.0.127的web服务。
ip_hash:解决跳转在服务器192.168.0.127和服务器192.168.0.128来回切换,也解决了session共享问题。



备注:定时任务的执行和keepalived的配置
定时任务异步触发,主备服务器都需要重新部署一个tomcat用来放置定时任务的项目(tomcat-qs)。主备服务器后台管理中定时任务用虚拟IP去调用定时任务,主备服务器只需要一个tomcat-qs处于启动状态,而另一个服务器上的tomcat-qs必须关闭。
效果:主备服务器的后台定时任务配置为虚拟IP的地址,由nginx把定时任务的调用分配给主服务器中的tomcat-qs,如果主服务器关机,keepalived将备用服务器切换为master状态,并执行start_tomcat.sh脚本,启动备用服务器的tomcat-qs,当主服务器启动,keepalived将主服务器切换为master状态,并执行start_tomcat.sh脚本,启动主服务器的tomcat-qs,备用服务器切换为backup状态,执行stop_tomcat.sh脚本,关闭备用服务器的tomcat-qs。 ps:tomcat-qs只在master服务器启动,backup服务器的tomcat-qs一直处于关闭状态。
check.sh:查看服务器中项目tomcat(tomcat-7.0.81)是否启动
start_tomcat.sh:查看服务器中两个tomcat进程
stop_tomcat.sh:查看服务器中两个tomcat进程
修改主备服务器的keepalived.conf:(修改部分为红色字体)
vrrp_script chk_tomcat_qs { #自定义vrrp脚本调用名为chk_tomcat_qs
script "/etc/keepalived/check.sh" #执行脚本check.sh(查看tomcat进程是否存在);
interval 1 #每个1秒检查一次;
weight -20 #检测失败则权重-20;成功将不执行;
vrrp_instance VI_1{
state BACKUP #备用服务器为BACKUP
interface eth0
virtual_router_id 51
priority 100 #备用服务器比100小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.189
}

track_script { #调用自定义的vrrp脚本调用名
chk_tomcat_qs
}

notify_master "/etc/keepalived/start_tomcat.sh master"
notify_backup "/etc/keepalived/stop_tomcat.sh backup"
}

check.sh:
#!/bin/bash
count = `ps aux | grep -v grep | grep apache-tomcat-7.0.81 | wc -l`
if [ $count > 0]; then
exit 0
else
exit 1
fi

start_tomcat.sh
#!/bin/bash
count=$(ps aux | grep -v grep | grep apache-tomcat-qs | wc -l)
tc=$(ps aux | grep -v grep | grep apache-tomcat-7.0.81 | wc -l)
if [ $count -lt 1 ]; then
/bin/su -s /bin/sh - anxinfu -c "cd /home/anxinfu/apache-tomcat-qs/bin/&&./startup.sh"
else
echo "tomcat is start status"
fi
if [ $tc -lt 1 ]; then
/bin/su -s /bin/sh - anxinfu -c "cd /home/anxinfu/apache-tomcat-7.0.81/bin/&&./startup.sh"
else
echo "tomcat is start"
fi

stop_tomcat.sh
#!/bin/bash
count=$(ps aux | grep -v grep | grep apache-tomcat-qs | wc -l)
tc=$(ps aux | grep -v grep | grep apache-tomcat-7.0.81 | wc -l)
if [ $count -eq 1 ]; then
/bin/su -s /bin/sh - anxinfu -c "cd /home/anxinfu/apache-tomcat-qs/bin/&&./shutdown.sh"
else
echo "tomcat is stop"
fi
if [ $tc -lt 1 ]; then
/bin/su -s /bin/sh - anxinfu -c "cd /home/anxinfu/apache-tomcat-7.0.81/bin/&&./startup.sh"
else
echo "tomcat is start"
fi

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值