【web项目】keepalived高可用+LVS负载均衡+nginx动静分离+nfs共享存储

简介: 【web项目】keepalived高可用+LVS负载均衡+nginx动静分离+nfs共享存储

项目架构



关防火墙


#每台机子关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0


1.改网段


2. NFS

[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir nfs
[root@localhost opt]# cd nfs/
[root@localhost nfs]# mkdir web1 web2
[root@localhost nfs]# echo "this is web1" > web1/index.html
[root@localhost nfs]# echo "this is web2" > web2/index.html
[root@localhost nfs]# vim /etc/exports
/opt/nfs/web1 192.168.100.0/24(rw,sync,no_root_squash)
/opt/nfs/web2 192.168.100.0/24(rw,sync,no_root_squash)
[root@localhost nfs]# systemctl start rpcbind
[root@localhost nfs]# systemctl start nfs
[root@localhost nfs]# showmount -e
Export list for localhost.localdomain:
/opt/nfs/web2 192.168.100.0/24
/opt/nfs/web1 192.168.100.0/24
[root@localhost nfs]#



3.keepalived+lvs

192.168.100.10
[root@localhost ~]# hostnamectl set-hostname ha01
[root@localhost ~]# su
[root@ha01 ~]# yum install -y ipvsadm keepalived
[root@ha01 ~]# cd /etc/keepalived/
[root@ha01 keepalived]# vim keepalived.conf 
! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_01
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
        192.168.100.100
    }
}
virtual_server 192.168.100.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP
    real_server 192.168.100.30 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.100.40 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
[root@ha01 keepalived]# systemctl restart keepalived.service
[root@ha01 keepalived]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@ha01 keepalived]# systemctl start ipvsadm
[root@ha01 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@ha01 ~]# sysctl -p
192.168.100.20
[root@localhost ~]# hostnamectl set-hostname ha02
[root@localhost ~]# su
[root@ha02 ~]# yum install -y ipvsadm keepalived
[root@ha02 ~]# cd /etc/keepalived/
[root@ha02 keepalived]# vim keepalived.conf 
! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_02
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
        192.168.100.100
    }
}
virtual_server 192.168.100.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP
    real_server 192.168.100.30 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.100.40 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
[root@ha02 keepalived]# systemctl restart keepalived.service
[root@ha02 keepalived]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@ha02 keepalived]# systemctl start ipvsadm
[root@ha02 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@ha02 ~]# sysctl -p


4.动静分离

192.168.100.30
[root@localhost ~]# hostnamectl set-hostname web1
[root@localhost ~]# su
[root@web1 ~]# 
#安装jdk
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
#配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
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
#复制到另一台机子
cd /usr/local
scp -r jdk1.8.0_91/ 192.168.100.40:`pwd`
#第二台也配置环境变量
#解压Tomcat
cd /opt/
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16/ /usr/local/tomcat/
 #tomcat服务器1配置
 cd /usr/local/tomcat/apache-tomcat-9.0.16/webapps/
 mkdir test
 vim /usr/local/tomcat/apache-tomcat-9.0.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("动态页面 1,this is dynamic web1");%>
</body>
</html>
  #注释原来的
  vim /usr/local/tomcat/apache-tomcat-9.0.16/conf/server.xml
 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
  <Context docBase="/usr/local/tomcat/apache-tomcat-9.0.16/webapps/test" path="" reloadable="true">
  </Context>
#启动
   /usr/local/tomcat/apache-tomcat-9.0.16/bin/startup.sh
#复制到服务器2
cd /usr/local/
scp -r /usr/local/tomcat/ 192.168.100.40:`pwd`

192.168.100.40
[root@localhost ~]# hostnamectl set-hostname web2
[root@localhost ~]# su
[root@web2 ~]#
#tomcat服务器2配置
 cd /usr/local/tomcat/apache-tomcat-9.0.16/webapps/
 mkdir test
vim /usr/local/tomcat/apache-tomcat-9.0.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("动态页面 2,this is dynamic web2");%>
</body>
</html>
 #启动
   /usr/local/tomcat/apache-tomcat-9.0.16/bin/startup.sh


安装nginx(两台)


1、安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
2、创建运行用户
useradd -M -s /sbin/nologin nginx
3、编译安装
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make && make install
4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
5、添加 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
#Nginx server 配置
vim /usr/local/nginx/conf/nginx.conf
# server项外面添加
   upstream tomcat_server {
        server 192.168.100.30:8080;
        server 192.168.100.40:8080;
}
#server项内添加
 location ~ .*\.jsp$ {
                proxy_pass http://tomcat_server; 
                proxy_set_header HOST $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
systemctl restart nginx.service
#挂载nfs两台
[root@web1 ~]# mount 192.168.100.50:/opt/nfs/web1 /usr/local/nginx/html
[root@web2 ~]# mount 192.168.100.50:/opt/nfs/web2 /usr/local/nginx/html


配置虚拟IP地址(两台)


[root@web1 conf]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.100.100
NETMASK=255.255.255.255
ifup lo:0
[root@web1 network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.100  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
route add -host 192.168.100.100 dev lo:0
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1   
net.ipv4.conf.lo.arp_announce=2  
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
sysctl -p


负载均衡器重启keepalived


systemctl restart keepalived.service
[root@ha01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.100:80 rr
  -> 192.168.100.30:80            Route   1      0          0         
  -> 192.168.100.40:80            Route   1      0          0 


访问192.168.100.100 二三十秒刷新实现静态网页负载

访问192.168.100.100/test/index.jsp 刷新实现动态网页负载





依然可以访问网页并且实现负载


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
9月前
|
存储 应用服务中间件 nginx
在使用Nginx之后,如何在web应用中获取用户IP以及相关原理
但总的来说,通过理解网络通信的基础知识,了解http协议以及nginx的工作方式,我们已经能在大多数情况下准确地获取用户的真实IP地址了,在调试问题或者记录日志时会起到很大的帮助。
530 37
|
存储 Web App开发 移动开发
HTML5 Web 存储详解
HTML5 Web存储提供了两种客户端数据存储机制:**Local Storage**和**Session Storage**。Local Storage用于长期存储数据,即使关闭浏览器数据也依然存在,适用于保存用户偏好设置等信息。Session Storage则在标签或窗口关闭时清除数据,适合存储临时信息。两者均提供了简单的API进行数据的存取操作,但需要注意的是,Web存储并非加密存储,不应存放敏感信息。现代浏览器普遍支持Web存储,合理利用这两种存储方式可提升Web应用的用户体验。
|
9月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
384 11
|
12月前
|
负载均衡 网络协议 Linux
LVS,软负载均衡
LVS(Linux Virtual Server)是一项广泛应用的负载均衡技术,由章文嵩博士于1998年发起,自Linux 2.4.24版本起成为官方内核的一部分。LVS通过四层负载均衡技术实现高性能、高可用的服务器集群,支持多种调度算法和工作模式(如D-NAT、full-NAT、IP隧道、DR),适用于HTTP、数据库等应用。相比7层负载均衡器(如Nginx、HAProxy),LVS具有更高的并发处理能力和更低的资源消耗,适合大规模流量分发。本期文章详细介绍了LVS的工作原理、优势与不足,并对比了常见的负载均衡产品,帮助读者根据具体需求选择合适的解决方案。
1819 6
LVS,软负载均衡
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
438 0
|
负载均衡 算法 Linux
LVS+Keepalived:实现高效软负载均衡的利器
本文介绍了如何使用LVS(Linux Virtual Server)和Keepalived搭建高可用负载均衡集群。LVS通过不同调度算法将请求转发给后端服务器,而Keepalived基于VRRP协议实现服务高可用,避免IP单点故障。具体步骤包括环境准备、安装配置ipvsadm和Keepalived、启动服务及测试。文中还详细解释了配置文件中的关键参数,并提供了故障转移测试方法。最后,文章简要对比了软件、硬件和云负载均衡方案的特点,帮助读者选择合适的负载均衡策略。
1893 4
|
存储 缓存 前端开发
Web应用中的存储方式有哪些?
本文首发于微信公众号“前端徐徐”,介绍了几种常见的前端数据存储技术:Cookie、Web Storage(包括 localStorage 和 sessionStorage)、IndexedDB、Cache Storage 和 Memory Storage。每种技术的特点和使用场景不同,适用于不同的开发需求。文章详细解释了它们的使用方法、特点和应用场景,并提供了代码示例。
1799 2
Web应用中的存储方式有哪些?
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
429 8
LVS+Keepalived 负载均衡
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
416 2
|
域名解析 运维 负载均衡
LVS+Keepalived 负载均衡(二)28-1
【8月更文挑战第28天】LVS+Keepalived 负载均衡 配置 LVS VIP
291 6