💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐: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 11 | 192.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
| nginx、php-fpm |
NFS 共享服务器 | CentOS7.6 | NFS / 192.168.244.207 | rpcbind、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 = 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 触发脚本设置开机启动无法生效。(未解决)