首页 > 其他分享 >实践项目-Web服务器架构调整

实践项目-Web服务器架构调整

时间:2024-12-31 14:32:28浏览次数:6  
标签:Web 架构 -- keepalived sudo redis 192.168 lb 服务器

(241231)

实践目标

将公司原来的多数单点服务器变成了集群,提升了网站的稳定性与高并发的应用场景。
目标:

  • 将现有的单点 Web 服务器架构调整为高可用的集群架构,解决单点故障问题。
  • 使用 LVS+Keepalived 或 Nginx+Keepalived 实现负载均衡和高可用性。
  • 实现动静分离,提升网站性能。
  • 确保 Session 一致性,支持无状态拆分。
graph TD A[客户端] -->|HTTP/HTTPS| B[负载均衡器] B -->|LVS/Nginx| C[Web服务器1] B -->|LVS/Nginx| D[Web服务器2] B -->|LVS/Nginx| E[Web服务器3] C -->|动态请求| F[应用服务器] D -->|动态请求| F E -->|动态请求| F C -->|静态资源| G[静态资源服务器] D -->|静态资源| G E -->|静态资源| G
主机名 IP 地址 角色
lb-main 192.168.100.10 主负载均衡器(LVS/Nginx)
lb-node1 192.168.100.11 Web 服务器 1
lb-node2 192.168.100.12 Web 服务器 2
lb-node3 192.168.100.13 Web 服务器 3

环境准备

sudo apt-get update
sudo apt-get install -y wget curl build-essential libssl-dev libpcre3 libpcre3-dev zlib1g-dev

安装Redis

(lb-main)

wget https://download.redis.io/redis-stable.tar.gz
tar -zxvf redis-stable.tar.gz
cd redis-stable

编译和安装 Redis

# 安装依赖
sudo apt-get install -y build-essential tcl

# 编译 Redis
make

# 测试编译结果
make test

# 安装 Redis
sudo make install

编译安装 LVS + Keepalived

(lb-main 和 lb-node1)

sudo apt-get install -y build-essential libssl-dev libnl-3-dev libnl-genl-3-dev

编译安装 LVS

wget https://www.kernel.org/pub/linux/utils/kernel/ipvsadm/ipvsadm-1.31.tar.gz
tar -zxvf ipvsadm-1.31.tar.gz
cd ipvsadm-1.31
make
sudo make install

编译安装 Keepalived

wget https://www.keepalived.org/software/keepalived-2.3.2.tar.gz
tar -zxvf keepalived-2.3.2.tar.gz
cd keepalived-2.3.2
./configure --prefix=/usr/local/keepalived
make
sudo make install

编译安装 Nginx

下载 Nginx 源码

wget https://nginx.org/download/nginx-1.26.2.tar.gz
tar -zxvf nginx-1.26.2.tar.gz
cd nginx-1.26.2

编译和安装 Nginx

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
make
sudo make install

配置redis

创建 redis 配置文件:

sudo mkdir /etc/redis
sudo cp redis.conf /etc/redis/redis.conf

编辑 /etc/redis/redis.conf,确保以下配置:

bind 0.0.0.0  # 允许所有 IP 访问
requirepass password  # 设置 Redis 密码

/etc/systemd/system/redis.service

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
User=redis
Group=redis

[Install]
WantedBy=multi-user.target
sudo adduser --system --group --no-create-home redis
sudo chown redis:redis /etc/redis/redis.conf
sudo systemctl daemon-reload
sudo systemctl start redis
sudo systemctl enable redis

配置Session一致性
(lb-node1、lb-node2、lb-node3并且安装了redis-tools

session.save_handler = redis
session.save_path = "tcp://192.168.100.10:6379?auth=yourpassword"

LVS+Keepalived方案

配置 LVS
(lb-main)

# 启用 IP 转发
echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward

# 配置虚拟 IP
sudo ip addr add 192.168.100.100/24 dev eth0

# 配置 LVS
sudo ipvsadm -A -t 192.168.100.100:80 -s rr
sudo ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.11:80 -g
sudo ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.12:80 -g
sudo ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.13:80 -g

配置 Keepalived
(lb-main、lb-node1)

sudo mkdir /etc/keepalived
sudo vim /etc/keepalived/keepalived.conf

/etc/keepalived/keepalived.conf

global_defs {
    router_id LVS_MAIN
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.100.100
    }
}

virtual_server 192.168.100.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP

    real_server 192.168.100.11 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.100.12 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.100.13 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
# 启动keepalived
sudo /usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived.conf

Nginx+Keepalived方案

(lb-main、lb-node1、lb-node2 和 lb-node3都要安装Nginx
配置nginx.conf

http {
    upstream backend {
        server 192.168.100.11;
        server 192.168.100.12;
        server 192.168.100.13;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        location /static/ {
            root /var/www/html;
            expires 30d;
        }
    }
}
sudo /usr/local/nginx/sbin/nginx

配置 Keepalived
(lb-main、lb-node1)
/etc/keepalived/keepalived.conf(lb-main)

global_defs {
    router_id NGINX_MAIN
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.100.100
    }
}

virtual_server 192.168.100.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    protocol TCP

    real_server 192.168.100.11 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.100.12 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.100.13 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

/etc/keepalived/keepalived.conf(lb-node1)

global_defs {
    router_id NGINX_BACKUP
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.100.100
    }
}
sudo /usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived.conf

标签:Web,架构,--,keepalived,sudo,redis,192.168,lb,服务器
From: https://www.cnblogs.com/mugetsukun/p/18640867

相关文章

  • C# WebBrowser 网页缩放的方法
    C#WebBrowser网页缩放的方法|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|----------......
  • 全球和中国时间服务器
    全球通用时间服务器这些时间服务器适合大部分地区使用:NTPPoolProject(全球NTP池)官网:https://www.pool.ntp.org推荐配置:0.pool.ntp.org1.pool.ntp.org2.pool.ntp.org3.pool.ntp.orgGoogleNTP服务器IP地址:time.google.com216.239.35.0216.......
  • .net6 WebApi 使用特性实现自动依赖注入
    首先搞三个特性类///<summary>///作用域///</summary>[AttributeUsage(AttributeTargets.Class)]publicclassDiScopedAttribute:Attribute{}///<summary>///单例///</summary>[AttributeUsage(AttributeTargets.Class)]publicclassDiSing......
  • 2 秒杀系统架构
    第一步思考面临的问题和业务场景秒杀系统面临的问题:短时间内并发非常高,如果按照秒杀的并发做相应的承载会造成大量资源的浪费。第二解决超卖的问题。第二步思考目前的处境和解决方案因为秒杀系统属于短时间内的高并发问题,我们不可能使用那么多的硬件资源去部署对应的......
  • Flyte工作流平台调研(一)——整体架构
    简介Flyte是一个开源的工作流编排平台,专为机器学习和数据处理任务设计。它帮助用户定义、管理和运行复杂的数据工作流,确保数据的可重复性、可扩展性和高效性。Flyte的客户端,支持使用pythonsdk、Console、ctl和API等方式提交工作流,后台将工作流编译成多个任务链接成数据依赖......
  • 随笔-处理器微架构-测量最大IPC
    目录固定cpu运行频率max_ipc_test.shLSD(LoopStreamDetector)arm固定cpu频率方式固定cpu运行频率我的测试环境cpu频率管理是intel_pstate:$lscpu|grep-ihzModelname:Intel(R)Core(TM)i5-10500CPU@3.10GHzCPUmaxMHz:......
  • BLOB 和TEXT 有什么区别?思维导图 代码示例(java 架构)
    列对比运算符用于在SQL查询中比较两列或一列与一个值。SQL支持多种类型的对比运算符,如=、<>或!=(不等于)、<、<=、>和>=等等。这些运算符可以用来构建WHERE子句中的条件表达式,以筛选出符合特定条件的记录。在Java架构中,当你使用JDBCAPI与数据库交互时,你可以......
  • 百度WEB编辑器 实现CTRL+V粘贴图片并上传、WORD粘贴带图片
    编辑器:百度ueditor前端:vue2,vue3,vue-cli,react,html5需求:复制粘贴word内容图片,word图片转存交互,导入pdf,导入PowerPoint(PPT),web截屏要求:开源,免费,技术支持用户体验:Ctrl+V快捷键操作平台:Windows,macOS,Linux,RedHat,CentOS,Ubuntu,中标麒麟,银河麒麟,统信UOS,信创国......
  • Web Socket连接以及STOMP协议
    一、WebSocketWebSocket是一种网络通信协议,它允许在Web应用程序和服务器之间建立实时、双向的通信连接。WebSocket协议基于TCP,它允许客户端和服务器之间建立一个持久的连接,通过这个连接可以实时交换数据,就像聊天一样,双方可以随时发送和接收信息。WebSocket的生命周期包括四个阶......
  • 使用websocket制作一个简易的聊天系统
    创建一个简易的聊天系统前端部分使用WebSocket主要包含以下几个步骤:建立WebSocket连接处理连接打开事件发送消息接收并显示消息处理连接关闭和错误事件以下是一个简易的HTML和JavaScript示例,展示了如何使用WebSocket实现聊天系统的前端部分:HTML(index.html)<......