Nginx+keepalived负载均衡高可用

结构图

环境:
主 服务器:192.168.239.10
备 服务器:192.168.239.20
Web 服务器1:192.168.239.40
Web 服务器2:192.168.239.30
vip:192.168.239.100
客户端:192.168.239.200

配置两台节点web服务器(192.168.239.30、192.168.239.40 )

配置第一台节点服务器(192.168.239.30)

这里我用的tomcat作为web服务器当然也可以用nginx与apache作为web服务器

#首先将tomcat所需软件包拉入opt目录并关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#安装jdk
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm
#设置jdk的环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile.d/java.sh
java -version
#安装tomcat
tar zxvf apache-tomcat-8.5.16.tar.gz
mkdir /usr/local/tomcat #创建目录作为tomcat配置配置路径
mv apache-tomcat-8.5.16 /usr/local/tomcat/
#配置tomcat环境变量
vim /etc/profile.d/tomcat.sh
export CATALINA_HOME1=/usr/local/tomcat/tomcat
export CATALINA_BASE1=/usr/local/tomcat/tomcat
export TOMCAT_HOME1=/usr/local/tomcat/tomcat
source /etc/profile.d/tomcat.sh
#修改 tomcat1 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
vim /usr/local/tomcat/apache-tomcat-8.5.16/bin/startup.sh
-----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE
export CATALINA_HOME=$CATALINA_HOME
export TOMCAT_HOME=$TOMCAT_HOME vim /usr/local/tomcat/apache-tomcat-8.5.16/bin/shutdown.sh
-----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE
export CATALINA_HOME=$CATALINA_HOME
export TOMCAT_HOME=$TOMCAT_HOME
#开启服务到此tomcat就安装好了
/usr/local/tomcat/apache-tomcat-8.5.16/bin/startup.sh
#添加站点目录文件
mkdir /usr/local/tomcat/apache-tomcat-8.5.16/webapps/test
vim /usr/local/tomcat/apache-tomcat-8.5.16/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("this is dynamic web1");%>
</body>
</html>
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
vim /usr/local/tomcat/apache-tomcat-8.5.16/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/apache-tomcat-8.5.16/webapps/test/" path="" reloadable="true" />
#开启服务
/usr/local/tomcat/apache-tomcat-8.5.16/bin/shutdown.sh
/usr/local/tomcat/apache-tomcat-8.5.16/bin/startup.sh

配置第二台节点服务器(192.168.239.40)

配置与第一台tomcat一致唯一不同站点目录网页文档用于区分实现负载均衡

vim /usr/local/tomcat/apache-tomcat-8.5.16/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("this is dynamic web2");%>
</body>
</html>

访问测试

配置负载调度器(主:192.168.239.10)

#关闭防火墙
systemctl stop firewalld.service
setenforce 0
#安装相关依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
#创建运行用户
useradd -M -s /sbin/nologin nginx
#安装nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --grou=nginx --with-http_stub_status_module --with-stream && make && make install
#优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#将nginx加入服务并给执行权限
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
#开启服务
systemctl start nginx.service
systemctl enable nginx.service
#配置四层代理
vim /usr/local/nginx/conf/nginx.conf
stream {
log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
access_log logs/stream_access.log main; upstream backend_server { #添加节点服务器地址
server 192.168.239.30:8080;
server 192.168.239.40:8080;
}
server {
listen 8080; #监听端口
proxy_pass backend_server;
}
} systemctl restart nginx
#安装keepalived
yum install -y keepalived
cd /etc/keepalived
#修改配置文件
vim keepalived.conf
#定义全局参数
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 172.0.0.1 #修改,邮件服务指向本地
smtp_connect_timeout 30
router_id NGINX_01 #指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
}
vrrp_instance VI_1 { #定义VRRP热备实例参数
state MASTER #指定热备状态,主为MASTER,备为BACKU
interface ens33 #修改,指定承载vip地址的物理接口
virtual_router_id 51 #修改,指定虚拟路由器的ID号,每个热备组保持一致
priority 100 #指定优先级数值越大优先级越高
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
auth_pass 1111 #修改,指定验证密码,主备服务器保持一致
}
virtual_ipaddress { #指定群集vip地址
192.168.239.100
}
}
#编写服务控制简本当nginx服务挂掉是自动关闭keepalved服务并给脚本权限
vim check_nginx.sh
#!/bin/bash
count=$(ps -ef | grep nginx | egrep -cv "grep"|$$)
if [ $count -eq 0 ];then
systemctl stop keepalived
fi
chmod +x check_nginx.sh
#修改配置文件
vim keepalived.conf
#检测脚本
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" #心跳执行的脚本,检测nginx是否启动 track_script { #调用检测脚本
check_nginx
}
systemctl start keepalived.service
ip addr

配置负载调度器(备:192.168.239.10)

#关闭防火墙
systemctl stop firewalld.service
setenforce 0
#yum安装nginx
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
yum install nginx -y
#配置四层代理
cd /etc/nginx/
vim nginx.conf
stream {
log_format main '$remote_addr $upstream_addr - [$time_local] $status #upstream_bytes_sent';
access_log logs/stream_access.log main; upstream backend_server {
server 192.168.239.30:8080; #添加节点服务器
server 192.168.239.40:8080;
}
server {
listen 8080; #监听地址
proxy_pass backend_server;
}
}
#创建日志文件目录
mkdir logs
#开启服务
systemctl restart nginx
#安装keepalived服务
yum install -y keepalived
#修改配置文件与主差不多只要在其基础修改几处即可
cd /etc/keepalived
vim keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 172.0.0.1
smtp_connect_timeout 30
router_id NGINX_02 #修改此处指定服务器(路由器)的名称,主备服务器名称须不同,
}
vrrp_instance VI_1 {
state BACKUP #指定热备状态,主为MASTER,备为BACKU
interface ens33
virtual_router_id 51
priority 90 #修改此行指定优先级数值越大优先级越高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.239.100
}
}
#编写服务控制简本当nginx服务挂掉是自动关闭keepalved服务并给脚本权限
vim check_nginx.sh
#!/bin/bash
count=$(ps -ef | grep nginx | egrep -cv "grep"|$$)
if [ $count -eq 0 ];then
systemctl stop keepalived
fi
chmod +x check_nginx.sh vim keepalived.conf
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" #心跳执行的脚本,检测nginx是否启动
track_script {
check_nginx #调用检测脚本
}
systemctl start keepalived.service

客户机测试

关闭主负载调度器的keepalived服务再次测试

此时备负载调度器则会将自己转为Master设备

再次访问任然可以访问

23.Nginx+keepalived负载均衡高可用的更多相关文章

  1. Nginx+Keepalived负载均衡高可用

    Nginx+Keepalived负载均衡高可用方案: Nginx 使用平台:unix.linux.windows. 功能: A.www web服务  http 80 b.负载均衡(方向代理proxy) ...

  2. Keepalived+Nginx实现负载均衡高可用

    一.负载均衡高可用 Nginx作为负载均衡器,所有请求都到了Nginx,可见Nginx处于非常重点的位置,如果Nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了避免负载均衡服务器的宕机 ...

  3. 实现基于Haproxy+Keepalived负载均衡高可用架构

    1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...

  4. JAVAEE——宜立方商城03:Nginx负载均衡高可用、Keepalived+Nginx实现主备

    1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...

  5. Nginx+keepalived实现负载均衡高可用配置

    1. 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了屏蔽负载均衡服务 ...

  6. Lvs+keepAlived实现负载均衡高可用集群(DR实现)

    第1章 LVS 简介 1.1 LVS介绍 LVS是Linux Virtual Server的简写,意为Linux虚拟服务器,是虚拟的服务器集群系统,可在UNIX/LINUX平台下实现负载均衡集群功能. ...

  7. Nginx负载均衡高可用

    1.   Nginx负载均衡高可用 首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实 ...

  8. Nginx负载均衡高可用---架构

    1. Nginx负载均衡高可用 首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现w ...

  9. nginx负载均衡高可用部署和代理配置

    nginx负载均衡高可用配置 服务器A:172.16.100.2 服务器B:172.16.100.3 首先先在两台服务器上分别安装好nginx和keepalived后,再进行下面的操作 配置keepa ...

随机推荐

  1. Spring-注入方式(基于xml方式)

    1.基于xml方式创建对象 <!--配置User类对象的创建 --> <bean id="user" class="com.at.spring5.Use ...

  2. 从实例学习 Go 语言、"并发内容" 学习笔记及心得体会、Go指南

    第一轮学习 golang "并发内容" 学习笔记,Go指南练习题目解析.使用学习资料 <Go-zh/tour tour>.记录我认为会比较容易忘记的知识点,进行补充,整 ...

  3. HTTP和HTTPS有什么不同

    网站的URL会分为两部分:通信协议和域名地址. 域名地址都很好理解,不同的域名地址表示网站中不同的页面,而通信协议,简单来说就是浏览器和服务器之间沟通的语言.网站中的通信协议一般就是HTTP协议和HT ...

  4. SSM整合_年轻人的第一个增删改查_新增

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  5. Blazor Bootstrap 组件库 Toast 轻量弹窗组件介绍

    轻量级 Toast 弹窗 DEMO https://www.blazor.zone/toasts 基础用法: 用户操作时,右下角给予适当的提示信息 <ToastBox class="d ...

  6. Envoy熔断限流实践(二)Rainbond基于RLS服务全局限流

    Envoy 可以作为 Sevice Mesh 微服务框架中的代理实现方案,Rainbond 内置的微服务框架同样基于 Envoy 实现.本文所描述的全局限速实践也是基于 Envoy 已有的方案所实现. ...

  7. 01. 树莓派初始配置——ssh连接使用root用户登录

    ssh连接使用root用户登录 普通的"pi"用户没有权限访问某些文件夹,或者对它们只有只读功能.部分操作需要在每条命令前都要加上"sudo",非常不方便.切换 ...

  8. 攻防世界-MISC:something_in_image

    这是攻防世界高手进阶区的第四题,题目如下: 点击下载附件一,得到一个压缩包,解压后得到一个文件,用010editor打开,搜索flag,即可得到flag 另外一种做法,根据题目包含image,使用ka ...

  9. 《计算机组成原理/CSAPP》网课总结(一)

    现在是2022年4月17日晚10点,本月计划的网课<csapp讲解>视频课看到了第八章"异常"第三讲,视频讲的很好但更新很慢,暂时没有最新的讲解,所以先做一个简单总结. ...

  10. Spring 源码(8)Spring BeanPostProcessor的注册、国际化及事件发布机制

    上一篇文章https://www.cnblogs.com/redwinter/p/16198942.html介绍了Spring的注解的解析过程以及Spring Boot自动装配的原理,大概回顾下:Sp ...