搭建discuz论坛(lvs+nginx+http+mysql+nfs)8台服务器
搭建discuz论坛(lvs+nginx+http+mysql+nfs)
一、IP规划
服务名 | IP地址 | 服务 |
---|---|---|
LVS1 | 192.168.100.110 | keepalived+ipvsadm |
LVS2 | 192.168.100.111 | keepalived+ipvsadm |
nginx1 | 192.168.100.113 | nginx |
nginx2 | 192.168.100.114 | nginx |
nfs | 192.168.100.116 | nfs-util |
web1 | 192.168.100.118 | httpd+php+nfs-util |
web2 | 192.168.100.119 | httpd+php+nfs-util |
mysql | 192.168.100.121 | mysql |
虚拟IP
服务名 | IP地址 | 服务 |
---|---|---|
虚拟ip | 192.168.100.100 | nginx+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论坛(lvsnginxhttpmysqlnfs) 一、IP规划 服务名IP地址服务LVS1192.168.100.110keepalivedipvsadmLVS2192.168.100.111keepalivedipvsadmnginx1192.168.100.113nginxnginx2192.168.100.114nginxnfs192.168.100.116nfs-utilweb1192.168.100.11…...

就业平台小程序的设计
管理员账户功能包括:系统首页,个人中心,学生管理,企业管理,企业类型管理,留言板管理,系统管理 微信端账号功能包括:系统首页,招聘信息,简历,我的 …...

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 是一个用于性能分析的工具,提供了对 Android 系统内部工作情况的详细视图。它可以用来替代传统的 systrace 工具,提供更加全面的性能分析功能。以下是如何使用 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第二日
上图为今日所用拓扑 ,其中R1和R4,R3和R5为EBGP邻居,R1和R3为IBGP邻居,AS200区域做OSPF动态路由 一.BGP建立邻居的六种状态 1.idle 空闲状态:建立邻居最初的状态 2.Connect 连接状态:在…...

rabbitmq集群创建admin用户之后,提示can access virtual hosts是No access状态
问题描述: 因业务需要使用的rabbitmq是3.7.8版本的,rabbitmq在3.3.0之后就允许使用guest账号的权限了,所以需要创建一个administrator标签的用户。 如下操作创建的用户: 创建完成之后就提示如下的报错: 注:…...

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

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

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

uniapp 表格,动态表头表格封装渲染
1.接口表格数据: {"headers": [{"label": "实例名","name": "v1","order": 1,"hide": false,"dateTypeValue": null},{"label": "所属科室","name&quo…...

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

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

香橙派AIpro开发板评测:部署yolov5模型实现图像和视频中物体的识别
OrangePi AIpro 作为业界首款基于昇腾深度研发的AI开发板,自发布以来就引起了我的极大关注。其配备的8/20TOPS澎湃算力,堪称目前开发板市场中的顶尖性能,实在令人垂涎三尺。如此强大的板子,当然要亲自体验一番。今天非常荣幸地拿到…...

MongoDB教程(二):mongoDB引用shell
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、MongoD…...

A133 Android10 root修改
1.前言 客户应用需求root相关的权限,我们需要修改系统的权限才可以满足客户需求 2.修改方法 frameworks层:注释掉 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 实验
作者:来自 Elastic Joe McElroy, Aditya Tripathi 我们最近发布了 Elasticsearch Playground,这是一个新的低代码界面,开发人员可以通过 A/B 测试 LLM、调整提示(prompt)和分块数据来迭代和构建生产 RAG 应用程序。今天…...

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

Laravel - laravel-websockets 开发详解
1.我laravel-websockets 的开发环境 Laravel 9.0Laravel WebSockets (最新版)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 实例并封装成一个可复用的模块,这样可以在整个应用中轻松地进行 API 请求管理。 在 src 目录下创建一个 services 文件夹&…...

键盘快捷键设置录入
效果图: 代码: import React, {useContext, useEffect, useRef} from react import {message} from "antd"; import lodash from "lodash"; import {StateContext} from ../../index.tsx import {useUpdateEffect} from "ahoo…...

刷题Day49|647. 回文子串、516.最长回文子序列
647. 回文子串 647. 回文子串 - 力扣(LeetCode) 思路:递推公式的含义是[i, j]内的子串是否为回文子串(bolean[][])。一共两种情况:s[i] s[j],i和j相差1以外就得判断中间包含的的字符串是否为回文了&…...

关于transformers库验证时不进入compute_metrics方法的一些坑
生成式任务输入就是标签 transformers在进入compute_metrics前会有一个判断,源码如下: # 版本 transformers4.41.2 # 在trainer.py 的 3842 行 # Metrics! if (self.compute_metrics is not Noneand all_preds is not Noneand all_labels is not Nonea…...

苹果提出RLAIF:轻量级语言模型编写代码
获取本文论文原文PDF,请在公众号【AI论文解读】留言:论文解读 代码生成一直是一个充满挑战的领域。随着大型语言模型(LLM)的出现,我们见证了在自然语言理解和生成方面的显著进步。然而,当涉及到代码生成&a…...

[leetcode] shortest-subarray-with-sum-at-least-k 和至少为 K 的最短子数组
. - 力扣(LeetCode) class Solution { public:int shortestSubarray(vector<int>& nums, int k) {int n nums.size();vector<long> preSumArr(n 1);for (int i 0; i < n; i) {preSumArr[i 1] preSumArr[i] nums[i];}int res n…...

专业140+总分420+天津大学815信号与系统考研经验天大电子信息与通信工程,真题,大纲,参考书。
顺利上岸天津大学,专业课815信号与系统140,总分420,总结一些自己的复习经历,希望对于报考天大的同学有些许帮助,少走弯路,顺利上岸。专业课: 815信号与系统:指定教材吴大正…...

前端如何取消接口调用
🧑💻 写在开头 点赞 收藏 学会🤣🤣🤣 1. xmlHttpRequest是如何取消请求的? 实例化的XMLHttpRequest对象上也有abort方法 const xhr new XMLHttpRequest(); xhr.addEventListener(load, function(e)…...

k8s 容器环境下的镜像如何转换为docker 使用
在无法连接registry 的环境中,想要把 crictl 中的镜像给docker 使用,应该怎么处理? 其实容器镜像是通用的,crictl 和ctr 以及docker 镜像是可以互相使用的,因为docker 在1.10版本之后遵从了OCI。所以crictl 环境下的镜…...

FreeRTOS 队列
队列是一种任务到任务、任务到中断、中断到任务数据交流的一种机制。在队列中可以存 储数量有限、大小固定的多个数据,队列中的每一个数据叫做队列项目,队列能够存储队列项 目的最大数量称为队列的长度,在创建队列的时候,就需要指…...

如何识别图片文字转化为文本?5个软件帮助你快速提取图片文字
如何识别图片文字转化为文本?5个软件帮助你快速提取图片文字 将图片中的文字提取为文本是一项非常有用的技能,特别是当你需要处理大量扫描文档、截图或其他图片时。以下是五款能够帮助你快速提取图片文字的软件: 迅捷文字识别 这是一款非…...