0


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.10MySQL 服务器CentOS7.6
mysql_master /

192.168.244.203
MySQL5.7MySQL 服务器CentOS7.6
mysql_slave /

192.168.244.204
MySQL5.7Web 服务器CentOS7.6
Web01 /

192.168.244.205

nginx、php-fpm、

rpcbind
Web 服务器CentOS7.6
Web01 /

192.168.244.206
nginx、php-fpmNFS 共享服务器CentOS7.6NFS / 192.168.244.207rpcbind、rsync负载均衡服务器CentOS7.6
Lvs-master

ens32:

192.168.23.208

ens34:

192.168.244.179

VIP:192.168.23.100

VIP:192.168.244.100

LVS、Keepalived负载均衡服务器CentOS7.6
Lvs-slave

ens32:

192.168.23.209

ens34:

192.168.244.209

VIP:192.168.23.100

VIP:192.168.244.100
LVS、Keepalived数据备份服务器CentOS7.6
rsync /

192.168.244.210
inotify、rsync

**项目实施: **

💡注意:所有服务器的** 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 = true6

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;

1415 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

910 ##修改配置/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 successful64

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 "

恭喜你,数据库连接成功

";

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 MASTER32 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 keepalived71 [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 BACKUP32 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 }

7071 [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@12319 [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 = 87313 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 触发脚本设置开机启动无法生效。(未解决) **

标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/J56793/article/details/140753995
版权归原作者 Linux运维老纪 所有, 如有侵权,请联系我们删除。

“web高可用群集架构部署----超详细”的评论:

还没有评论