web高可用集群项目(数据库主从同步、文件共享存储、nginx动静分离+负载均衡+高可用)

一、项目环境

二、环境准备

主机名IP地址备注
openEuler-1192.168.121.11主负载调度器
openEuler-2192.168.121.12副负载调度器
openEuler-3192.168.121.13web-1(静态)
openEuler-4192.168.121.14web-2(静态)
openEuler-5192.168.121.15web-3(动态)
openEuler-6192.168.121.16web-4(动态)
openEuler-7192.168.121.17node-1(共享存储)
openEuler-8192.168.121.18node-2(共享存储)
openEuler-9192.168.121.19node-3(共享存储)
openEuler-10192.168.121.20mysql-master
openEuler-11192.168.121.21mysql-slave

注意:该实验环境默认关闭防火墙和SELinux

三、数据库配置

1、安装环境

[root@openEuler-10 ~]# yum install mysql-server -y
[root@openEuler-10 ~]# systemctl enable --now mysqld# 另外两台服务器同理

2、配置主从同步

主库配置:

[root@openEuler-10 ~]# vim /etc/my.cnf
[root@openEuler-10 ~]# tail -n3 /etc/my.cnf
server_id=20
gtid_mode=ON
enforce-gtid-consistency=ON
[root@openEuler-10 ~]# systemctl restart mysqld
[root@openEuler-10 ~]# mysqlmysql> create user rep@'192.168.121.%' identified with mysql_native_password by '123456';
mysql> grant replication slave on *.* to rep@'192.168.121.%';
mysql> flush privileges;

从库配置:

[root@openEuler-11 ~]# vim /etc/my.cnf
[root@openEuler-11 ~]# tail -n3 /etc/my.cnf
server_id=21
gtid_mode=ON
enforce-gtid-consistency=ON
[root@openEuler-11 ~]# systemctl restart mysqld
[root@openEuler-11 ~]# mysqlmysql> change replication source to-> source_host='192.168.121.20',-> source_user='rep',-> source_password='123456',-> source_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.06 sec)mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)mysql> show slave status \G
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.121.20Master_User: repMaster_Port: 3306Connect_Retry: 60Master_Log_File: binlog.000001Read_Master_Log_Pos: 978Relay_Log_File: openEuler-11-relay-bin.000002Relay_Log_Pos: 1188Relay_Master_Log_File: binlog.000001Slave_IO_Running: YesSlave_SQL_Running: Yes...

3、创建库以及授权用户

mysql> create database wordpress;
mysql> create user wp@'%' identified by 'wp123456';
mysql> grant all privileges on wordpress.* to wp@'%';
mysql> flush privileges;# 检查从库中是否同步
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+

四、web服务端配置(动态)

1、安装环境

[root@openEuler-5 ~]# yum install nginx mysql-server php php-mysqlnd -y
[root@openEuler-5 ~]# echo "dynamic test page!" > /usr/share/nginx/html/index.html
[root@openEuler-5 ~]# systemctl enable --now nginx.service

2、PHP和MySQL对接测试

[root@openEuler-5 ~]# vim /usr/share/nginx/html/index.php
<?php
$con = mysqli_connect("192.168.121.20","wp","wp123456");
if ($con)echo '数据库连接成功!';
elseecho '数据库连接失败!';
$con->close();
?>
[root@openEuler-5 ~]# systemctl restart nginx.service

浏览器访问测试:192.168.121.15/mysql_connect.php

3、安装部署wordpress

[root@openEuler-5 ~]# wget -c http://wordpress.org/latest.tar.gz
[root@openEuler-5 ~]# tar -xzf latest.tar.gz -C /usr/share/nginx/html/

接着浏览器访问:http://192.168.121.15/wordpress

若弹出此窗口则按照其提示来完成:

按照提示写入文件:

[root@openEuler-5 ~]# vim /usr/share/nginx/html/wp-config.php

最后创建站点并登录:

4、配置另一个web端

重复步骤1-4。

五、共享存储配置

1、安装环境

[root@openEuler-7 ~]# yum install glusterfs-server -y
[root@openEuler-7 ~]# systemctl enable --now glusterd# 另外两台服务器同理

2、创建存储目录

[root@openEuler-7 ~]# mkdir -p /gluster/brick1# 另外两台服务器同理

3、配置hosts解析

[root@openEuler-7 ~]# vim /etc/hosts
[root@openEuler-7 ~]# tail -n3 /etc/hosts
192.168.121.17 openEuler-7
192.168.121.18 openEuler-8
192.168.121.19 openEuler-9# 另外两台服务器同理

4、配置GlusterFS存储信任池

在其中一个节点上配置:

[root@openEuler-7 ~]# gluster peer probe openEuler-8
peer probe: success
[root@openEuler-7 ~]# gluster peer probe openEuler-9
peer probe: success# 查看信任池状态
[root@openEuler-7 ~]# gluster peer status
Number of Peers: 2Hostname: openEuler-8
Uuid: 6c17b306-413f-4f1c-a5f5-90f43104eda6
State: Peer in Cluster (Connected)Hostname: openEuler-9
Uuid: b6c8b385-daf8-476b-8207-fafe8b9119eb
State: Peer in Cluster (Connected)# 查看信任池列表
[root@openEuler-7 ~]# gluster pool list
UUID                                    Hostname        State
6c17b306-413f-4f1c-a5f5-90f43104eda6    openEuler-8     Connected
b6c8b385-daf8-476b-8207-fafe8b9119eb    openEuler-9     Connected
20d6bdce-a81f-4f69-82a6-9a5b224dba4e    localhost       Connected

5、创建web卷

[root@openEuler-7 ~]# gluster volume create web_vol replica 2 arbiter 1 \
openEuler-7:/gluster/brick1 \
openEuler-8:/gluster/brick1 \
openEuler-9:/gluster/brick1 \
force[root@openEuler-7 ~]# gluster volume start web_vol
volume start: web_vol: success
[root@openEuler-7 ~]# gluster volume info web_volVolume Name: web_vol
Type: Replicate
Volume ID: 3db1b974-bc4c-45c4-84bb-381107dd612b
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x (2 + 1) = 3
Transport-type: tcp
Bricks:
Brick1: openEuler-7:/gluster/brick1
Brick2: openEuler-8:/gluster/brick1
Brick3: openEuler-9:/gluster/brick1 (arbiter)
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

六、web服务端配置(静态)

1、安装环境

[root@openEuler-3 ~]# yum install glusterfs-fuse nginx -y
[root@openEuler-3 ~]# echo "static test page!" > /usr/share/nginx/html/index.html
[root@openEuler-3 ~]# systemctl enable --now nginx.service# 另一台服务器同理

2、挂载目录

# 备份原来的根目录数据(后续另一个web服务配置时不需要备份)
[root@openEuler-3 ~]# cd /usr/share/nginx/
[root@openEuler-3 nginx]# ls
html  modules
[root@openEuler-3 nginx]# cp -r html{,.bak}# 配置hosts解析
[root@openEuler-3 nginx]# vim /etc/hosts
[root@openEuler-3 nginx]# tail -n3 /etc/hosts
192.168.121.17 openEuler-7
192.168.121.18 openEuler-8
192.168.121.19 openEuler-9# 高可用挂载(节点故障自动转移)
[root@openEuler-3 nginx]# mount -t glusterfs openEuler-7,openEuler-8,openEuler-9:/web_vol  ./html/# 还原数据
[root@openEuler-3 nginx]# mv html.bak/* html/
[root@openEuler-3 nginx]# tree html
html
├── 404.html
├── 50x.html
├── index.html
└── nginx-logo.png

3、配置另一个web端

重复步骤1-3。

4、编写静态网页测试

# 在其中一台web服务器编写
[root@openEuler-3 nginx]# cd html/
[root@openEuler-3 html]# echo "web test1 page" > test1.html
[root@openEuler-3 html]# echo "web test2 page" > test2.html
[root@openEuler-3 html]# echo "web test3 page" > test3.html
[root@openEuler-3 html]# echo "web test4 page" > test4.html
[root@openEuler-3 html]# echo "web test5 page" > test5.html# 查看另一个web
[root@openEuler-4 html]# ls
404.html  index.html      test1.html  test3.html  test5.html
50x.html  nginx-logo.png  test2.html  test4.html

七、负载均衡器配置

1、安装环境

[root@openEuler-1 ~]# yum install nginx keepalived -y# 设置开机自启
[root@openEuler-1 ~]# systemctl enable --now nginx.service
[root@openEuler-1 ~]# systemctl enable --now keepalived.service

2、配置负载均衡(虚拟主机+动静分离)

[root@openEuler-1 ~]# vim /etc/nginx/conf.d/lb.conf
upstream static_webs {server 192.168.121.13:80;server 192.168.121.14:80;}upstream dynamic_webs {ip_hash;server 192.168.121.15:80;server 192.168.121.16:80;
}server {listen 80;server_name static.yunjisuan.com;location / {proxy_pass http://static_webs;# proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;}
}server {listen 80;server_name dynamic.yunjisuan.com;location / {proxy_pass http://dynamic_webs;# proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;}
}# 另一台负载调度器同理

3、创建web服务检查脚本

[root@openEuler-1 ~]# mkdir /script/
[root@openEuler-1 ~]# vim /script/check_ngx.sh
#!/bin/bash
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]
thensystemctl start nginxsleep 2if [ `ps -C nginx --no-header |wc -l` -eq 0 ]thensystemctl stop keepalivedfi
fi
[root@openEuler-1 ~]# chmod +x /script/check_ngx.sh# 另一台负载调度器同理

4、配置keepalived实现高可用

# [root@openEuler-1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id 11
}vrrp_script check_nginx {script "/script/check_ngx.sh"interval 1
}vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {check_nginx}virtual_ipaddress {192.168.121.10}
}# 另一台配置,稍作修改
[root@openEuler-2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id 12
}vrrp_script check_nginx {script "/script/check_ngx.sh"interval 1
}vrrp_instance VI_1 {state SLAVEinterface ens160virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {check_nginx}virtual_ipaddress {192.168.121.10}
}# 重启服务
[root@openEuler-1 ~]# systemctl restart keepalived.service
[root@openEuler-2 ~]# systemctl restart keepalived.service

八、测试

测试主机上配置hosts解析:

192.168.121.10 static.yunjisuan.com dynamic.yunjisuan.com

1、测试访问静态页面

多访问几次,查看静态web服务器的日志:

可以看到是轮询的访问两台静态web服务器。

2、测试访问动态页面

多访问几次,查看动态web服务器的日志(这里采用动态查看日志,访问前通过空格隔开):

可以看到只访问了其中一台动态web端,因为采用的是哈希算法。

访问wordpress:

3、模拟后端web端节点故障

用户仍然可以通过另一台服务器进行访问。

4、模拟负载调度器节点故障

nginx故障:

由于配置了脚本检查,当nginx服务停止后会尝试重启。

测试在配置文件中加入未知字符,使其不能重启时:

可以看到vip进行了漂移,去到了备用的服务器上。

keepalived故障同理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28849.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业工程项目管理系统源码:Java版源码解析

一、项目概述 鸿鹄工程项目管理系统是基于Spring Cloud、Spring Boot、Mybatis、Vue和ElementUI技术栈&#xff0c;采用前后端分离架构构建的工程管理软件。它旨在应对企业快速发展中的管理挑战&#xff0c;提升工程管理效率&#xff0c;减轻工作负担&#xff0c;加速信息处理…

深度学习五大模型:CNN、Transformer、BERT、RNN、GAN详细解析

卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09; 原理 &#xff1a;CNN主要由卷积层、池化层和全连接层组成。卷积层通过卷积核在输入数据上进行卷积运算&#xff0c;提取局部特征&#xff1b;池化层则对特征图进行下采样&#xff0c;降低特征维度&…

vtk 3D坐标标尺应用 3D 刻度尺

2d刻度尺 : vtk 2D 刻度尺 2D 比例尺-CSDN博客 简介&#xff1a; 3D 刻度尺&#xff0c;也是常用功能&#xff0c;功能强大 3D 刻度尺 CubeAxesActor vtkCubeAxes调整坐标轴的刻度、原点和显示效果&#xff0c;包括关闭小标尺、固定坐标轴原点&#xff0c;以及设置FlyMode模…

Hive-优化(参数优化篇)

map 数和reduce数 控制hive任务中的map数 合适的map数&#xff0c;会让资源分配的更平均&#xff0c;让我们的代码运行更快&#xff0c;通常情况下&#xff0c;作业会通过input的目录产生一个或者多个map任务。我们可以通过调整参数来控制运行过程中的map数。 Hive Map的数量…

双链路提升网络传输的可靠性扩展可用带宽

为了提升网络传输的可靠性或增加网络可用带宽&#xff0c; 通常使用双链路冗余备份或者双链路聚合的方式。 本文介绍几种双链路网络通信的案例。 5GWiFi冗余传输 双Socket绑定不同网络接口&#xff1a;通过Android的ConnectivityManager绑定5G蜂窝网络和WiFi的Socket连接&…

Spring(三)容器-注入

一 自动注入Autowire 代码实现&#xff1a; package org.example.spring01.service;import org.springframework.stereotype.Service;Service public class UserService {}package org.example.spring01.controller;import lombok.Data; import lombok.ToString; import org.…

MySQL零基础教程16—表连接进阶

复习表别名 之前已经学习过&#xff0c;查询的时候可以使用as来对检索的列进行重命名&#xff0c;这样可以让sql更加简介&#xff0c;增强易读性&#xff08;as可以省略&#xff09; 此外&#xff0c;使用表别名还可以支持在一条select语句中&#xff0c;一个表是被多次使用 …

【MySQL】MySQL 复制

MySQL复制介绍 MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例(slave)上&#xff0c;默认情况下复制是异步进行的&#xff0c;从库也不需要一直连接到主库来同步数据。 MySQL复制的数据粒度可以是主实例上所有的数据库&#xff0c;也可以是指定的一个或多个数据…

Linux的缓存I/O和无缓存IO

一、I/O缓存的背景 I/O缓存是指在内存里开辟一块区域&#xff0c;存放用来接收用户输入和用于计算机输出的数据&#xff0c;以减小系统开销和提高外设效率。linux对IO文件的操作分为不带缓存的IO操作和带缓存的IO操作&#xff08;标准IO操作&#xff09;。为什么存在C标准I/O库…

YOLOv5 + SE注意力机制:提升目标检测性能的实践

一、引言 目标检测是计算机视觉领域的一个重要任务&#xff0c;广泛应用于自动驾驶、安防监控、工业检测等领域。YOLOv5作为YOLO系列的最新版本&#xff0c;以其高效性和准确性在实际应用中表现出色。然而&#xff0c;随着应用场景的复杂化&#xff0c;传统的卷积神经网络在处…

Webpack分包与合包深度解析

Webpack分包与合包深度解析 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff01;点我试试&#xff01;&#xff01; 引言&#xff1a;现代前端工程的模块化困境 在单页面应用&#xff08;SPA&#…

永恒之塔鼠标卡顿移动鼠标卡屏的问题

原因是现在鼠标普遍轮询率偏高导致系统性能开销过大 解决办法90块钱到淘宝雷蛇官网店买个最便宜的鼠标 然后安装Razer控制台,在性能栏把轮询率设置到最低(125)

Selenium遇到Exception自动截图

# 随手小记 场景&#xff1a;测试百度&#xff1a; 点击新闻&#xff0c;跳转到新的窗口&#xff0c;找到输入框&#xff0c;输入“hello,world" 等到输入框的内容是hello,world, 这里有个错误&#xff0c;少了一个] 后来就实现了错误截图的功能&#xff0c;可以参考 …

飞机大战lua迷你世界脚本

-- 迷你世界飞机大战 v1.2 -- 星空露珠工作室制作 -- 最后更新&#xff1a;2024年1月 ----------------------------- -- 迷你世界API适配配置 ----------------------------- local UI { BASE_ID 7477478487091949474-22856, -- UI界面ID ELEMENTS { BG 1, -- 背景 BTN_LE…

我的ChatGPT怎么登不上?

近期&#xff0c;不少用户反馈在使用ChatGPT时遇到登录困难、连接超时等问题。本文将从技术角度分析常见原因&#xff0c;并提供合规、安全的解决方案&#xff0c;同时结合开发者实际需求推荐实用工具&#xff0c;助您高效应对登录障碍。 ChatGPT登录失败的常见原因 网络环境限…

【MySQL】用MySQL二进制包构建docker镜像

一、实验背景 【MySQL&docker】基于CentOS7.5 编译制作MySQL5.7.28镜像 https://www.jianshu.com/p/71fd79b69a6b 用MySQL源码编译的docker镜像&#xff0c;体积过大&#xff0c;直奔3G了&#xff0c;你也不清楚&#xff0c;这点编译参数打出的体积怎么就这么大&#xff01…

快速熟悉JavaScript

目录 1.js的基本认知 2.js的基本语法 2.1 变量的声明 三个关键字的区别 2.2数据类型 2.2.1 基本数据类型 2.2.2 复杂数据类型 2.3对象的属性和方法 2.3.1属性 2.3.2访问方式 2.4.3动态操作 2.4.4方法 2.4字符串的常用属性和方法 2.5运算符 2.6逻辑控制语句 2.7函…

在 Windows 上最快速安装 Qt 5

引言 Qt 是一个强大的跨平台 C 开发框架&#xff0c;广泛应用于 GUI 开发、嵌入式系统和工业软件等领域。然而&#xff0c;许多开发者习惯于在 Linux&#xff08;如 Ubuntu&#xff09;环境下使用 Qt&#xff0c;而在 Windows 上搭建 Qt 开发环境时可能会遇到许多问题&#xf…

二、QT和驱动模块实现智能家居-----5、通过QT控制LED

在QT界面&#xff0c;我们要实现点击“LED”按钮就可以控制板子上的LED。LED接线图如下&#xff1a; 在Linux 系统里&#xff0c;我们可以使用2种方法去操作上面的LED&#xff1a; ① 使用GPIO SYSFS系统&#xff1a;这需要一定的硬件知识&#xff0c;需要设置引脚的方向、数值…

threejs:用着色器给模型添加光带扫描效果

第一步&#xff1a;给模型添加光带 首先创建一个立方体&#xff0c;不进行任何缩放平移操作&#xff0c;也不要set position。 基础代码如下&#xff1a; 在顶点着色器代码里varying vec3 vPosition;vPosition position;获得threejs自动计算的顶点坐标插值&#xff08;也就…