web高可用群集架构部署----超详细

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

mysql+ nginx+nfs lvs+keepalived +inotify+rsync高可用群集

简介

这是一个典型的Linux服务器群集解决方案,包括MySQL、Nginx、NFS、LVS和Keepalived。

MySQL:提供数据库服务。

Nginx:提供网页服务器和负载均衡。

NFS:提供文件存储服务。

LVS:提供负载均衡服务。

Keepalived:提供高可用性服务,通过VRRP协议实现。

inotify:Linux内核特性,用于检测文件系统的变动。

rsync:文件同步工具,用于同步文件和数据。

高可用性(High Availability,简称 HA)通常是指系统有效性和持续性。在这个解决方案中,Keepalived确保了服务的高可用性,即使一个节点失效,另一个备份节点可以接管服务。

NFS用于数据存储,确保了所有服务器节点都可以访问同一份数据。

LVS通过负载均衡算法分配用户请求到不同的服务器节点。

Nginx和MySQL配合工作,提供完整的网站服务和数据库服务。

inotify监控文件系统的变动,并通过rsync将变更的文件同步到其他服务器节点。

这个解决方案提供了一个高性能、高可用的网站服务平台。

项目负责人:老纪
1 、配置和管理 MySQL 数据库。
2 、部署和管理 Nginx
3 、设置和管理 NFS 文件共享系统。
4 、部署 LVS+Keeplived 高可用负载均衡。
5 、部署 inotify+rsync 服务进行数据备份。

企业网站群集架构部署—项目报告、项目需求 项目环境表

主机操作系主机名 / IP地址主机名 / IP地址主要软件
客户端Windows 11192.168.23.10
MySQL 服务器CentOS7.6
mysql_master /
192.168.244.203
MySQL5.7
MySQL 服务器CentOS7.6
mysql_slave /
192.168.244.204
MySQL5.7
Web 服务器CentOS7.6
Web01 /
192.168.244.205
nginx php-fpm
rpcbind
Web 服务器CentOS7.6
Web01 /
192.168.244.206
nginxphp-fpm
NFS 共享服务器CentOS7.6NFS / 192.168.244.207rpcbindrsync
负载均衡服务器CentOS7.6
Lvs-master
ens32
192.168.23.208
ens34
192.168.244.179
VIP 192.168.23.100
VIP 192.168.244.100
LVSKeepalived
负载均衡服务器CentOS7.6
Lvs-slave
ens32
192.168.23.209
ens34
192.168.244.209
VIP 192.168.23.100
VIP 192.168.244.100
LVSKeepalived
数据备份服务器CentOS7.6
rsync /
192.168.244.210
inotifyrsync
项目实施:
💡 注意:所有服务器的 Firewalld Selinux 已关闭

一:配置和管理 MySQL 数据库

1、安装两台 MySQL数据库,配置主从复制
修改主机名
1 [root@centos7-3 ~]# hostnamectl set-hostname mysql_master
2 [root@centos7-3 ~]# bash
3 [root@mysql_master ~]#
4
5 [root@centos7-4 ~]# hostnamectl set-hostname mysql_slave
6 [root@centos7-4 ~]# bash
7 [root@mysql_slave ~]#
安装 NTP 时间同步( master 上操作)
1 [root@mysql_master ~]# yum -y install ntp
2 [root@mysql_master ~]# vim /etc/ntp.conf (添加下面两行)
3 server 127.127.1.0
4 fudge 127.127.1.0 stratum 8
5 [root@mysql_master ~]# systemctl restart ntpd
6 [root@mysql_master ~]# systemctl enable ntpd
7
8 在从节点上进行时间同步( slave 上操作)
9 [root@mysql_slave ~]# yum -y install ntpdate
10 [root@mysql_slave ~]# ntpdate 192.168.244.203
11 30 Mar 09:54:58 ntpdate[9034]: adjust time server 192.168.244.203 offset -0.000334 sec
安装 MySQL 数据库(在 master slave 上面操作) 1 [root@mysql_master ~]# cd /etc/yum.repos.d/
2 [root@mysql_master yum.repos.d]# vim mysql57.repo
3 [mysql57-community]
4 name=MySQL 5.7 Community Server
5 baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
6 enabled=1
7 gpgcheck=0
8 [root@mysql_master yum.repos.d]# yum -y install mysql mysql-server
9 [root@mysql_master ~]# systemctl enable mysqld --now
2、设置 MySQL 数据库的用户名和密码(master、slave上面操作)
1 [root@mysql_master ~]# grep password /var/log/mysqld.log
2 2024-03-30T02:10:02.167999Z 1 [Note] A temporary password is generated for
root@localhost: qUUp,.:p!7fw
3 [root@mysql_master ~]# mysql -u root -p'qUUp,.:p!7fw'
4
5 mysql> set password=password('Cisco@123');
6 Query OK, 0 rows affected, 1 warning (0.01 sec)
7
8 [root@mysql_slave ~]# grep password /var/log/mysqld.log
9 2024-03-30T02:10:02.790999Z 1 [Note] A temporary password is generated for
root@localhost: iakZfwxfv1(p
10 [root@mysql_slave ~]# mysql -u root -p'iakZfwxfv1(p'
11
12 mysql> set password=password('Cisco@123');
13 Query OK, 0 rows affected, 1 warning (0.01 sec)
3、配置主数据库的 binlog 格式和 binlog 同步。
1 ## 编辑 /etc/my.cnf 配置文件,增加以下三行
2 [root@mysql_master ~]# vim /etc/my.cnf
3 server-id = 11
4 log-bin = master-bin
5 log-slave-updates = true 6
7 ## 重启 mysql 服务
8 [root@mysql_master ~]# systemctl restart mysqld
9
10 ## 登录 MySQL 程序,给从服务器授权
11 [root@mysql_master ~]# mysql -u root -pCisco@123
12
13 mysql> grant replication slave on *.* to 'myslave'@'192.168.244.%' identified by
'Cisco@123';
14
15 mysql> flush privileges;
16
17 mysql> show master status;
18 +-------------------+----------+--------------+------------------+-------------------+
19 | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
20 +-------------------+----------+--------------+------------------+-------------------+
21 | master-bin.000001 | 604 | | | |
22 +-------------------+----------+--------------+------------------+-------------------+
23 1 row in set (0.00 sec)
4、配置 slave 从服务器
1 ## 编辑 /etc/my.cnf 配置文件,增加以下三行
2 [root@mysql_slave ~]# vim /etc/my.cnf
3 server-id = 22
4 relay-log = relay-log-bin
5 relay-log-index = slave-relay-bin.index
6
7 ## 重启 MySQL 服务
8 [root@mysql_slave ~]# systemctl restart mysqld
9
10 ## 登录 MySQL ,配置同步。(按主服务器结果更改下面命令中 master_log_file master_log_pos
数。)
11 [root@mysql_slave ~]# mysql -u root -pCisco@123
12
13 mysql> change master to
master_host='192.168.244.203',master_user='myslave',master_password='Cisco@123',master_
log_file='master-bin.000001',master_log_pos=604;
14 15 Query OK, 0 rows affected, 2 warnings (0.02 sec)
16
17 ## 启动同步
18 mysql> start slave;
19 Query OK, 0 rows affected (0.00 sec)
20
21 ## 查看 Slave 状态,确保以下两个值为 YES
22 mysql> show slave status\G
23 *************************** 1. row ***************************
24 Slave_IO_Running: Yes
25 Slave_SQL_Running: Yes
26 1 row in set (0.00 sec)
5、测试主从复制是否正常
在主服务器上新建数据库 auth
1 mysql> create database auth;
2 Query OK, 1 row affected (0.00 sec)
3
4 mysql> show databases;
5 +--------------------+
6 | Database |
7 +--------------------+
8 | information_schema |
9 | auth |
10 | mysql |
11 | performance_schema |
12 | sys |
13 +--------------------+
14 5 rows in set (0.00 sec)
在从服务器上查看数据库,显示数据库相同,则主从复制成功。
1 mysql> show databases;
2 +--------------------+
3 | Database | 4 +--------------------+
5 | information_schema |
6 | auth |
7 | mysql |
8 | performance_schema |
9 | sys |
10 +--------------------+

11 5 rows in set (0.00 sec)

二、部署和管理 Nginx

1、安装 Nginx 服务器,配置支持使用 epoll 模型提高性能
修改主机名
1 [root@centos7-5 ~]# hostnamectl set-hostname web01
2 [root@centos7-5 ~]# bash
3 [root@web01 ~]#
4
5 [root@centos7-6 ~]# hostnamectl set-hostname web02
6 [root@centos7-6 ~]# bash
7 [root@web02 ~]#
配置 Nginx 的官方 yum
💡 web01 web02 相同操作,以下在 web01 上演示
1 [root@web01 ~]# cd /etc/yum.repos.d/
2 [root@web01 yum.repos.d]# vim nginx.repo
3 [nginx-stable]
4 name=nginx stable repo
5 baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
6 gpgcheck=1
7 enabled=1
8 gpgkey=https://nginx.org/keys/nginx_signing.key
9 module_hotfixes=true 安装 Nginx
1 [root@web01 ~]# yum -y install nginx
配置支持 epoll 模型提高性能
1 ## 编辑配置文件 /etc/nginx/nginx.conf
2 [root@web01 ~]# vim /etc/nginx/nginx.conf
3 events {
4 use epoll; // events 模块中添加此行
2、设置 Nginx 的工作进程数和最大连接数
1 ## 编辑配置文件 /etc/nginx/nginx.conf
2 [root@web01 ~]# vim /etc/nginx/nginx.conf
3 worker_processes 1; // 工作进程数量
4 events {
5 use epoll;
6 worker_connections 1024; // 最大连接数
7 }
3、部署安装 php
1 ## 安装 php 相关软件
2 [root@web01 ~]# yum -y install php php-fpm php-mysql php-gd
3
4 ## 编辑 php 配置文件 /etc/php-fpm.d/www.conf ,定用户与组,并开启状态页面用于监控服务状态。
5 [root@web01 ~]# vim /etc/php-fpm.d/www.conf
6 39 user = nginx
7 41 group = nginx
8 121 pm.status_path = /php_status // 取消注释(默认被注释)并改名为 /php_status
9 10 ## 修改配置 /etc/php.ini 指定 php 时区
11 [root@web01 ~]# vim /etc/php.ini
12 878 date.timezone = "Asia/Shanghai" // 指定时区
13
14 ## 启动 php-fpm
15 [root@web01 ~]# systemctl start php-fpm
16 [root@web01 ~]# systemctl enable php-fpm
17 Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to
/usr/lib/systemd/system/php-fpm.service.
4、配置 Nginx 的虚拟主机,根据要求设置各虚拟主机的域名、访问日志前缀、网站根目录和默认字 符集。
1 ## 编辑配置文件 /etc/nginx/nginx.conf
2 [root@web01 ~]# vim /etc/nginx/nginx.conf
3 ......
4 http {
5 include mime.types;
6 default_type application/octet-stream;
7 ## 配置日志格式
8 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
9 '$status $body_bytes_sent "$http_referer" '
10 '"$http_user_agent" "$http_x_forwarded_for"';
11
12 ## 配置 access.log 日志及存放路径,并且使用上面定义的 main 日志格式
13 access_log /var/log/nginx/access.log main;
14 sendfile on; // 高效文件传输模式
15 #tcp_nopush on;
16 #keepalive_timeout 0;
17 keepalive_timeout 65; // 连接超时时间,单位秒
18 #gzip on;
19 server { // 配置虚拟主机
20 listen 80; // 指定虚拟主机的服务端口
21 server_name www.bdqn.com; // 虚拟主机域名
22 charset utf-8; // 默认字符集
23 access_log /var/log/nginx/bdqn.access.log main; // 日志存放路径,最后的 main 指定
访问日志的输出格式
24 location / { 25 root /var/www/bdqn; // 虚拟主机网页根目录
26 index index.html index.php;
27 }
28 ## 配置 nginx 连接 php
29 location ~ \.php$ {
30 root /var/www/bdqn;
31 fastcgi_pass 127.0.0.1:9000;
32 fastcgi_index index.php;
33 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
34 include fastcgi_params;
35 }
36 ## 开启 php 页面
37 location /php_status {
38 root html;
39 fastcgi_pass 127.0.0.1:9000;
40 fastcgi_index index.php;
41 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
42 include fastcgi_params;
43 }
44 }
45 }
46 ## 配置 stream 反向代理模块
47 stream {
48 upstream mysql {
49 server 192.168.244.203:3306; // 后端数据库的 ip 地址和端口
50 server 192.168.244.204:3306;
51 }
52 server {
53 listen 3306; // 监听 3306 端口,远程登录时不用加 -p 参数
54 proxy_connect_timeout 10s;
55 proxy_timeout 30s;
56 proxy_pass mysql;
57 }
58 }
59
60 ## 检查配置文件
61 [root@web01 ~]# nginx -t
62 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
63 nginx: configuration file /etc/nginx/nginx.conf test is successful 64
65 ## 建立虚拟 web 主机根目录以及测试文件
66 [root@web01 ~]# mkdir -p /var/www/bdqn
67 [root@web01 ~]# cd /var/www/bdqn/
68 [root@web01 bdqn]# vim index.html
69 www.bdqn.com
70
71 ## 建立 nginx php 连接测试文件
72 [root@web02 ~]# cd /var/www/bdqn/
73 [root@web02 bdqn]# vim info.php
74 <?php
75 phpinfo();
76 ?>
77
78 ## 建立 php 与后端 mysql 服务器测试文件
79 [root@web02 ~]# cd /var/www/bdqn/
80 [root@web02 bdqn]# vim mysql.php
81 <?php
82 $con=mysql_connect("192.168.244.203","root","Cisco@123");
83 if(!$con) echo "error";
84 else echo "success";
85 ?>
86
87 ## 启动 nginx
88 [root@web01 ~]# systemctl restart nginx
89 [root@web01 ~]# systemctl enable nginx
90 Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to
/usr/lib/systemd/system/nginx.service.
配置后端 mysql 数据库 root 用户远程连接权限
master slave 上面操作
1 mysql> grant all privileges on *.* to 'root'@'%' identified by 'Cisco@123' with grant
option;
2 Query OK, 0 rows affected, 1 warning (0.01 sec)
3
4 mysql> flush privileges;
5 Query OK, 0 rows affected (0.01 sec)
5、测试
测试访问虚拟 web 主机
提前在 windows 中配置域名解析: C:\Windows\System32\drivers\etc\hosts

三、设置和管理 NFS 共享文件系统

1、安装 NFS 服务器,配置共享目录为/opt/wwwroot
修改主机名
1 [root@centos7-7 ~]# hostnamectl set-hostname nfs
2 [root@centos7-7 ~]# bash
3 bash
4 [root@nfs ~]#
安装 nfs-utils rpcbind 软件包
1 [root@nfs ~]# yum -y install nfs-utils rpcbind
2 [root@nfs ~]# systemctl enable rpcbind
3 [root@nfs ~]# systemctl enable nfs
4 Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to
/usr/lib/systemd/system/nfs-server.service.
设置共享目录
1 [root@nfs ~]# mkdir -p /opt/wwwroot
2 [root@nfs ~]# vim /etc/exports
3 /opt/wwwroot 192.168.244.0/24(rw,sync,no_root_squash) 启动 NFS 服务程序
1 [root@nfs ~]# systemctl start rpcbind
2 [root@nfs ~]# systemctl start nfs
3 [root@nfs ~]# netstat -anpt | grep rpcbind
4 tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
711/rpcbind
5 tcp6 0 0 :::111 :::* LISTEN
711/rpcbind
查看本机发布的 NFS 共享目录
1 [root@nfs ~]# showmount -e
2 Export list for nfs:
3 /opt/wwwroot 192.168.244.0/24
2、配置 web 节点服务器
这里在 web01 上面演示, web02 同样操作,这里不在赘述
安装 nfs-utils rpcbind 软件包
1 [root@web01 ~]# yum -y install nfs-utils rpcbind
2 [root@web01 ~]# systemctl enable rpcbind
3 [root@web01 ~]# systemctl start rpcbind
4 [root@web01 ~]# netstat -anpt | grep rpcbind
5 tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
68241/rpcbind
6 tcp6 0 0 :::111 :::* LISTEN
68241/rpcbind
查看共享服务器的服务目录
1 [root@web01 ~]# showmount -e 192.168.244.207
2 Export list for 192.168.244.207: 3 /opt/wwwroot 192.168.244.0/24
挂载 NFS 共享目录
1 [root@web01 ~]# mount 192.168.244.207:/opt/wwwroot /var/www/bdqn/ // 手动挂载
2 [root@web01 ~]# vim /etc/fstab
3 ......
4 192.168.244.207:/opt/wwwroot /var/www/bdqn nfs defaults,_netdev 0 0 // 添加此行,设
置开机自动挂载
3、在共享目录下创建各虚拟主机对应的 PHP 测试网页,并添加数据库连接测试代码
1 [root@nfs ~]# cd /opt/wwwroot/
2 [root@nfs wwwroot]# vim info.php
3 <?php
4 phpinfo();
5 ?>
6
7 [root@nfs wwwroot]# vim mysql.php
8 <?php
9 $link=mysqli_connect('192.168.244.203','root','Cisco@123');
10 if($link) echo "<h1> 恭喜你,数据库连接成功 </h1>";
11 mysqli_close($link);
12 ?>
13
4、验证各虚拟主机的 PHP 测试网页能够连接 MySQL 数据库。
测试 php 测试连接 mysql
四、部署 LVS+Keeplived 高可用负载均衡
修改主机名
1 [root@centos7-8 ~]# hostnamectl set-hostname lvs-master
2 [root@centos7-8 ~]# bash
3 bash
4 [root@lvs-master ~]#
5
6
7 [root@centos7-9 ~]# hostnamectl set-hostname lvs-slave
8 [root@centos7-9 ~]# bash
9 bash
10 [root@lvs-slave ~]#
检查网卡地址 1 [root@lvs-master ~]# ip add | grep ens32
2 2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group
default qlen 1000
3 inet 192.168.23.208/24 brd 192.168.23.255 scope global noprefixroute ens32
4 [root@lvs-master ~]# ip add | grep ens34
5 3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group
default qlen 1000
6 inet 192.168.244.179/24 brd 192.168.244.255 scope global noprefixroute dynamic
ens34
7
8
9 [root@lvs-slave ~]# ip add | grep ens32
10 2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group
default qlen 1000
11 inet 192.168.23.209/24 brd 192.168.23.255 scope global noprefixroute ens32
12 [root@lvs-slave ~]# ip add | grep ens34
13 3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group
default qlen 1000
14 inet 192.168.244.180/24 brd 192.168.244.255 scope global noprefixroute dynamic
ens34
15
1、安装 LVS 和 Keepalived 工具
lvs-master lvs-slave 相同操作,这里演示 lvs-master
1 [root@lvs-master ~]# yum -y install ipvsadm keepalived
2、配置 LVS-NAT 模式,设置 VIP 地址为 192.168.23.100
创建虚拟服务器
1 [root@lvs-master ~]# ipvsadm -A -t 192.168.23.100:80 -s rr
添加节点服务器 1 [root@lvs-master ~]# ipvsadm -a -t 192.168.23.100:80 -r 192.168.244.205:80 -m -w 1
2 [root@lvs-master ~]# ipvsadm -a -t 192.168.23.100:80 -r 192.168.244.206:80 -m -w 1
查看群集节点状态
1 [root@lvs-master ~]# ipvsadm -ln
2 IP Virtual Server version 1.2.1 (size=4096)
3 Prot LocalAddress:Port Scheduler Flags
4 -> RemoteAddress:Port Forward Weight ActiveConn InActConn
5 TCP 192.168.23.100:80 rr
6 -> 192.168.244.205:80 Masq 1 0 0
7 -> 192.168.244.206:80 Masq 1 0 0
保存负载分配策略
1 [root@lvs-master ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
开启路由转发规则
1 [root@lvs-master ~]# vim /etc/sysctl.conf
2 ......
3 net.ipv4.ip_forward = 1
4 [root@lvs-master ~]# sysctl -p
5 net.ipv4.ip_forward = 1
开启服务
1 [root@lvs-master ~]# systemctl start ipvsadm
2 [root@lvs-master ~]# systemctl enable ipvsadm
3 Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to
/usr/lib/systemd/system/ipvsadm.service.
3、设置负载调度算法为轮询,健康检查间隔为 10 秒,连接超时为 3 秒,重试次数为 3 次,重试间隔 为 5 秒。
编辑 keepalived 配置文件( lvs-master
1 [root@lvs-master ~]# cd /etc/keepalived/
2 [root@lvs-master keepalived]# cp keepalived.conf keepalived.conf.bak
3 [root@lvs-master keepalived]# vim keepalived.conf
4 ! Configuration File for keepalived
5
6 global_defs {
7 notification_email { // 设置邮箱报警地址
8 m17602062016@163.com
9 }
10 notification_email_from 1780950432@qq.com // 设置邮件的发送地址
11 smtp_server 192.168.200.1
12 smtp_connect_timeout 30
13 router_id LVS_master // 运行 keepalive 服务器标识
14 }
15 vrrp_instance VI_1 { // 实例名
16 state MASTER // 指定 keepalived 角色
17 interface ens32 // 指定 HA 监测网络的接口
18 virtual_router_id 1 // 虚拟路由标识
19 priority 100 // 节点优先级
20 advert_int 1 // 设定 master backup 主机之间同步检查时间间隔,单位是秒
21 authentication { // 设定节点间通信验证类型和密码
22 auth_type PASS // 验证类型
23 auth_pass 123456 // 验证密码
24 }
25 virtual_ipaddress { // 虚拟 IP 地址( VIP
26 192.168.23.100
27 }
28 }
29
30 vrrp_instance VI_2 { // 第二个虚拟 IP 实例
31 state MASTER 32 interface ens34
33 virtual_router_id 1
34 priority 100
35 advert_int 1
36 authentication {
37 auth_type PASS
38 auth_pass 123456
39 }
40 virtual_ipaddress {
41 192.168.244.100
42 }
43 }
44
45 virtual_server 192.168.23.100 80 { // 虚拟服务器开始
46 delay_loop 10 // 健康检查时间间隔,单位是秒
47 lb_algo rr // 设置负载调度算法
48 lb_kind NAT // 设置 LVS 负载均衡的机制
49 persistence 60 // 会话保持时间,单位是秒
50 protocol TCP // 指定转发协议类型
51 real_server 192.168.244.205 80 { // 指定 real server 节点
52 weight 1 // 设置 real server 节点的权重值
53 TCP_CHECK {
54 connect_port 80 // 健康检查的端口
55 connect_timeout 3 // 无响应超时时间,单位是秒
56 nb_get_retry 3 // 重试次数
57 delay_before_retry 5 // 重试间隔时间,单位是秒
58 }
59 }
60 real_server 192.168.244.206 80 {
61 weight 1
62 TCP_CHECK {
63 connect_port 80
64 connect_timeout 3
65 nb_get_retry 3
66 delay_before_retry 5
67 }
68 }
69 }
70 [root@lvs-master keepalived]# systemctl restart keepalived 71 [root@lvs-master keepalived]# systemctl enable keepalived
72 Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to
/usr/lib/systemd/system/keepalived.service.
lvs-slave配置文件
1 [root@lvs-slave ~]# cd /etc/keepalived/
2 [root@lvs-slave keepalived]# cp keepalived.conf keepalived.conf.bak
3 [root@lvs-slave keepalived]# vim keepalived.conf
4 ! Configuration File for keepalived
5
6 global_defs {
7 notification_email {
8 m17602062016@163.com
9 }
10 notification_email_from Alexandre.Cassen@firewall.loc
11 smtp_server 192.168.200.1
12 smtp_connect_timeout 30
13 router_id LVS_master
14 }
15 vrrp_instance VI_1 {
16 state BACKUP
17 interface ens32
18 virtual_router_id 1
19 priority 99
20 advert_int 1
21 authentication {
22 auth_type PASS
23 auth_pass 123456
24 }
25 virtual_ipaddress {
26 192.168.23.100
27 }
28 }
29
30 vrrp_instance VI_2 {
31 state BACKUP 32 interface ens34
33 virtual_router_id 1
34 priority 99
35 advert_int 1
36 authentication {
37 auth_type PASS
38 auth_pass 123456
39 }
40 virtual_ipaddress {
41 192.168.244.100
42 }
43 }
44
45 virtual_server 192.168.23.100 80 {
46 delay_loop 10
47 lb_algo rr
48 lb_kind NAT
49 persistence 60
50 protocol TCP
51 real_server 192.168.244.205 80 {
52 weight 1
53 TCP_CHECK {
54 connect_port 80
55 connect_timeout 3
56 nb_get_retry 3
57 delay_before_retry 5
58 }
59 }
60 real_server 192.168.244.206 80 {
61 weight 1
62 TCP_CHECK {
63 connect_port 80
64 connect_timeout 3
65 nb_get_retry 3
66 delay_before_retry 5
67 }
68 }
69 }
70 71 [root@lvs-slave ~]# cd /etc/keepalived/
72 [root@lvs-slave keepalived]# cp keepalived.conf keepalived.conf.bak
73 [root@lvs-slave keepalived]# vim keepalived.conf
💡 注意:
内网两台 web 服务器的网关地址修改为第二个实例的 VIP 地址
192.168.244.100
第一个实例的 VIP 地址用于客户端访问使用
4、测试负载均衡是否正常工作
客户端测试访问 VIP 地址
可以看到,我们在客户端一共访问 2 次, LVS 调度器分别将请求交给 web01 web02
关闭 lvs-master 服务器
可以看到, 当主服务器 master 关闭时, VIP 地址漂移到 slave 从服务器
5、启用邮件通知功能,以便及时了解各 Web 节点服务器的健康状况
1 [root@lvs-master ~]# head -5 /etc/keepalived/keepalived.conf
2 ! Configuration File for keepalived
3
4 global_defs {
5 notification_email { // 启用邮件告警功能
6 m17602062016@163.com
7
五、部署 inotify+rsync 服务进行数据备份
1、在 Web 服务器上设置计划任务,每天凌晨 1 点通过推送方式备份网站访问日志
修改 web01 配置文件
1 [root@web01 ~]# vim /etc/rsyncd.conf
2 uid = nobody
3 gid = nobody
4 use chroot = yes // 禁锢在源目录
5 max connections = 4 // 最大连接数
6 pid file = /var/run/rsyncd.pid // 存放进程 ID 的文件位置
7 log file = /var/log/rsyncd.log // 日志文件位置
8 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 // 同步时不在压缩的文件类型
9 address = 192.168.244.205 // 监听地址
10 port = 873 // 监听端口
11 hosts allow = 192.168.244.0/24 // 允许访问的客户机地址
12 [wwwroot] // 共享模块名称
13 path = /var/log/nginx // 源目录的实际路径
14 read only = yes // 是否为只读
15 auth users = backuper // 授权账户
16 secrets file = /etc/rsyncd_users.db // 存放账户信息的数据文件
17 [root@web01 ~]# vim /etc/rsyncd_users.db
18 backuper:cisco@123 19 [root@web01 ~]# chmod 600 /etc/rsyncd_users.db
20 [root@web01 ~]# rsync --daemon
21 [root@web01 ~]# ss -anpt | grep rsync
22 LISTEN 0 5 192.168.244.205:873 *:*
users:(("rsync",pid=79686,fd=4))
23
配置 rsync 服务器,每天凌晨 1 点将 web 服务器的访问日志备份至 rsync 服务器下的 /bdqn_access_log.bak 目录
1 [root@centos7-10 ~]# hostnamectl set-hostname rsync
2 [root@centos7-10 ~]# bash
3 [root@rsync ~]# vim /etc/server.pass
4 cisco@123
5 [root@rsync ~]# chmod 600 /etc/server.pass
6 [root@rsync ~]# crontab -e // 设置定时任务,每天凌晨一点备份网站的访问日志
7 00 1 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass
backuper@192.168.244.205::wwwroot /bdqn_access_log.bak
8 [root@rsync ~]# mkdir /bdqn_access_log.bak
9 [root@rsync ~]# systemctl restart crond
10 [root@rsync ~]# systemctl enable crond
2、配置 inotify 监控 NFS 文件服务器共享目录的变动情况,一旦有更新就触发 rsync 同步操作
配置 rsync 服务器
1 [root@rsync ~]# useradd aaa
2 [root@rsync ~]# passwd aaa
3 [root@rsync ~]# vim /etc/rsyncd.conf
4 uid = aaa
5 gid = aaa
6 use chroot = yes
7 max connections = 4
8 pid file = /var/run/rsyncd.pid
9 log file = /var/log/rsyncd.log
10 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
11 address = 192.168.244.210
12 port = 873 13 hosts allow = 192.168.244.0/24
14 [wwwroot]
15 path = /var/www/html
16 comment = wwwroot
17 read only = no
18 [root@rsync ~]# mkdir -p /var/www/html
19 [root@rsync ~]# chown -R aaa:aaa /var/www/html
20 [root@rsync ~]# ls -ld /var/www/html/
21 drwxr-xr-x 2 aaa aaa 6 3 31 11:03 /var/www/html/
22 [root@rsync ~]# rsync --daemon
23 [root@rsync ~]# systemctl enable rsyncd
24 [root@rsync ~]# ss -anpt | grep rsync
25 LISTEN 0 5 192.168.244.210:873 *:*
users:(("rsync",pid=1637,fd=4))
配置 NFS 共享文件服务器
1 [root@nfs ~]# vim /etc/sysctl.conf
2 .......
3 fs.inotify.max_queued_events = 16384
4 fs.inotify.max_user_instances = 1024
5 fs.inotify.max_user_watches = 1048576
6 [root@nfs ~]# sysctl -p
7
8
9 ## 安装 inotify 工具
10 [root@nfs ~]# tar zxf inotify-tools-3.14.tar.gz -C /usr/src/
11 [root@nfs ~]# cd /usr/src/inotify-tools-3.14/
12 [root@nfs inotify-tools-3.14]# ./configure
13 [root@nfs inotify-tools-3.14]# make && make install
14
15 [root@nfs ~]# vim /etc/server.pass
16 cisco@123
17 [root@nfs ~]# chmod 600 /etc/server.pass
18 [root@nfs ~]# vim /opt/inotify_rsyncd.sh
19 #!/bin/bash
20 INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete /opt/wwwroot" 21 RSYNC_CMD="rsync -az --delete --password-file=/etc/server.pass /opt/wwwroot/
root@192.168.244.210::wwwroot"
22 $INOTIFY_CMD | while read DIRECTORY EVENT FILE
23 do
24 $RSYNC_CMD
25 done
26 [root@nfs wwwroot]# chmod +x /opt/inotify_rsyncd.sh
3、验证数据备份是否正常工作
nfs 服务器的 /opt/wwwroot/ 目录下创建文件
1 [root@nfs wwwroot]# touch a.txt b.txt c.txt
rsync 服务器的 /var/www/html 目录下查看,刚才在 nfs 服务器上创建的文件有没有被同步过来
1 [root@rsync ~]# cd /var/www/html/
2 [root@rsync html]# ls
3 1.txt 2.txt 3.txt a.txt b.txt c.txt index.html info.php mysql.php
可以看到,数据被同步过来
至此,项目完成
六、问题及分析
1、测试 PHP 无法解析后端数据库(已解决)
解决办法:后端数据库用户没有远程连接权限,添加远程连接权限即可。
2、无法通过 lvs-slave 从负载调度器访问 web 页面(已解决)
解决办法:经排查主从调度器切换没问题,VIP 地址能正常飘逸,最后发现内网 web 服务
器网关未设置正确, Keepallived 配置文件再次添加一个实例 VIP 地址,网关设置成这个地
址即可。3、inotify 监控与 rsync 同步,用户问题无法触发更新,暂且使用 root 用户(已解决)
解决办法:修改 rsync 服器共享目录所属用户,属组即可。
4、inotify 触发脚本设置开机启动无法生效。(未解决)

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

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

相关文章

Leaf分布式ID

文章目录 系统对Id号的要求UUIDsnowflakeLeafLeaf-snowflakeLeaf-segmentMySQL自增主键segment双buffer 系统对Id号的要求 1、业务 1&#xff09;全局唯一性&#xff1a;不能出现重复的ID号&#xff0c;既然是唯一标识&#xff0c;这是最基本的要求 2&#xff09;趋势递增&a…

贪心系列专题篇四

​​​​​​​ 目录 整数替换 解法一 解法二 俄罗斯套娃信封问题 堆箱子 可被三整除的最大和 距离相等的条形码 重构字符串 声明&#xff1a;接下来主要使用贪心法来解决问题&#xff01;&#xff01;&#xff01; 整数替换 题目 思路 下面将使用两种方法来解决这…

【数据结构】算法的时间复杂度与空间复杂度

计算机考研408-数据结构笔记本之——第一章 绪论 1.2 算法和算法评价 1.2.2 算法效率的度量 算法效率的度量是通过时间复杂度和空间复杂度来描述的。 1.时间复杂度 时间复杂度T(n)是事前预估算法时间开销T(n)与问题规模 n 的关系&#xff08;T 表示 “time”&#xff09;&a…

眼在手外-机器人坐标系与相机坐标系标定方法

1 眼在手外坐标系概述 实现机械臂和相机的手眼标定&#xff0c;就是要通过双目相机坐标系、机械臂坐标系和机械臂 末端执行器三者的坐标系转换&#xff0c;求出手眼转换矩阵。设双目相机坐标系为 Oc&#xff0c;标定板坐标 系为 Ow&#xff0c;末端执行器坐标系为 Oe&#xff0…

【C++】二维数组定义方式

二维数组有四种定义方式 1、数据类型 数组名[行数 ][ 列数 ]; 2、数据类型 数组名[ 行数 ][ 列数 ]{{数据1&#xff0c;数据2}&#xff0c;{数据3&#xff0c;数据4 }}; 3、数据类型 数组名[ 行数 ][ 列数 ]{数据1&#xff0c;数据2&#xff0c;数据3&#xff…

Java | Leetcode Java题解之第321题拼接最大数

题目&#xff1a; 题解&#xff1a; class Solution {public int[] maxNumber(int[] nums1, int[] nums2, int k) {int m nums1.length, n nums2.length;int[] maxSubsequence new int[k];int start Math.max(0, k - n), end Math.min(k, m);for (int i start; i < e…

04 表的操作

目录 创建查看修改删除 1. 创建 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储殷勤; 说明&#xff1a; field&#xff0c;表示列名 datatype&#xff0c;表示列的类型…

C++ 继承 派生类的拷贝构造

继承 派生类的拷贝构造构造顺序拷贝构造 引例1: 当子类,不自实现拷贝构造时,默认调用父类的拷贝构造引例2: 子类自实现拷贝构造,不做特殊处理时,只会调用父类的构造器.引例3: 显示的调用父类的拷贝构造器。案例: 内嵌函数的拷贝构造 引例1 :当内嵌子对象,子类不自实现拷贝构造时…

【java】单行注释(//)与多选注释(/* */)

文章目录 单行注释多行注释注意事项 在Java中&#xff0c;注释是用来给代码添加说明的&#xff0c;它不会被编译器执行。Java提供了两种主要的注释方式&#xff1a;单行注释和多行注释&#xff08;有时也称为块注释或块级注释&#xff09;。 单行注释 单行注释以两个正斜杠&…

数模评价决策类—熵权法

目录 文章目录 前言 一、熵权法是什么&#xff1f; 二、基本步骤 计算样本权重及熵权 总结 前言 前面我们学习了层次分析法和Topsis法&#xff0c;这两个方法都是偏主观的方法&#xff0c;这篇我们将运用较为客观的方法——熵权法&#xff0c;做出决策 一、熵权法是什么…

JavaWeb-HTML

一、HTML&CSS&JavaSript的作用: 1.HTML主要用于网页为主体结构的搭建&#xff1b; 2.CSS主要用于页面元素的美化 3.JavaScript主要用于页面元素的动态处理; 二、HTML HTML是Hyper Text Markup Language的缩写。意思是超文本标记语言。它的作用是搭建网页结构&…

2024死磕小红书,一定能赚到钱!

​2024死磕小红书&#xff0c;一定能赚到钱&#xff01;在文末领取小红书运营完全指南电子书 从2023年起&#xff0c;小红书这股热乎劲儿就像开了挂&#xff0c;突然间就成了人人想蹭的“显学”。大伙儿都想趁着平台红利期&#xff0c;分一杯羹。说来惭愧&#xff0c;我从2020年…

牛顿插值法代替泰勒公式

引入 例题 近似函数&#xff1a; 通过这个近似函数可以看出&#xff0c;若要证的函数超过二阶可导&#xff0c;那么就不适合用牛顿插值法代替泰勒公式 因为&#xff0c;后面的操作非常复杂&#xff0c;不划算了… 总结 我们可以通过牛顿插值法生成一个逼近曲线的直线&#xf…

使用Python库开发Markdown编辑器并将内容导出为图片

简介 在本文中&#xff0c;我们将探索如何使用Python的wxPython库开发一个Markdown编辑器应用程序。这个应用程序不仅能浏览和编辑Markdown文件&#xff0c;还可以将编辑的内容导出为PNG图片。 C:\pythoncode\new\markdowneditor.py 完整代码 import wx import markdown2 im…

【传知代码】实体关系抽取(论文复现)

当谈论信息提取领域的最前沿时&#xff0c;实体关系抽取无疑是其中一颗耀眼的明星。从大数据时代的信息海洋中提炼出有意义的关系&#xff0c;不仅是科技进步的体现&#xff0c;更是人类对知识管理和智能决策迫切需求的响应。本文将探索实体关系抽取的核心技术、应用场景及其在…

太阳光模拟器在光纤中的应用

概述 太阳光模拟器是一种重要的实验室设备&#xff0c;它能模拟太阳光的光谱、强度和角度分布&#xff0c;广泛应用于光纤通信、光电器件测试、太阳能研究等多个领域。通过模拟太阳光的光照条件&#xff0c;研究人员可以在实验室环境中对光电材料和器件进行性能测试和研究。 太…

二维码生成原理及解码原理

☝☝☝二维码配图 二维码 二维码&#xff08;Quick Response Code&#xff0c;简称QR码&#xff09;是一种广泛使用的二维条形码技术&#xff0c;由日本公司Denso Wave在1994年开发。二维码能有效地存储和传递信息&#xff0c;广泛应用于商品追溯、支付、广告等多个领域。二维…

c++入门基础(下篇)————引用、inline、nullptr

引用 引用的概念和定义 引⽤不是新定义⼀个变量&#xff0c;⽽是给已存在变量取了⼀个别名&#xff0c;编译器不会为引⽤变量开辟内存空间&#xff0c; 它和它引⽤的变量共⽤同⼀块内存空间。 类型& 引用别名 引用对象; 就像孙悟空也叫齐天大圣 猪八戒也叫天蓬元帅。…

Meinberg Lantime服务器监控指标解读

监控易是一款功能强大的IT基础设施监控软件&#xff0c;它能够实时监控各种IT设备的状态&#xff0c;提供全面的性能分析和告警通知服务。对于Meinberg Lantime服务器&#xff0c;监控易通过一系列监控指标&#xff0c;确保服务器的稳定运行和服务的可用性。 一、监控对象概述…

策略模式的一次应用

项目的需求是将一组图像按照相似度分类。 采用了模板匹配计算相似度的实现方式。 #include <opencv2/core.hpp> #include <openev2/core/utility.hpp> #include <opencv2/highqui.hpp> #include <openav2/imgproc.hpp> cv::Mat image matched; double …