私有云盘:lamp部署nextcloud+高可用集群
目录
一、实验准备:
二、配置mariadb主从复制
三台主机下载mariadb
1)主的操作
2)从的操作
3)测试数据是否同步
三、配置nfs让web服务挂载
1、安装
2、配置nfs服务器
3、配置web服务的httpd
4、测试
四、web 服务器 配置 lamp
1、配置php环境
2、配置访问测试界面
3、修改httpd配置文件
4、访问web页面测试
5、在nfs服务器上配置nextcloud页面
五、配置nginx反向代理&&haproxy&&keepalived
1、安装nginx
2、配置两台nginx 的反向代理
3、为NGINX配置haporxy
4、配置keepalived
一、实验准备:
192.168.150.102 :配置nginx反向代理,haproxy+keepalive提高高可用(主)
192.168.150.103 :配置nginx反向代理,haproxy+keepalived提高高可用(副)
192.168.150.104 :web1 配置lamp平台
192.168.150.105 :web2 配置lamp平台
192.168.150.106 :nfs共享文件服务
192.168.150.107 :mysql-master
192.168.150.108 :mysql-slave1
192.168.150.109 :mysql -slave2
192.168.150.110 :客户端
所有主机设置防火墙、selinux
本次nextcloud版本22-2.0 、php74
二、配置mariadb主从复制
192.168.1.7 主
192.168.1.8 从
192.168.1.9 从
三台主机下载mariadb
yum -y install mariadb-server
1)主的操作
vim /etc/my.cnfserver-id=1log-bin=mysql-binlog-slave-updates=turecharacter-set-server=utf8binlog-format = mixed

systemctl start mariadb
netstat -anput |grep 3306

初始化数据库
mysql_secure_installation
创建hy用户
grant replication slave on *.* to 'hy'@'192.168.150.%' identified by '123456';(用于远程登录数据库)
show master status;

2)从的操作
2)从的操作
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=2 #另一个从改为3
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
character-set-server=utf8
binlog-format = mixed
重置数据库
systemctl start mariadb
mysql_secure_installation
mysql -u root -p"123.com"
设置授权
stop slave;
CHANGE MASTER TO MASTER_HOST='192.168.150.107',MASTER_USER='hy',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=1484;
start slave;
show slave status\G;


3)测试数据是否同步
在主上为nextcloud创建库,并创建用于登录的用户
create database nextcloud;
grant all on nextcloud.* to "nextcloud"@"192.168.150.%" identfied by "123456"
select user,host,password from mysql.user;


在从上验证是否同步,以及用户nextcloud是否可以远程登录

验证用户nextcloud
mysql -unextcloud -p"123456" -h 192.168.150.107 -P 3306

三、配置nfs让web服务挂载
192.168.150.6 nfs服务器
192.168.150.5 web服务器
192.168.150.4 web服务器
1、安装
安装yum -y install rpcbind 、yum -y install nfs-utils
先启动nfs,在启动rpcbind(如果操作过程中报错,把这两个服务停掉,然后按照顺序启动)
2、配置nfs服务器
mkdir /share ##创建共享目录
vim /etc/exports
/share 192.168.150.0/24(rw,sync,no_root_squash)
启动
systemctl enable --now nfs
systemctl enable --now rpcbind
查看可用的共享目录
exportfs
showmount -e

3、配置web服务的httpd
yum -y install httpd
systemctl enable --now httpd
挂载共享目录
yum -y install nfs-utils
yum -y install rpcbind
systemctl enable --now nfs
showmount -e 192.168.150.106
mount 192.168.150.106:/share /var/www/html/

4、测试
来到nfs服务器配置网页
echo this is a test > /share/index.html
访问

四、web 服务器 配置 lamp
192.168.1.4 web服务器
192.168.1.5 web服务器
1、配置php环境
yum install epel-release -y
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
yum install yum-utils -y
yum-config-manager --enable remi-php74
yum -y install php php-xml php-gd php-mbstring php-process php-ldap php-xml php-zip php-mysql php-intl
php -v #查看版本

2、配置访问测试界面
vim index.html
mv index.html index.php
cat index.php

3、修改httpd配置文件
vim /etc/httpd/conf/httpd.conf<Directory "/var/www/html/nextcloud">
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>

4、访问web页面测试
此时的php环境没什么问题了

5、在nfs服务器上配置nextcloud页面
下载(比较慢)
wget https://download.nextcloud.com/server/releases/nextcloud-22.2.0.zip
yum -y install unzip

unzip nextcloud-22.2.0.zip
cp nextcloud /share/ -R
useradd -s /sbin/nologin -M apache
chown apache.apache /share
chmod 777 /share
回到web服务器修改默认的访问页面
vim /etc/httpd/conf/httpd.confDocumentRoot "/var/www/html/nextcloud"

重启
systemctl restart httpd
访问http://192.168.150.104 和 http://192.168.150.105



192.168.150.104报错

解决办法vim /var/www/html/nextcloud/config/config.php

解决现在2个web服务器都可以登录了

五、配置nginx反向代理&&haproxy&&keepalived
192.168.150.102
192.168.150.103
1、安装nginx
yum -y install epel-release.noarch
yum -y install nginx
systemctl enable --now nginx
2、配置两台nginx 的反向代理
vim /etc/nginx/nginx.conf在http字段下插入upstream nextcloud {ip_hash;server 192.168.150.104:80;server 192.168.150.105:80;
}server {listen 80;server_name nextcloud1;location / {proxy_pass http://192.168.150.104;}
}server {listen 80;server_name nextcloud2;location / {proxy_pass http://192.168.150.105;}
}
检查配置文件
nginx -t
重载配置文件
systemctl reload nginx
访问测试192.168.150.102

访问测试192.168.150.103

3、为NGINX配置haporxy
1)安装
##下载HAproxy
wget https://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz
##解压
tar -xf haproxy-1.7.2.tar.gz
##进入目录
cd haproxy-1.7.2/
##编译(没有gcc请先安装)
make PREFIX=/usr/local/haproxy TARGET=linux2628
make install PREFIX=/usr/local/haproxy
2)配置haproxy
从haproxy的源码包中的examples下的init.haproxy中获得配置文件的路径“/etc/haproxy/haproxy.cfg”mkdir /etc/haproxytouch /etc/haproxy/haproxy.cfg
vim /etc/haproxy/haproxy.cfg##插入
global #全局属性daemon #以daemon方式在后台运行maxconn 256 #最大同时256连接pidfile /home/ha/haproxy/conf/haproxy.pid #指定保存HAProxy进程号的文件defaults #默认参数mode http #http模式timeout connect 5000ms #连接server端超时5stimeout client 50000ms #客户端响应超时50stimeout server 50000ms #server端响应超时50sfrontend http-in #前端服务http-inbind *:88 #监听88端口(不修改会与nginx冲突)default_backend Nginxservers #请求转发至名为"servers"的后端服务backend Nginxservers #后端服务serversserver server1 192.168.150.102:80 maxconn 32 #backend servers中只有一个后端服务,名字叫server1,起在本机的80端口,HAProxy同时最多向这个服务发起32个连接
server server2 192.168.150.103:80 maxconn 32 #backend servers中只有一个后端服务,名字叫server2,起在本机的80端口,HAProxy同时最多向这个服务发起32个连接
将haproxy添加为系统服务
cp /root/haproxy-1.7.2/examples/haproxy.init /etc/init.d/haproxy
vim /etc/init.d/haproxy
修改: 35行 内容为 BIN=/usr/local/haproxy/sbin/$BASENAME
chmod +x /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
##添加3和5运行级别下自启动
chkconfig haproxy --level 35 on
chkconfig --list service haproxy start
验证haproxy


4、配置keepalived
192.168.150.102(主)
192.168.150.103 (副)
##安装keepalived
yum -y install keepalived
##加载查看模块
modprobe ip_vs
lsmod |grep ip_vs
###配置
vim /etc/keepalived/keepalived.conf
##插入
global_defs {router_id LVS_DEVEL
}
#HAProxy健康检查配置
vrrp_script chk_haproxy {script "killall -0 haproxy" #使用killall -0检查haproxy实例是否存在,性能高于ps命令interval 2 #脚本运行周期weight 2 #每次检查的加权权重值
}
vrrp_instance HA_1 {state MASTER #副的写SLAVEinterface ens160virtual_router_id 51priority 100 #从的到比100低advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.150.200}track_script {chk_haproxy #对应的健康检查配置}
}
启动keepalived+haproxy
systemctl restart keepalived.serviceservice haproxy restart
查看主的ip

查看从的ip

浏览器访问192.168.150.200

验证:宕掉192.168.150.102观察192.168.150.103的VIP


继续访问192.168.150.200

配置完成,实验结束(nfs换成ceph存储会更好些)
相关文章:
私有云盘:lamp部署nextcloud+高可用集群
目录 一、实验准备: 二、配置mariadb主从复制 三台主机下载mariadb 1)主的操作 2)从的操作 3)测试数据是否同步 三、配置nfs让web服务挂载 1、安装 2、配置nfs服务器 3、配置web服务的httpd 4、测试 四、web 服务器 配…...
在线制作课程表
失业在家,开启一天一个应用的创作节奏,最近学了uniapp,特别想做点啥,正好家里小孩子要打印课程表,而且课程表还有调课的需求,就寻思做一个方便大家,到目前位置服务完全免费的,新鲜上…...
聊聊分布式架构06——[NIO入门]简单的Netty NIO示例
目录 Java NIO和Netty NIO比较 Java NIO: Netty: Netty NIO中的主要模块 Transport(传输层) Buffer(缓冲区) Codec(编解码器) Handler(处理器) Even…...
H5逆向之远程RPC
引言前一讲说过H5 怎么去抓包,逆向分析。其中说到RPC。这一节详细讲一下。有一种情况,JS 比较复杂,混淆的厉害。 这个时候就用到RPC。原理就是,hook web 浏览器,直接调用js 里边的方法。 Node 服务。为什么用到Node 服务,先来看下这架构 Node 对外提供各种接口,外部可以…...
解决Ubuntu18.04安装好搜狗输入法后无法打出中文的问题
首先下载安装 搜狗拼音输入法 ,下载选择: x86_64 在ubuntu中设置 fcitx 最后发现安装好了,图标有了 ,但是使用时不能输入中文,使用下面的命令解决: sudo apt install libqt5qml5 libqt5quick5 libqt5qu…...
Ubuntu LabelMe AI 识别
1.创建虚拟环境 conda create -n labelme python3.9 2.激活虚拟环境 conda activate labelme 3.安装labelme pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple pip install labelme -i ht…...
基于FPGA的图像缩小算法实现,包括tb测试文件和MATLAB辅助验证
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的处理结果导出到matlab中显示图像效果: 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1p…...
黑马店评-04缓存更新策略,保证MySQL数据库中的数据和Redis中缓存的数据一致性
缓存更新策略(数据一致) 更新策略 缓存更新是Redis为了节约内存而设计出来的机制,当我们向Redis插入太多数据时就会导致缓存中的数据过多,所以Redis会对部分数据进行更新即淘汰 低一致性需求(数据长久不发生变化): 使用内存淘汰机制,例如店铺类型信息的查询缓存,因为这部分…...
matlab相机标定实验
实验原理 1. 相机标定坐标系 相机的参数对目标的识别、定位精度有很大的影响,相机标定就是为了求出相机的内外参数。标定中有3个不同层次的坐标系:世界坐标系、相机坐标系和图像坐标系(图像物理坐标系和图像像素坐标系)。世界坐…...
【每日一题Day343】LC2731移动机器人 | 脑筋急转弯+数学
移动机器人【LC2731】 有一些机器人分布在一条无限长的数轴上,他们初始坐标用一个下标从 0 开始的整数数组 nums 表示。当你给机器人下达命令时,它们以每秒钟一单位的速度开始移动。 给你一个字符串 s ,每个字符按顺序分别表示每个机器人移动…...
疯狂java 1.7垃圾回收机制
内存泄漏:如果一些分配出去的内存得不到及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪 Java程序的内存分配和回收都是由JRE在后台自动进行的。JRE会负责回收哪些不再使用的内存,这种机制被称为垃圾回收(Garbag…...
day01_基础
零、今日内容 1 jdk 2 idea使用 3 HelloWorld程序 4 变量 5 数据类型 6 String 一、JDK安装 JDK java开发工具包,敲代码的环境 1.1 卸载 控制面板 -> 卸载程序 -> 选择jdk,右键卸载 1.2 安装 注意: 现在安装的是JDK8版本,虽然最新的版本是21版本,但是工作市场中最流行的…...
RabbitMQ开启消息发送确认和消费手动确认
开启RabbitMQ的生产者发送消息到RabbitMQ服务端的接收确认(ACK)和消费者通过手动确认或者丢弃消费的消息。 通过配置 publisher-confirm-type: correlated 和publisher-returns: true开启生产者确认消息。 server:port: 8014spring:rabbitmq:username: …...
嵌入式系统开发【深入浅出】 GPIO 类设备的驱动程序
目录 GPIO管脚的输出功能相当于控制、输入相当于检测 使用GPIO基本流程 对于某一个管脚来说最多有几种功能? 拓展 【定时器与系统定时器】 决定定时长短的因素: 普通定时器 系统定时器 STM32F103RBT6的时钟源有哪五种 sysclk 的时钟频率由哪个时钟源提供基…...
项目管理必备的22个公式
大家好,我是老原。 趁着国庆时间比较空闲,给你们整理了一些项目管理必备的计算公式,一共22个。 每一个公式都给你们标注了适用情况和使用方法,为了方便你们理解,也加了一些例子,保准你看了就会。 觉得不…...
ccache加速编译速度
ccache https://gitee.com/lixiaoxmm/ccache.git 依赖hiredis、zstd(zstd的cmakelists.txt在build/cmake目录下) 下载mingw,https://www.mingw-w64.org/downloads/#w64devkit hiredis、zstd使用mingw编译 cmake -G “MinGW Makefiles” cmakecache.txt手动修改去掉网络下载,…...
Apache POI使用
1.导入坐标 <!-- poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi}</version></dependency><dependency><groupId>org.apache.poi</groupId><a…...
UNIQUE VISION Programming Contest 2023 Autumn(AtCoder Beginner Contest 323)
A - Weak Beats 链接 : A - Weak Beats 思路 : 模拟即可,如果在偶数位上出现了非0得元素,直接输出"No"后返回即可,循环顺利结束的话,就直接输出"Yes"; 代码 : #include<bits/stdc.h> #define IOS ios::sy…...
Docker 网络管理
Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机…...
网络安全国家队-安防思考与实践
按照工信部“三同步”安全建设的统一要求,本项目的实施应具备符合等级保护要求的安全防护措施(主要为传输控制、防火墙隔离、入侵检测、安全审计等网络安全措施;操作系统安全、数据库安全、防病毒管理、安全审计等基础系统安全措施࿰…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
