当前位置: 首页 > news >正文

搭建discuz论坛(lvs+nginx+http+mysql+nfs)8台服务器

搭建discuz论坛(lvs+nginx+http+mysql+nfs)

一、IP规划

服务名IP地址服务
LVS1192.168.100.110keepalived+ipvsadm
LVS2192.168.100.111keepalived+ipvsadm
nginx1192.168.100.113nginx
nginx2192.168.100.114nginx
nfs192.168.100.116nfs-util
web1192.168.100.118httpd+php+nfs-util
web2192.168.100.119httpd+php+nfs-util
mysql192.168.100.121mysql

虚拟IP

服务名IP地址服务
虚拟ip192.168.100.100nginx+keepalived

二、配置

1.LVS1

​ 关闭防护墙,selinux

# 关闭防火墙
systemctl stop firewalld# 关闭selinux
setenforce 0

​ 设置ip:192.168.100.110

# 编辑网卡信息
vi /etc/sysconfig/network-scripts/ifcfg-ens33# 修改
BOOTPROTO=static
ONBOOT=yes# 写入
IPADDR=192.168.100.110
NETMASK=255.255.255.0
GATEWAY=192.168.100.2

​ 下载keepalived和ipvsadm

yum -y install keepalived ipvsadm

​ 备份默认配置文件

cp -p /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

​ 删除原有文件,创建新内容

# 删除原有文件
rm -rf /etc/keepalived/keepalived.conf # 创建新文件
vi /etc/keepalived/keepalived.conf 

​ 添加以下内容

! Configuration File for keepalived# 配置双机热备(主)
lobal_defs {router_id 1
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 1priority 120advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.100.100}
}# 虚拟服务器ip及mysql地址
virtual_server 192.168.100.100 80 {delay_loop 15lb_algo rrlb_kind DRprotocol TCPreal_server 192.168.100.113 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 4}}real_server 192.168.100.114 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 4}}
}

​ 启动keepalived

systemctl start keepalived

​ 服务模块

# 加载系统内核的服务模块
modprobe ip_vs# 查看运行状态
lsmod | grep ip_vs

​ 下载net网络工具

yum -y install net-tools

​ 查看网卡信息

# 停用物理网卡
ifconfig ens33 down# 启动物理网卡(如在连接工具上,需到虚拟机上启动)
ifconfig ens33 up# 查看网卡信息(在ens33网卡下是否有ip:192.168.100.100)
ip a# 查看LVS-DR群集策略规则
ipvsadm -ln

​ LVS-DR群集策略

# 查看策略
ipvsadm -ln
2.LVS2

​ 关闭防护墙,selinux

# 关闭防火墙
systemctl stop firewalld# 关闭selinux
setenforce 0

​ 设置ip:192.168.100.111

# 编辑网卡信息
vi /etc/sysconfig/network-scripts/ifcfg-ens33# 修改
BOOTPROTO=static
ONBOOT=yes# 写入
IPADDR=192.168.100.111
NETMASK=255.255.255.0
GATEWAY=192.168.100.2

​ 下载keepalived和ipvsadm

yum -y install keepalived ipvsadm

​ 备份默认配置文件

cp -p /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

​ 删除原有文件,创建新内容

# 删除原有文件
rm -rf /etc/keepalived/keepalived.conf # 创建新文件
vi /etc/keepalived/keepalived.conf 

​ 添加以下内容

! Configuration File for keepalived# 配置双机热备(备)
lobal_defs {router_id 2
}
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 1priority 100advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.100.100}
}# 虚拟服务器ip及mysql地址
virtual_server 192.168.100.100 80 {delay_loop 15lb_algo rrlb_kind DRprotocol TCPreal_server 192.168.100.113 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 4}}real_server 192.168.100.114 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 4}}
}

​ 启动keepalived

systemctl start keepalived

​ 服务模块

# 加载系统内核的服务模块
modprobe ip_vs# 查看运行状态
lsmod | grep ip_vs

​ 下载net网络工具

yum -y install net-tools

​ 查看网卡信息

# 停用物理网卡
ifconfig ens33 down# 启动物理网卡(如在连接工具上,需到虚拟机上启动)
ifconfig ens33 up# 查看网卡信息(在ens33网卡下是否有ip:192.168.100.100)
ip a# 查看LVS-DR群集策略规则
ipvsadm -ln

​ LVS-DR群集策略

# 查看策略
ipvsadm -ln
3.nginx1

​ 关闭防火墙,selinux

# 关闭防火墙
systemctl stop firewalld# 关闭selinux
setenforce 0

​ 设置ip:192.168.100.113

# 编辑网卡信息
vi /etc/sysconfig/network-scripts/ifcfg-ens33# 修改
BOOTPROTO=static
ONBOOT=yes# 写入
IPADDR=192.168.100.113
NETMASK=255.255.255.0
GATEWAY=192.168.100.2

​ 下载nginx,keepalived环境

# 配置nginx下载源
cat >> /etc/yum.repos.d/nginx.repo << EOF
[nginx-stable]
name="nginx stable repo"
baseurl=http://nginx.org/packages/centos/$releasever/$basearch
enabled=1
gpgcheck=0
EOF# 下载环境
yum -y install nginx keepalived

​ 配置nginx

[root@localhost ~]# vi /etc/nginx/nginx.conf
# 在http {}内添加upstream apache{server 192.168.100.118:80;server 192.168.100.119:80;}[root@localhost ~]# vi /etc/nginx/conf.d/default.conf
# 在location / {}内添加proxy_pass http://apache;proxy_redirect default;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;# 重启
[root@localhost ~]# systemctl restart nginx

​ 启动nginx

systemctl start nginx

​ 虚拟网卡

# 添加虚拟网卡(回环地址)
cat >> /etc/sysconfig/network-scripts/ifcfg-lo:0  << EOF
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
ONBOOT=yes
EOF# 重启网络
systemctl restart network# 查看是否有虚拟ip
ip a

​ 写入路由指向

# 下载网络工具
yum -y install net-tools# 添加路由信息
route add -host 192.168.100.100 dev lo:0

​ 调整/proc内核参数,关闭ARP响应

cat >> /etc/sysctl.conf << EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOFsysctl -p
4.nginx2

​ 关闭防火墙,selinux

# 关闭防火墙
systemctl stop firewalld# 关闭selinux
setenforce 0

​ 设置ip:192.168.100.114

# 编辑网卡信息
vi /etc/sysconfig/network-scripts/ifcfg-ens33# 修改
BOOTPROTO=static
ONBOOT=yes# 写入
IPADDR=192.168.100.114
NETMASK=255.255.255.0
GATEWAY=192.168.100.2

​ 下载nginx,keepalived环境

# 配置nginx下载源
cat >> /etc/yum.repos.d/nginx.repo << EOF
[nginx-stable]
name="nginx stable repo"
baseurl=http://nginx.org/packages/centos/$releasever/$basearch
enabled=1
gpgcheck=0
EOF# 下载环境
yum -y install nginx keepalived

​ 配置nginx

[root@localhost ~]# vi /etc/nginx/nginx.conf
# 在http {}内添加upstream apache{server 192.168.100.118:80;server 192.168.100.119:80;}[root@localhost ~]# vi /etc/nginx/conf.d/default.conf
# 在location / {}内添加proxy_pass http://apache;proxy_redirect default;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;# 重启
[root@localhost ~]# systemctl restart nginx

​ 启动nginx

systemctl start nginx

​ 写入路由指向

# 下载网络工具
yum -y install net-tools# 添加路由信息
route add -host 192.168.100.100 dev lo:0

​ 调整/proc内核参数,关闭ARP响应

cat >> /etc/sysctl.conf << EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOFsysctl -p
5.nfs

​ 关闭防火墙,selinux

# 关闭防火墙
systemctl stop firewalld# 关闭selinux
setenforce 0

​ 设置ip:192.168.100.116

# 编辑网卡信息
vi /etc/sysconfig/network-scripts/ifcfg-ens33# 修改
BOOTPROTO=static
ONBOOT=yes# 写入
IPADDR=192.168.100.116
NETMASK=255.255.255.0
GATEWAY=192.168.100.2

​ 创建nfs目录

# 创建共享目录
mkdir /luntan

​ 下载nfs环境

yum -y install nfs-utils*

​ 上传论坛包到/opt

# 下载unzip解压软件
yum -y install unzip# 解压论坛软件
unzip /opt/Discuz_X3.2_SC_UTF8.zip -d /luntan# 给予论坛文件权限
chmod -R 757 /luntan/upload/{config,data,uc_*}cp -rf /luntan/upload/* /luntan/

​ 配置进程

# 启动nfs进程守护
systemctl start rpcbind
systemctl start nfs

​ 共享

# 编辑nfs共享配置文件
vi /etc/exports# 写入以下内容
/luntan 192.168.100.118(rw,sync,no_root_squash) 192.168.100.119(rw,sync,no_root_squash)# 刷新nfs文件权限
exportfs -r
6.web1

​ 关闭防火墙,selinux

# 关闭防火墙
systemctl stop firewalld# 关闭selinux
setenforce 0

​ 设置ip:192.168.100.118

# 编辑网卡信息
vi /etc/sysconfig/network-scripts/ifcfg-ens33# 修改
BOOTPROTO=static
ONBOOT=yes# 写入
IPADDR=192.168.100.118
NETMASK=255.255.255.0
GATEWAY=192.168.100.2

​ 安装环境

# 安装httpd,php,nfs环境
yum -y install httpd php php-mysql nfs-utils*

​ 挂载并启动

# 将nfs共享目录挂载到apache下
mount 192.168.100.116:/luntan /var/www/html# 启动服务
systemctl start httpd
7.web2

​ 关闭防火墙,selinux

# 关闭防火墙
systemctl stop firewalld# 关闭selinux
setenforce 0

​ 设置ip:192.168.100.119

# 编辑网卡信息
vi /etc/sysconfig/network-scripts/ifcfg-ens33# 修改
BOOTPROTO=static
ONBOOT=yes# 写入
IPADDR=192.168.100.119
NETMASK=255.255.255.0
GATEWAY=192.168.100.2

​ 安装环境

# 安装httpd,php,nfs环境
yum -y install httpd php php-mysql nfs-utils*

​ 挂载并启动

# 将nfs共享目录挂载到apache下
mount 192.168.100.116:/luntan /var/www/html# 启动服务
systemctl start httpd
8.mysql

​ 关闭防护墙,selinux

# 关闭防火墙
systemctl stop firewalld# 关闭selinux
setenforce 0

​ 设置ip:192.168.100.121

# 编辑网卡信息
vi /etc/sysconfig/network-scripts/ifcfg-ens33# 修改
BOOTPROTO=static
ONBOOT=yes# 写入
IPADDR=192.168.100.121
NETMASK=255.255.255.0
GATEWAY=192.168.100.2

​ 下载mariadb

yum -y install mariadb mariadb-server

​ 修改完成重启服务

# 重启服务
systemctl restart mariadb# 配置mysql密码,123456
mysql_secure_installation 

​ 授权

# 进入mysql
mysql -uroot -p123456# 授权
grant all privileges on *.* to 'root'@'%' identified by '123456';# 刷新权限
flush privileges;

三、安装

​ 进入浏览器,输入http://192.168.100.100/upload,开始安装

相关文章:

搭建discuz论坛(lvs+nginx+http+mysql+nfs)8台服务器

搭建discuz论坛&#xff08;lvsnginxhttpmysqlnfs&#xff09; 一、IP规划 服务名IP地址服务LVS1192.168.100.110keepalivedipvsadmLVS2192.168.100.111keepalivedipvsadmnginx1192.168.100.113nginxnginx2192.168.100.114nginxnfs192.168.100.116nfs-utilweb1192.168.100.11…...

就业平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;企业管理&#xff0c;企业类型管理&#xff0c;留言板管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;招聘信息&#xff0c;简历&#xff0c;我的 …...

hid-ft260驱动学习笔记 5 - ft260_i2c_probe

目录 1. 保存ft260_device到私有数据 2. 初始化I2C设备分配属性 3. 添加I2C适配器 4. 初始化GPIO 5. ft260_i2c_algo 5.1 ft260_functionality 5.2 ft260_i2c_xfer 5.3 ft260_smbus_xfer 6. ft260_i2c_quirks 这个函数是i2c的接口probe函数。 1. 保存ft260_device到私…...

Android上如何使用perfetto分析systrace

Android上如何使用perfetto分析systrace Perfetto 是一个用于性能分析的工具&#xff0c;提供了对 Android 系统内部工作情况的详细视图。它可以用来替代传统的 systrace 工具&#xff0c;提供更加全面的性能分析功能。以下是如何使用 Perfetto 分析 Systrace 数据的详细指南&…...

React Hooks学习笔记

一、usestate的使用方法-初始化state函数 import React, { useState } from "react"; function App() {const [count, setCount] useState(0);return (<div><p>点击{count}次</p><button onClick{() > setCount(count 1)}>点击</bu…...

BGP第二日

上图为今日所用拓扑 &#xff0c;其中R1和R4&#xff0c;R3和R5为EBGP邻居&#xff0c;R1和R3为IBGP邻居&#xff0c;AS200区域做OSPF动态路由 一.BGP建立邻居的六种状态 1.idle 空闲状态&#xff1a;建立邻居最初的状态 2.Connect 连接状态&#xff1a;在…...

rabbitmq集群创建admin用户之后,提示can access virtual hosts是No access状态

问题描述&#xff1a; 因业务需要使用的rabbitmq是3.7.8版本的&#xff0c;rabbitmq在3.3.0之后就允许使用guest账号的权限了&#xff0c;所以需要创建一个administrator标签的用户。 如下操作创建的用户&#xff1a; 创建完成之后就提示如下的报错&#xff1a; 注&#xff1a…...

ARM功耗管理之多核处理器启动

安全之安全(security)博客目录导读 思考&#xff1a;SecureBoot&#xff1f;多核处理器启动流程&#xff1f;PSCI启动方式&#xff1f; 一般嵌入式系统使用的都是对称多处理器&#xff08;Symmetric Multi-Processor, SMP&#xff09;系统&#xff0c;包含了多个cpu, 这几个cp…...

java使用easypoi模版导出word详细步骤

文章目录 第一步、引入pom依赖第二步、新建导出工具类WordUtil第三步、创建模版word4.编写接口代码5.导出结果示例 第一步、引入pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…...

Android 内部保持数据的方式

Android内部保持数据的方式主要有五种&#xff0c;每种方式都有其特定的用途和优点。以下是详细的介绍&#xff1a; SQLite数据库 定义&#xff1a;SQLite是一个轻量级的、跨平台的数据库&#xff0c;所有的信息都存储在单一文件内&#xff0c;占用内存小&#xff0c;并且支持…...

uniapp 表格,动态表头表格封装渲染

1.接口表格数据&#xff1a; {"headers": [{"label": "实例名","name": "v1","order": 1,"hide": false,"dateTypeValue": null},{"label": "所属科室","name&quo…...

beyond Compare连接 openWrt 和 VsCode

连接步骤总结 1. 新建会话 -> 文件夹比较 2.点击浏览文件夹 3.在弹出页面 配置 ftp 3.1&#xff09;选中ftp 配置文件 3.2)选中ssh2 3.3)填写我们需要远端连接的主机信息 先点击连接并浏览 得到下方文件夹 弹出无效登录&#xff0c;说明需要密码 我们返回右键刚刚创建的新 …...

量化机器人能否识别市场机会?

量化机器人的设计和应用是为了通过高级算法和大数据分析&#xff0c;精确地识别和把握市场中的交易机会。这些机器人的能力不仅仅局限于执行预定的交易策略&#xff0c;更包括在复杂和快速变化的市场环境中识别利润机会。 首先&#xff0c;量化机器人能够处理和分析大量的市场…...

香橙派AIpro开发板评测:部署yolov5模型实现图像和视频中物体的识别

OrangePi AIpro 作为业界首款基于昇腾深度研发的AI开发板&#xff0c;自发布以来就引起了我的极大关注。其配备的8/20TOPS澎湃算力&#xff0c;堪称目前开发板市场中的顶尖性能&#xff0c;实在令人垂涎三尺。如此强大的板子&#xff0c;当然要亲自体验一番。今天非常荣幸地拿到…...

MongoDB教程(二):mongoDB引用shell

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…...

A133 Android10 root修改

1.前言 客户应用需求root相关的权限&#xff0c;我们需要修改系统的权限才可以满足客户需求 2.修改方法 frameworks层&#xff1a;注释掉 diff --git a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp b/frameworks/base/core/jni/com_android_internal_os_…...

实验场:在几分钟内使用 Bedrock Anthropic Models 和 Elasticsearch 进行 RAG 实验

作者&#xff1a;来自 Elastic Joe McElroy, Aditya Tripathi 我们最近发布了 Elasticsearch Playground&#xff0c;这是一个新的低代码界面&#xff0c;开发人员可以通过 A/B 测试 LLM、调整提示&#xff08;prompt&#xff09;和分块数据来迭代和构建生产 RAG 应用程序。今天…...

代理详解之静态代理、动态代理、SpringAOP实现

1、代理介绍 代理是指一个对象A通过持有另一个对象B&#xff0c;可以具有B同样的行为的模式。为了对外开放协议&#xff0c;B往往实现了一个接口&#xff0c;A也会去实现接口。但是B是“真正”实现类&#xff0c;A则比较“虚”&#xff0c;他借用了B的方法去实现接口的方法。A…...

Laravel - laravel-websockets 开发详解

1.我laravel-websockets 的开发环境 Laravel 9.0Laravel WebSockets &#xff08;最新版&#xff09;Laravel Vite 2. 安装服务器端包 beyondcode/laravel-websockets 运行以下命令安装laravel-websockets composer require beyondcode/laravel-websockets 安装完后&#…...

vue3 学习笔记04 -- axios的使用及封装

vue3 学习笔记04 – axios的使用及封装 安装 Axios 和 TypeScript 类型定义 npm install axios npm install -D types/axios创建一个 Axios 实例并封装成一个可复用的模块&#xff0c;这样可以在整个应用中轻松地进行 API 请求管理。 在 src 目录下创建一个 services 文件夹&…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...