1、在上一节的基础上,再加一个nginx服务器,并配置好负载均衡,系统结构如下:
主机名 | 软件版本 | IP |
---|---|---|
java | jdk-1.7 | |
nginx-master | nginx-1.15 | 10.1.1.11 |
keepalived-master | keepalived-2.0.15 | 10.1.1.11 |
nginx-slave | nginx-1.15 | 10.1.1.12 |
keepalived-slave | keepalived-2.0.15 | 10.1.1.12 |
tomcat1 | tomcat-7.0.94 | 10.1.1.13 |
tomcat2 | tomcat-7.0.94 | 10.1.1.14 |
memcached | 10.1.1.15 | |
memcached-slave | 10.1.1.16 |
2、在两台nginx服务器上必须使用tar包源码安装keepalived,不然会遇到很多问题,并修改配置,如下:
安装:
tar -zxf keepalived-2.0.15.tar.gz
cd keeplived-2.0.15
./configure --prefix=/usr/local/keepalived
make && make install
3、修改10.1.1.11主节点的keepalived.conf,配置的路径为:/etc/keepalived/keepalived.conf:
#vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_MASTER #此id必须是唯一的,不允许重复
}
vrrp_script chk-nginx { #Nginx状态检测
script "/usr/local/keepalived/sbin/chk-nginx.sh" #脚本路径和名称
interval 3 #3秒检测一次
weight 2 #权重值
}
vrrp_instance VI_1 {
state MASTER #此节点为主节点
interface ens33 #VIP地址绑定的网卡
virtual_router_id 66 #id不允许重复
priority 100 #优先级,优先级大的会获取到VIP,MASTER节点必须大于BACKUP
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {#VIP地址
10.1.1.100
}
track_script
{
chk-nginx #此处要对应上面Nginx状态检测的名称
}
}
# 定义对外提供的LVS的VIP以及port
virtual_server 10.1.1.100 80 {
delay_loop 6 # 设置健康检查时间,单位为秒
lb_algo wrr # 设置负载调度的算法为wrr
lb_kind DR # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
netmask 255.255.255.0
persistence_timeout 0 # 同一IP 0秒内的请求都发到同个real server
protocol TCP
real_server 10.1.1.11 80 { # 指定real server1的ip地址
weight 3 # 配置节点权值,数值越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
real_server 10.1.1.12 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
4、修改10.1.1.12备节点的keepalived.conf:
global_defs {
router_id LVS_BACKUP
}
vrrp_script chk-nginx {
script "/usr/local/keepalived/sbin/chk-nginx.sh"
interval 3
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 66
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.100
}
track_script
{
chk-nginx
}
}
# 定义对外提供的LVS的VIP以及port
virtual_server 10.1.1.100 80 {
delay_loop 6 # 设置健康检查时间,单位为秒
lb_algo wrr # 设置负载调度的算法为wrr
lb_kind DR # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
netmask 255.255.255.0
persistence_timeout 0 # 同一IP 0秒内的请求都发到同个real server
protocol TCP
real_server 10.1.1.11 80 { # 指定real server的ip地址
weight 3 # 配置节点权值,数值越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
real_server 10.1.1.12 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
5、Nginx状态检测的脚本:
#!/bin/bash
#author:fansik
#description:check nginx service
if [ `ps -ef|grep -v grep |grep "nginx: master process"|wc -l` -eq 0 ]
then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -ef|grep -v grep |grep "nginx: master process"|wc -l` -eq 0 ]
then
killall keepalived
fi
fi
注:整个逻辑为:
- 检查nginx: master process进程在不在,如果不在,则执行/etc/init.d/nginx start,自动拉起nginx;
- 再次检查nginx: master process进程在不在,如果不在,则执行killall keepalived,杀掉当前的keepalived服务;
- 若Nginx和keepalived服务同时都在运行,我们手动杀掉nginx进程的话,keepalived进程会自动拉起nginx。
- 使用此脚本前提是必须安装psmisc,可使用yum安装,不然会excited with status 127;
6、keepalived配置完成后,使用systemctl keepalived start启动,并观察两个服务器的网卡信息:
先看10.1.1.11上,这个是我们设置的master节点,可以看到当前的VIP地址10.1.1.100绑定在ens33网卡上:
再看10.1.1.12 SLAVE节点的网卡信息,当前无VIP地址信息:7、keepalived主备切换测试:
将MASTER节点keepalived停掉,再查看网卡信息:
MASTER节点无VIP信息:
SLAVE节点出现VIP信息:再将MASTER节点keepalived服务开启:
MASTER:VIP再次回到MASTER节点上
SLAVE:无VIP信息8、在网页上输入 http://10.1.1.100:80 ,可以访问到nginx后端的负载地址:keepalived高可用性基础配置已经完成。