Nginx于Keepalived可以实现高可用,实现双机热备+自动切换,这种操作在现在的集群系统中,比较的常见,还有,通过keepalived和redis实现热备份的,还有和mysql实现的,类似的案例挺多。
系统架构
keepalived虚拟化出192.168.100.100
和192.168.100.101
的虚拟化ip,这个系统是两台计算机上,有4个tomcat,2个Nginx,2个Keepalived实现负载均衡策略。
节点信息
节点 | 服务 | 安装目录 |
---|---|---|
192.168.100.10:80 | nginx1 | /usr/local/nginx |
192.168.100.11:80 | nginx2 | /usr/local/nginx |
192.168.100.100 | keepalived1 | /usr/local/keepalived |
192.168.100.101 | keepalived2 | /usr/local/keepalived |
192.168.100.10:8080 | tomcat1 | /usr/local/nginx/tomcat/tomcat1 |
192.168.100.10:8081 | tomcat2 | /usr/local/nginx/tomcat/tomcat2 |
192.168.100.11:8080 | tomcat3 | /usr/local/nginx/tomcat/tomcat1 |
192.168.100.11:8081 | tomcat4 | /usr/local/nginx/tomcat/tomcat2 |
Tomcat端口分配
节点 | SHUTDOWN(端口) | HTTP/1.1(端口) | AJP/1.3(端口) |
---|---|---|---|
192.168.66.100:8080 | 8005 | 8081 | 8009 |
192.168.100.11:8081 | 8006 | 8082 | 8010 |
192.168.100.11:8080 | 8005 | 8081 | 8009 |
192.168.100.11:8081 | 8006 | 8082 | 8010 |
安装前准备
1、Centos之Keepalived安装-yellowcong
2、Nginx之解压编译安装-yellowcong
3、CentOS之Tomcat的安装-yellowcong
配置keepalived
Keepalived会根据virtual_router_id
和authentication
两个来确定集群关系。
#修改配置
vim /etc/keepalived/keepalived.conf
#配置文件
! Configuration File for keepalived
global_defs {
#从服务器最改一下这个
router_id node1 #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}
#监控服务.NGINX mysql等
vrrp_script chk_nginx {
script "/usr/local/keepalived/check_nginx.sh"
#每2s检查一次
interval 2
#每次检查-20
weight -20
}
vrrp_instance VI_1 {
##主从设置 MASTER/BACKUP
state MASTER
#网卡名称
interface eth0
#同一个集群下这个 router_id是一样的
virtual_router_id 51
#本机的ip,需要修改
mcast_src_ip 192.168.100.10
#优先级,从节点 配置,需要小于主节点
priority 100
#设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
advert_int 1
#认证的密码
authentication {
auth_type PASS
#设定授权密码,密码相同的为一个集群
auth_pass yellowcong
}
#触发的脚本
track_script {
chk_nginx #检测脚本,上面配置的
}
#虚拟ip地址
virtual_ipaddress {
192.168.100.100
192.168.100.101
}
}
检查脚本
下面是脚本内容,用来进行nginx是否存活的监测
#创建并赋予权限
touch check_nginx.sh && chmod a+x check_nginx.sh
#编辑文件
vim check_nginx.sh
#################下面是内容####################
#!/bin/bash
COUNT=$(ps -C nginx --no-header |wc -l)
echo $COUNT
#判断Nginx 是否都挂掉了
if [ $COUNT -eq 0 ]
then
#如果挂掉了,就启动nginx
/usr/local/nginx/sbin/nginx
echo "重启nginx"
#等5秒钟后,再次查看是否 启动成功
sleep 5
#如果nginx没有启动起来,就直接干掉keepalived
COUNT=$(ps -C nginx --no-header |wc -l)
if [ $COUNT -eq 0 ]
then
echo "干掉keepalived"
#如果killall命令不能使用,就需要安装psmisc工具了
#yum install -y psmisc
killall keepalived
fi
fi
Nginx 配置
vim /usr/local/nginx/conf/nginx.conf
#配置完成一个后,直接将另一个拷贝就可以了
#第一个参数 文件地址
#第二个参数 目标地址
scp 192.168.100.10:/usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/
#################配置的内容###############
#user nobody;
#配置的线程数目和cpu处理器的核心数目一致
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#负载均衡
upstream myapp{
server 192.168.100.11:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.100.11:8081 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.100.10:8081 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.100.10:8081 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name localhost;
#地址匹配
location / {
#root html;
#index index.html index.htm;
proxy_set_header X-real-ip $remote_addr;
proxy_pass http://myapp;
}
#错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
启动成功后
直接用ifconfig 是看不到虚拟出来的ip的,这点需要注意,要使用ip a
命令
#查看虚拟出来的ip
#只有主节点有虚拟出来的ip,子节点没有
ip a
使用ip a
命令查看到vip的ip
ip访问
192.168.100.100访问正常,一顿刷新,4个tomcat的数据都可以访问到
192.168.100.101访问正常
错误合集
-bash: killall: 未找到命令
没有发现killall命令,尴尬了吧
killall的命令若不存在就会报错,需要安装下面的工具
yum install -y psmisc