IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 中小型网站集群项目部署(未完) -> 正文阅读

[系统运维]中小型网站集群项目部署(未完)

中小型网站集群项目规划

中小型网站集群架构图

中小型网站架构图

节点IP地址及主机名规划

根据网站集群架构图可分为五个功能区域,项目采取两个C类地址段,10.0.0.0/24作为外网网段,172.16.1.0/24作为内网网段,五个功能区域IP地址段具体规划如下:

  • 负载均衡代理区域
    为负载均衡代理区域预留的外网地址范围为10.0.0.1-10.0.0.3,内网地址范围为172.16.1.1-172.16.1.9。本架构规划外网地址10.0.0.1和10.0.0.2作为两台反向代理服务器的外网网卡的实际地址,10.0.0.3作为对外虚拟地址VIP(网站域名需要解析到该VIP),内网地址172.16.1.1和172.16.1.2作为两台服务器的内网网卡的实际地址。
  • Web服务应用区域
    为Web服务应用区域预留的内网地址范围为172.16.1.10-172.16.1.29。本架构规划内网地址172.16.1.10和172.16.1.11作为两台Web服务器内网网卡的实际地址,由于采取反向代理的模式,Web服务器无需外网IP。
  • 存储服务应用区域
    为存储服务应用区域预留的内网地址范围为172.16.1.30-172.16.1.49。本架构规划内网地址172.16.1.30作为NFS存储服务器的内网IP地址,172.16.1.31作为Rsync备份服务器的内网IP地址。为了保证NFS服务的高可用性,在NFS存储服务器和Rsync备份服务器之间架设Keepalived高可用服务,将172.16.1.32作为虚拟地址VIP。
  • 数据库及缓存服务应用区域
    为数据库服务应用区域预留的内网地址范围为172.16.1.50-172.16.1.59。本架构有三台MySQL服务器,分别作为MySQL主数据库服务器、主数据库热备服务器、从数据库服务器,规划的地址分别为172.16.1.50、172.16.1.51、172.16.1.52。为保证MySQL主数据库服务的高可用性,在MySQL主数据库之间架设Keepalived服务,采用172.16.1.53作为主数据库虚拟VIP地址;如果有多台从数据库,可以为多台从数据库配置LVS负载均衡,使用额外的地址作为读数据库的VIP地址。
    为Memcached缓存区域预留的内网地址范围为172.16.1.60-172.16.1.69。本架构有两台服务器作为数据库的前端分布式缓存服务器集群(分布式调度算法使用一致性哈希算法),在每个服务器上均配置两个实例分别作为缓存服务和session会话共享服务。
  • 管理服务应用区域
    内外IP地址在200以后的均作为监控管理服务器的地址。本架构有两台服务器作为管理服务器,规划172.16.1.200作为监控管理服务器的内网IP地址,无外网IP地址,配置Zabbix监控服务和Ansible批量管理服务;规划10.0.0.201作为跳板机服务器的外网IP地址,172.16.1.201作为跳板机服务器的内网IP地址。
IP地址及主机名规划表

IP地址规划

VIP地址及对应域名解析规划表

VIP地址规划

架构hosts文件的规划

[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.1.1	LB-nginx-01	lb01.hawava.com
172.16.1.2	LB-nginx-02	lb02.hawava.com

172.16.1.10	Web-LNMP-01	web01.hawava.com
172.16.1.11	Web-LNMP-02	web02.hawava.com

172.16.1.30	Store-NFS-01	nfs.hawava.com
172.16.1.31	Store-Rsync-01	rsync.hawava.com
172.16.1.32	nfsvip.hawava.com

172.16.1.50	MySQL-master-01	dbmaster01.hawava.com
172.16.1.51	MySQL-master-02	dbmaster02.hawava.com
172.16.1.52	dbmastervip.hawava.com
172.16.1.53	MySQL-slave-01	dbslave01.hawava.com

172.16.1.61	Cache-Mc-01	cache01.hawava.com
172.16.1.62	Cache-Mc-02	cache02.hawava.com
172.16.1.63	mcvip.hawava.com

172.16.1.200	MAGE-monitor-01	monitor.hawava.com
172.16.1.201	MAGE-jump-01	jump.hawava.com

10.0.0.3	www.hawava.com blog.hawava.com bbs.hawava.com

集群节点网络服务规划

网络服务规划

集群节点关键目录结构规划

关键目录结构规划

集群服务搭建部署顺序

集群架构的部署最好从后往前进行,即从集群的后端备份、存储、数据库开始部署。

排序服务器
01Rsync备份及存储服务
02NFS存储服务
03MySQL主数据库
04MySQL主热备数据库
05MySQL从数据库
06Nginx Web01服务器
07Nginx Web02服务器
08Nginx反向代理01服务器
09Nginx反向代理02服务器

优化CentOS 7模板主机

Linux系统安全最小原则

  • 安装Linux系统最小化,选包最小化,yum安装软件包最小化,即无用的包不装;
  • 开机自启动服务最小化,即无用的服务不开启;
  • 登录Linux用户最小化,即能不用root用户就不用root用户登录;
  • 普通用户授权权限最小化,即只给用户必须的管理系统的命令;
  • Linux系统文件及目录权限最小化,禁止随意创建、更改、删除文件;
  • 操作命令最小化,如能用rm -f test.txt,就不用rm -rf test.txt。

网络配置

  1. 添加网卡
    添加一张LAN区段,内网网卡;添加一张NAT转换,用于与外网通信的外网网卡。
    添加网卡

  2. 配置网卡
    配置内网网卡

    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777728
    TYPE=Ethernet
    BOOTPROTO=none
    NAME=eno16777728
    DEVICE=eno16777728
    ONBOOT=yes
    IPADDR=172.16.1.128
    NETMASK=255.255.255.0
    

    配置外网网卡

    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554960
    TYPE=Ethernet
    BOOTPROTO=none
    NAME=eno33554960
    DEVICE=eno33554960
    ONBOOT=yes
    IPADDR=10.0.0.128
    NETMASK=255.255.255.0
    GATEWAY=10.0.0.2
    DNS1=8.8.8.8
    DNS2=114.114.114.114
    
  3. 重启网络服务并查看网卡信息

    [root@localhost ~]# systemctl restart network
    [root@localhost ~]# ip a 
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:e3:ea:86 brd ff:ff:ff:ff:ff:ff
        inet 172.16.1.128/24 brd 172.16.1.255 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fee3:ea86/64 scope link 
           valid_lft forever preferred_lft forever
    3: eno33554960: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:e3:ea:90 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.128/24 brd 10.0.0.255 scope global eno33554960
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fee3:ea90/64 scope link 
           valid_lft forever preferred_lft forever
    

注意:CentOS 7 中的Network和NetworkManager冲突

  • Network是一个系统服务,该服务是由initscripts软件包提供,initscripts包提供了操作系统运行起来后的一些脚本对系统做一些设备初始化,其中包括网络设备初始化。Network服务直接去/etc/sysconfig/network-scripts下面寻找网卡配置文件进行配置。
  • NetworkManager是一个管理系统网络连接、并且将其状态通过D-BUS(一个通过简单的应用程序互相通讯的途径的自由软件项目)进行报告的后台服务,以及一个允许用户管理网络连接的客户端程序。如nmtui图形工具就是通过NetworkManager服务运行。

NetworkManager和Network两种网络管理工具,如果两种都配置会引起冲突,一般NetworkManager用于图形化,服务器保留Network服务即可,关闭NetworkManager,并且禁止开机启动。

[root@localhost ~]# systemctl stop NetworkManager.service
[root@localhost ~]# systemctl disable NetworkManager.service
Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.
[root@localhost ~]# systemctl is-enabled NetworkManager.service
disabled

时间配置

Linux系统的时间同步服务为ntp服务,NTP(Network Time Protocol,网络时间协议)是用来是计算机时间同步的一种协议,它可以使得计算机对其服务器或时钟源做同步化,ntp提供高精准度的时间矫正。对于服务器集群来说,由于集群需要保证每个服务器的时间是保持一致的,避免在执行同一个任务时出现有的服务器滞后的现象,因此NTP服务非常必要。

  1. 确定ntp是否安装

    [root@localhost Desktop]# rpm -qa | grep ntp
    ntp-4.2.6p5-22.el7.centos.x86_64      # 为其他客户机提供时间同步服务
    fontpackages-filesystem-1.44-8.el7.noarch
    python-ntplib-0.3.2-1.el7.noarch
    ntpdate-4.2.6p5-22.el7.centos.x86_64  # 同步其他时间服务器时间
    
  2. 同步aliyun时间

    [root@localhost ~]# ntpdate ntp1.aliyun.com
    24 Aug 16:20:13 ntpdate[13991]: adjust time server 120.25.115.20 offset 0.011936 sec
    
  3. 创建定时任务,每隔一分钟将本机时间与阿里云时间同步(当机器数量少时,可以利用定时任务进行互联网时间同步,若机器数量多,建议在网内部署时间同步服务器ntp server)

    [root@localhost ~]# which ntpdate
    /usr/sbin/ntpdate
    [root@localhost ~]# crontab -e
    [root@localhost ~]# crontab -l
    */1 * * * *	/usr/sbin/ntpdate ntp1.aliyun.com>/dev/null 2>&1
    

语系配置

  1. 修改语系设置

    [root@localhost Desktop]# localectl set-locale LANG="en_US.UTF-8"
    
  2. 查看语系设置

    [root@localhost Desktop]# echo $LANG              # 通过环境变量LANG查看
    en_US.UTF-8
    [root@localhost Desktop]# cat /etc/locale.conf    # 通过语系配置文件/etc/locale.conf查看   
    LANG="en_US.UTF-8"
    [root@localhost Desktop]# localectl               # 通过命令localectl查看
       System Locale: LANG=en_US.UTF-8
           VC Keymap: us
          X11 Layout: us
    

yum源配置

基础yum源优化:使用阿里云yum源进行优化 阿里云yum源

  1. 备份
    [root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
  2. 下载新的CentOS-Base.repo到/etc/yum.repos.d/
    [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    

扩展yum源优化:使用阿里云epel镜像进行优化 阿里云epel镜像

  1. 下载新的epel.repo到/etc/yum.repos.d/
    [root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    

运行yum makecache生成缓存

[root@localhost ~]# yum makecache

host文件配置

[root@localhost Desktop]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6


172.16.1.1      LB-nginx-01     lb01.hawava.com
172.16.1.2      LB-nginx-02     lb02.hawava.com

172.16.1.10     Web-LNMP-01     web01.hawava.com
172.16.1.11     Web-LNMP-02     web02.hawava.com

172.16.1.30     Store-NFS-01    nfs.hawava.com
172.16.1.31     Store-Rsync-01  rsync.hawava.com
172.16.1.32     nfsvip.hawava.com

172.16.1.50     MySQL-master-01 dbmaster01.hawava.com
172.16.1.51     MySQL-master-02 dbmaster02.hawava.com
172.16.1.52     dbmastervip.hawava.com
172.16.1.53     MySQL-slave-01  dbslave01.hawava.com

172.16.1.61     Cache-Mc-01     cache01.hawava.com
172.16.1.62     Cache-Mc-02     cache02.hawava.com
172.16.1.63     mcvip.hawava.com

172.16.1.200    MAGE-monitor-01 monitor.hawava.com
172.16.1.201    MAGE-jump-01    jump.hawava.com

10.0.0.3        www.hawava.com blog.hawava.com bbs.hawava.com

SSH登录配置

Linux 远程连接默认端口是22,为了系统安全,建议更改默认配置

[root@localhost Desktop]# cp /etc/ssh/sshd_config{,.bak}    # 对ssh服务端配置文件做一个备份
[root@localhost Desktop]# vim /etc/ssh/sshd_config          # 编辑服务端配置文件sshd_config
Port 10086                                                  # 指定sshd守护进程监听的端口号为10086
ListenAddress 0.0.0.0                                       # 监听地址,指定一块网卡接受远程访问的请求(指定监听地址只能是本地网卡有的地址)
PermitRootLogin no                                          # 是否允许root登录,默认允许,建议修改为no
PermitEmptyPasswords no                                     # 是否允许密码为空的用户远程登录,默认为no
UseDNS no                                                   # 指定sshd是否对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应,默认为yes,建议修改为no(加速SSH连接)
GSSAPIAuthentication no                                     # 是否开启GSSAPI认证功能,默认开启,建议关闭,解决Linux之间使用SSH连接慢的问题

[root@localhost Desktop]# systemctl reload sshd            # 平滑重启sshd使配置生效(平滑重启不会影响正在SSH连接的用户,推荐度大于restart)

关闭SELinux

SELinux(Security-Enhanced Linux)是美国国家安全局用于对强制访问控制的实现,建议关闭。

修改配置文件,关闭SELinux永久生效

[root@localhost Desktop]# sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config 
[root@localhost Desktop]# grep ^SELINUX= /etc/selinux/config 
SELINUX=disabled

命令行操作,临时关闭SELinux

[root@localhost Desktop]# setenforce 
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@localhost Desktop]# setenforce 0

getenforce查看SELinux状态

[root@localhost Desktop]# getenforce 
Permissive

关闭Firewalld

[root@localhost Desktop]# systemctl stop firewalld.service     # 临时关闭防火墙服务
[root@localhost Desktop]# systemctl disable firewalld.service     # 永久关闭防火墙服务
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

提权letty用户

为了安全及管理的方便,可以将需要root权限的普通用户加入sudo管理,这样就可以使用普通用户登录、利用root权限管理系统,就不需要root账号及密码了。为了管理方便,这里暂时授予letty用户ALL权限,即可以管理整个系统。

[root@localhost Desktop]# visudo    # 该命令相当于直接编辑/etc/sudoers文件,使用命令方式更加安全

letty   ALL=	NOPASSWD: ALL
用户名  被管理主机的地址=(可用的身份)    授权命令(绝对路径)
  • 用户名/组名:代表root给哪个用户或者用户组赋予命令;
  • 被管理主机的地址:用户可以用指定的命令管理指定IP地址的服务器(ALL代表可以管理任何主机,如果写固定IP,表示用户可以管理指定的服务器);
  • 可用的身份:将来源用户切换成什么身份使用,ALL代表可以切换成任意身份(该字段可以省略);
  • 授权命令:代表root将什么命令授权给普通用户(默认是ALL,代表任何命令,这是万万不行的)。

NOPASSWD:如果不加参数NOPASSWD,普通用户每执行一次sudo都要输入一次密码,NOPASSWD参数可以使得用户执行sudo命令时不再需要密码验证。

切换到letty普通用户后,可以通过sudo -l命令查看当前用户备授予的sudo权限集合

[root@localhost Desktop]# su - letty
Last login: Tue Aug 24 15:33:10 CST 2021 on pts/0
[letty@localhost ~]$ sudo -l
Matching Defaults entries for letty on this host:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE
    INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME
    LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User letty may run the following commands on this host:
    (root) NOPASSWD: ALL

锁定关键系统文件

使用chattr命令对关键系统文件(如账号密码文件)上锁,在上锁后所有用户都不能对文件删除修改(包括root用户),防止文件被提权篡改。

[root@localhost Desktop]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow

[root@localhost Desktop]# lsattr -a /etc/passwd /etc/shadow /etc/group /etc/gshadow
----i----------- /etc/passwd
----i----------- /etc/shadow
----i----------- /etc/group
----i----------- /etc/gshadow

上锁后如果需要进行临时操作,可以解锁后对文件进行修改之后再上锁。

[root@localhost Desktop]# chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow    # 对文件解锁

Rsync备份服务器部署

部署规划

服务器说明外网IP内网IP主机名称域名
Rsync备份服务器172.16.1.31/24Store-Rsync-01rsync.hawava.com

Rsync备份服务器部署应用:

  1. 安装Rsync服务软件,提供网络数据远程备份功能,设定备份目录为/backup;
  2. 安装Keepalived服务软件,为NFS服务宕机提供热备切换功能;
  3. 开发检查所有服务器数据备份完整性脚本,并将结果通过定时任务每天发邮件给管理员。

环境准备

  1. Rsync备份服务器操作系统及内核版本信息

    [root@localhost Desktop]# cat /etc/redhat-release 
    CentOS Linux release 7.2.1511 (Core) 
    [root@localhost Desktop]# uname -r
    3.10.0-327.el7.x86_64
    [root@localhost Desktop]# uname -m
    x86_64
    
  2. Rsync备份服务器网络配置

    [root@localhost Desktop]# sed -i s/128/31/g  /etc/sysconfig/network-scripts/ifcfg-eno16777728 
    [root@localhost Desktop]# systemctl restart network
    [root@localhost Desktop]# ip addr sh dev eno16777728
    2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:4a:49:fb brd ff:ff:ff:ff:ff:ff
        inet 172.16.1.31/24 brd 172.16.1.255 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe4a:49fb/64 scope link 
           valid_lft forever preferred_lft forever
    
  3. Rsync备份服务器主机名配置

    [root@localhost Desktop]# hostnamectl set-hostname Store-Rsync-01
    

Rsync概述

Rsync简介

Rsync是一款开源、快速、多功能、可实现全量以及增量备份的本地或远程数据同步备份工具。Rsync可以本地复制、远程复制或者守护进程方式复制,它可以在不改变原有数据的属性信息的情况下实现数据的备份迁移,提供了大量参数来控制其行为的各个方面;rsync使用rsync算法来进行数据同步,该算法只传送两个文件的不同部分,不是每次都整份传送,因此速度提升。

Rsync语法

本地备份

Local:  rsync [OPTION...] SRC... [DEST]
        SRC:要备份的数据信息  
        [DEST]:备份到指定的路径信息

远程备份

Access via remote shell:
将远程服务器的数据拉到本地服务器(pull):
  Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
        [USER@]:以什么用户身份拉取数据(默认当前用户)
        HOST:远程主机IP或主机名称
        : :使用功能远程shell进行备份同步时,HOST与SRC之间使用一个冒号作为分隔符
        SRC:拉取的数据信息
        DEST:保存到本地的路径信息
        
将本地服务器的数据备份到远程服务器(push):
  Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
        SRC:本地要备份到远程服务器的数据
        [USER@]:以什么用户身份推送数据(默认当前用户)
        HOST:远程主机IP或主机名称
        : :使用功能远程shell进行备份同步时,HOST与DEST之间使用一个冒号作为分隔符
        DEST:保存到远程主机的路径信息

守护进程备份(配置管理、安全策略、自动传输)

Access via remote shell:
将远程服务器的数据拉到本地服务器(pull):
  Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
        [USER@]:以什么用户身份拉取数据(默认当前用户)
        HOST:远程主机IP或主机名称
        : :使用功能远程shell进行备份同步时,HOST与SRC之间使用一个冒号作为分隔符
        SRC:拉取的数据信息
        DEST:保存到本地的路径信息
        
将本地服务器的数据备份到远程服务器(push):
  Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
        SRC:本地要备份到远程服务器的数据
        [USER@]:以什么用户身份推送数据(默认当前用户)
        HOST:远程主机IP或主机名称
        : :使用功能远程shell进行备份同步时,HOST与DEST之间使用一个冒号作为分隔符
        DEST:保存到远程主机的路径信息

Rsync常用参数

参数说明
-a,- -archive表示以递归方式传输文件,并保留文件属性不变(rtopgDI参数整合)
-v ,- -verbose详细输出,显示传输时的进度等信息
-z,- -compress传输时进行压缩以提高传输效率
-r,- -recursive递归模式,目录下所有目录都可以传输
-t,- -times保持文件修改时间不变
-o,- -owner保持文件所有者信息不变
-p,- -perms保持文件权限信息不变
-g,- -group保持文件所属组信息不变
-D,- -devices保持设备信息不变
-I,- -links保持链接文件属性信息不变(数据不保证)
- -exclude=pattern排除指定的不需要传输的文件
- -exclude-from=file排除指定的不需要传输的文件信息(批量排除)
- -delete无差异同步参数,保持两台服务器数据高度一致(谨慎使用,容易误删)

Rsync传输原理

Rsync传输原理

  • 客户端执行命令后,发送请求给服务端;
  • 服务端判断客户端请求的用户名是否在配置文件/etc/rsyncd.conf中(auth users),如果不在,会产生错误:@ERROR: auth failed on module backup;
  • 若用户名正确,服务端会去查看rsync的认证密码文件/etc/rsync.password,如果密码错误,会产生错误:@ERROR: auth failed on module backup;
  • 若用户名和密码均正确,该请求顺利通过安全检查,客户端身份变为rsync服务指定的虚拟用户身份rsync;
  • 以rsync用户存储数据时,确保[backup]模块的备份目录/backup/存在,倘若没有该目录,发生报错:@ERROR: chdir failed;
  • 如果备份目录存在,但是目录权限不允许rsync用户进行读写,发生报错:Permission denied。
  • 如果以上均没有问题,成功备份数据。

Rsync部署

安装Rsync软件

rpm -qa | grep rsync查看本机是否安装rsync服务,如果没有则使用yum -y install rsync进行安装

[root@store-rsync-01 ~]# rpm -qa | grep rsync
rsync-3.0.9-17.el7.x86_64

编辑配置文件

编辑rsync服务的配置文件/etc/rsyncd.conf

[root@store-rsync-01 ~]# vim /etc/rsyncd.conf

uid = rsync                             --管理备份目录的用户
gid = rsync                             --管理备份目录的用户组
port = 873                              --指定rsync备份服务的端口号
use chroot = no                         --安全相关配置
fake super = yes                        --将rsync虚拟用户伪装成一个超级管理员用户
max connections = 200                   --最大连接数
timeout = 300                           --超时时间
pid file = /var/run/rsyncd.pid          --记录进程号码信息
lock file = /var/run/rsyncd.lock        --锁文件(通过锁文件控制最大连接数)
log file = /var/log/rsyncd.log          --日志文件
ignore errors                           --忽略传输中的简单错误
read only = false                       --指定备份目录为可读可写
list = false                            --客户端是否可以查看服务端的模块信息
hosts allow = 172.16.1.0/24             --允许传输备份数据的主机(白名单)
auth users = rsync_backup               --指定认证用户
secrets file = /etc/rsync.passwd        --指定认证用户的密码文件(需自己创建,格式为 认证用户名称:密码信息)

[backup]                                --模块信息 
path = /backup                          --指定备份目录 
comment = "Backup Directory"            --模块说明

搭建服务环境

  1. 创建rsync虚拟用户

    [root@store-rsync-01 ~]# useradd -M -s /sbin/nologin rsync
    [root@store-rsync-01 ~]# id rsync
    uid=1002(rsync) gid=1002(rsync) groups=1002(rsync)
    
  2. 创建认证用户rsync_backup的认证密码文件并修改其权限
    格式:认证用户名称:密码信息

    [root@store-rsync-01 ~]# echo "rsync_backup:redhat" > /etc/rsync.passwd
    [root@store-rsync-01 ~]# cat /etc/rsync.passwd 
    rsync_backup:redhat
    [root@store-rsync-01 ~]# ll /etc/rsync.passwd 
    -rw-r--r-- 1 root root 20 Aug 25 22:59 /etc/rsync.passwd
    [root@store-rsync-01 ~]# chmod 600 /etc/rsync.passwd 
    [root@store-rsync-01 ~]# ll /etc/rsync.passwd 
    -rw------- 1 root root 20 Aug 25 22:59 /etc/rsync.passwd
    
  3. 创建备份目录并修改其属性

    [root@store-rsync-01 ~]# chown rsync.rsync /backup/
    [root@store-rsync-01 ~]# ll -d /backup/
    drwxr-xr-x 2 rsync rsync 6 Aug 25 21:25 /backup/
    

启动服务程序

[root@store-rsync-01 ~]# systemctl start rsyncd
[root@store-rsync-01 ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@store-rsync-01 ~]# systemctl is-enabled rsyncd
enabled
[root@store-rsync-01 ~]# netstat -lntup | grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      4775/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      4775/rsync          

脚本实现部署

编辑脚本部署Rsync服务:/server/scripts/rsync.sh

[root@store-rsync-01 ~]# cat /server/scripts/rsync.sh 
#!/bin/bash
# File name:	rsync.sh
# Description:	Install and configure rsync service
# Author:	Letty
# Mail:	small_bowl@126.com

# Install rsync service 
function rsyncd_install(){
	rpm -qa | grep rsync > /dev/null
	if [ $? -eq 0 ]
	then
		echo "Rsync has been installed."
	else
		yum install -y rsync > /dev/null
	fi		
}

# Configure rsyncd.conf
function rsyncd_conf(){
cat>/etc/rsyncd.conf<<EOF
uid = rsync
gid = rsync
port = 873
use chroot = no
fake super = yes
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
auth users = rsync_backup
secrets file = /etc/rsync.passwd
	
[backup]
path = /backup
comment = "Backup Directory"
EOF
}

# Prepare rsync environment
function rsyncd_preparation(){
	grep "rsync" /etc/passwd > /dev/null
	if [ $? -eq 0 ]
	then
		echo "User rsync has been existed."
	else
		useradd -M -s /sbin/nologin rsync
	fi
	[ ! -d /backup ] && mkdir -p /backup && chown -R rsync.rsync /backup
	[ ! -f /etc/rsync.passwd ] && echo "rsync_backup:redhat" > /etc/rsync.passwd && chmod 600 /etc/rsync.passwd 
}

# Start and enable rsyncd.service
function start_rsyncd(){
	if [ ! -f /var/run/rsyncd.pid ]
	then
		systemctl start rsyncd > /dev/null
		systemctl enable rsyncd > /dev/null	
	fi	
}

function main(){
	rsyncd_install
	rsyncd_conf
	rsyncd_preparation
	start_rsyncd
}
main

实现NFS高可用

Rsync备份服务器要成为NFS存储服务器的热备,实现NFS服务高可用,需与NFS存储服务器作相同操作。

部署NFS服务

# 下载安装软件
[root@store-rsync-01 ~]# yum install -y nfs-utils rpcbind

# 编写配置文件
[root@store-rsync-01 ~]# echo "/data	172.16.1.0/24(rw,sync)" >> /etc/exports

# 搭建服务环境
[root@store-rsync-01 ~]# useradd -M -s /sbin/nologin www
[root@store-rsync-01 ~]# id www
uid=1001(www) gid=1001(www) groups=1001(www)

[root@store-rsync-01 ~]# mkdir -p /data
[root@store-rsync-01 ~]# chown www.www -R /data
[root@store-rsync-01 ~]# chmod 700 /data
[root@store-rsync-01 ~]# ll -d /data
drwx------ 2 www www 6 Aug 27 21:16 /data

# 启动服务程序
[root@store-rsync-01 ~]# systemctl start rpcbind.service 
[root@store-rsync-01 ~]# systemctl enable rpcbind.service 
[root@store-rsync-01 ~]# systemctl start nfs
[root@store-rsync-01 ~]# systemctl enable nfs

部署Keepalived服务

  1. 部署规划环境准备
  2. 安装keepalived软件
    [root@store-rsync-01 ~]# yum install -y keepalived
    
  3. 编写keepalived配置文件
    [root@store-rsync-01 ~]# cp /etc/keepalived/keepalived.conf{,.bak}
    [root@store-rsync-01 ~]# vim /etc/keepalived/keepalived.conf
    
    ! Configuration File for keepalived
    
    global_defs {
            router_id NFS-Slave       --高可用集群主机身份标识 
    }
    
    vrrp_instance NFS-Keepalived {
        state BACKUP                  --标识身份(state不生效,依据priority区别主从)
        interface eno16777728         --VIP绑定的网卡
        virtual_router_id 51          --组ID,同组的ID相同
        priority 100                  --优先级,优先级高的为master
        advert_int 1                  --组播包发送的间隔时间(s)
        authentication {              --认证模式为密码认证
            auth_type PASS
            auth_pass hawava
        }
        virtual_ipaddress {          --VIP
            172.16.1.32/24
        }
    }
    
  4. 启动keepalived服务
    [root@store-rsync-01 ~]# systemctl start keepalived.service 
    [root@store-rsync-01 ~]# systemctl enable keepalived.service
    

NFS存储服务器部署

部署规划

服务器说明外网IP内网IP主机名称域名
NFS存储服务器172.16.1.30/24Store-NFS-01nfs.hawava.com

NFS存储服务器部署应用:

  1. 安装NFS服务软件,提供网络文件共享功能,设定共享目录为/data,用于存放所有集群Web服务器上传的图片、附件等;
  2. 安装inotify服务软件,实时同步NFS服务资源到Rsync备份服务器;
  3. 安装Keepalived服务软件,为NFS服务提供热备切换功能;
  4. 开发通用脚本,并通过定时任务把NFS本地配置数据备份到Rsync备份服务器。

环境准备

  1. NFS存储服务器操作系统及内核版本信息

    [root@store-nfs-01 ~]# cat /etc/redhat-release 
    CentOS Linux release 7.2.1511 (Core) 
    [root@store-nfs-01 ~]# uname -r
    3.10.0-327.el7.x86_64
    [root@store-nfs-01 ~]# uname -m
    x86_64
    
  2. NFS存储服务器网络配置

    [root@localhost ~]# sed -i s/128/30/g /etc/sysconfig/network-scripts/ifcfg-eno16777728 
    [root@localhost ~]# systemctl restart network 
    [root@localhost ~]# ip a s dev eno16777728
    2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:f2:c4:af brd ff:ff:ff:ff:ff:ff
        inet 172.16.1.30/24 brd 172.16.1.255 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fef2:c4af/64 scope link 
           valid_lft forever preferred_lft forever
    
  3. NFS存储服务器主机名配置

    [root@localhost ~]# hostnamectl set-hostname Store-NFS-01
    

NFS概述

NFS简介

NFS(Network File System,网络文件系统),主要功能为通过网络(一般局域网)让不同的主机系统之间可以共享文件或目录。NFS是基于RPC(远程过程调用)协议,采用客户端/服务器结构实现的分布式文件系统,NFS服务器允许NFS客户端将远端NFS服务器端的共享目录挂载到本地,在NFS客户端本地看来,NFS服务器共享的目录就好像自己的磁盘分区和目录一样。

在企业集群架构环境中,NFS网络文件系统一般用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传的文件都会被放在NFS共享目录中(注:网站的程序代码不要放在NFS共享目录中,网站程序代码直接批量发布到Web节点提供访问比共享到NFS里效率更高)。

NFS原理

在NFS服务器设置好一个共享目录/data后,其他有权限访问NFS服务器端的客户端都可以将该共享目录挂载到客户端本地的某个挂载点上,NFS共享目录权限相关因素:

  • 共享目录本身权限(755 nfsnobody nfsnobody)
  • 配置文件权限参数(rw/ro *squash anonuid/anongid)
  • 客户端挂载命令参数 (rw/ro)

客户端正确挂载后,就可以通过NFS客户端挂载点所在目录查看到NFS服务端/data共享目录下的所有数据,在客户端上查看时,NFS服务端的/data目录就相当于客户端本地的磁盘分区或目录。

已知NFS系统通过网络进行数据传输,因此NFS会使用一些端口来传输数据,NFS在传输数据时使用的端口会随机选择,那么NFS客户端如何得知NFS服务端使用哪个端口呢?

答案是通过RPC(Remote Procedure Call,远程过程调用)协议/服务来实现。因为NFS服务支持的功能很多,每启动一个功能就会启用一些端口来传输数据,因此NFS功能所对应的端口无法固定,而是随机采用未被使用的端口用作传输,这就造成了客户端和服务器端对接的困扰,于是RPC中介来帮忙。

RPC服务最主要的作用就是指定每个NFS功能对应的端口,并将该信息传递给客户端,让客户端能够连接到服务器端正确的端口。因此为了让RPC了解NFS的端口信息,RPC服务需要在NFS服务之前启动,而后再启动NFS服务器时会随机取用数个端口,并主动向RPC服务注册(RPC服务固定使用111端口监听客户端的需求并回应给客户端正确的端口)。

RPC

NFS工作流程

NFS工作流程
当访问程序通过NFS客户端向NFS服务端存取文件时,请求数据流程如下:

  • 用户访问网站程序,由网站程序在NFS客户端上发出存取NFS文件请求,这时NFS客户端的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发送NFS文件存取请求;
  • NFS服务端的RPC服务接收到请求后找到对应的已注册好的NFS端口,并发送给NFS客户端的RPC服务;
  • NFS客户端获得正确的端口后,与NFS服务端联机存取数据;
  • NFS客户端存取数据成功后,返回到前端访问程序,通知用户存取结果,至此完成一次存取操作。

NFS部署

安装NFS&RPC软件

部署NFS服务需要安装以下两个软件包:

  • nfs-utils:NFS服务主程序
  • rpcbind:RPC服务主程序

rpm -qa | grep -E "nfs-utils|rpcbind"检查这两个软件是否安装,如果没有则使用yum -y install nfs-utils rpcbind进行安装。

[root@store-nfs-01 ~]# rpm -qa | grep -E "nfs-utils|rpcbind"
rpcbind-0.2.0-32.el7.x86_64
nfs-utils-1.3.0-0.21.el7.x86_64

编辑配置文件

NFS服务的主配置文件/etc/exports(该文件不一定存在,可能需要vim手动建立),格式如下:

NFS共享目录 NFS客户端地址(参数1,参数2,…)

[root@store-nfs-01 ~]# vim /etc/exports

/data	172.16.1.0/24(rw,sync)

搭建服务环境

  1. 创建www用户
    [root@store-nfs-01 ~]# useradd -M -s /sbin/nologin www
    [root@store-nfs-01 ~]# id www
    uid=1001(www) gid=1001(www) groups=1001(www)
    
  2. 创建共享目录并修改其属性
    [root@store-nfs-01 ~]# mkdir -p /data
    [root@store-nfs-01 ~]# ll -d /data
    drwxr-xr-x 2 root root 6 Aug 26 21:29 /data
    [root@store-nfs-01 ~]# chown www.www -R /data
    [root@store-nfs-01 ~]# chmod 700 /data
    [root@store-nfs-01 ~]# ll -d /data
    drwx------ 2 www www 6 Aug 26 21:29 /data
    

问:为何将共享目录/data的所属主组设置为www,而不设置为匿名用户nfsnobody?

这是因为NFS服务器共享目录用来存储网站的静态资源,而Web服务器网站的映射用户为www用户,为了数据的安全,需要做相应的权限控制,设置仅指定非root普通用户可对共享目录进行访问。
root_squash和no_all_squash参数是nfs的默认配置,即默认将root用户的访问映射为匿名用户nfsnobody,以及所有普通用户的访问均不作映射。在将共享目录/data的所属主组设置为www后,root用户映射过来是匿名用户nfsnobody无权限对共享目录进行操作,而除了www的其他普通用户也无权限对共享目录进行操作,由此实现仅www用户可对共享目录进行存取操作(注意:www用户的uid和gid与Web服务器www用户保持一致)。

启动服务程序

  1. 首先启动RPC服务并设置开机自启

    [root@store-nfs-01 ~]# systemctl start rpcbind.service
    [root@store-nfs-01 ~]# netstat -lntup | grep 111
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      11707/rpcbind       
    tcp6       0      0 :::111                  :::*                    LISTEN      11707/rpcbind       
    udp        0      0 0.0.0.0:111             0.0.0.0:*                           11707/rpcbind       
    udp6       0      0 :::111                  :::*                                11707/rpcbind       
    
    [root@store-nfs-01 ~]# systemctl enable rpcbind.service     # 开机自启不起作用
    [root@store-nfs-01 ~]# systemctl is-enabled rpcbind.service     
    indirect
    
    [root@store-nfs-01 ~]# systemctl add-wants multi-user rpcbind.service    # 强制使rpcbind服务由目标(例如多用户)启动
    Created symlink from /etc/systemd/system/multi-user.target.wants/rpcbind.service to /usr/lib/systemd/system/rpcbind.service.
    [root@store-nfs-01 ~]# systemctl is-enabled rpcbind.service 
    enabled
    
  2. 而后启动NFS服务并设置开机自启

    [root@store-nfs-01 ~]# systemctl start nfs
    [root@store-nfs-01 ~]# systemctl enable nfs
    Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
    

实时同步

实时同步原理

实时同步

  1. NFS服务器部署好rsync守护进程服务,实现数据传输;
  2. NFS服务器部署好inotify监控服务,实现监控目录数据变化;
  3. NFS服务器部署好sersync同步服务,将rsync服务和inotify服务建立联系,对变化的数据进行实时备份传输。

实时同步部署

Rsync服务客户端部署

  1. rpm -qa | grep rsync确认rsync是否安装,如果没有安装则yum -y install rsync

    [root@store-nfs-01 ~]# rpm -qa | grep rsync
    rsync-3.0.9-17.el7.x86_64
    
  2. 创建认证用户的密码文件(只包含认证用户的密码信息,注意与rsync服务端的密码文件进行区分)

    [root@store-nfs-01 ~]# echo "redhat" > /etc/rsync.passwd
    [root@store-nfs-01 ~]# chmod 600 /etc/rsync.passwd 
    [root@store-nfs-01 ~]# ll /etc/rsync.passwd 
    -rw------- 1 root root 7 Aug 26 23:48 /etc/rsync.passwd
    
  3. 使用- -password-file=/etc/rsync.passwd实现免交互传输测试

    # NFS
    [root@store-nfs-01 ~]# rsync -avz /tmp/test.tmp rsync_backup@172.16.1.31::backup --password-file=/etc/rsync.passwd
    sending incremental file list
    test.tmp
    
    sent 75 bytes  received 27 bytes  204.00 bytes/sec
    total size is 6  speedup is 0.06
    
    # Rsync
    [root@store-rsync-01 ~]# ls /backup/
    test.tmp
    

Inotify监控服务的部署

  1. 安装inotify软件

    [root@store-nfs-01 ~]# yum install -y inotify-tools
    
  2. 了解inotify命令

    • /usr/bin/inotifywait:监控目录数据信息变化
    • /usr/bin/inotifywatch:对监控的变化信息进行统计

    inotifywait命令使用

    inotifywait [参数] 被监控目录

    说明
    -m,- -monitor一直监控目录的变化
    -r,- -recursive递归监控
    -q,- -quiet尽量减少信息的输出
    -e,- -event指定监控的事件信息
    - -format<fmt>指定输出信息的格式
    - -timefmt指定输出信息的时间格式

    inotifywait命令格式

    inotifywait -mrq --timefmt “%F” --format “%T %w %f Event: %e” -e CREATE,DELETE,MOVED_TO,CLOSE_WRITE /data

    [root@store-nfs-01 ~]# inotifywait -mrq --timefmt "%F" --format "%T %w %f Event: %e" -e CREATE,DELETE,MOVED_TO,CLOSE_WRITE /data
    2021-08-27 /data/ hello.txt Event: CREATE
    2021-08-27 /data/ hello.txt Event: CLOSE_WRITE,CLOSE
    2021-08-27 /data/ hello.txt Event: CLOSE_WRITE,CLOSE
    2021-08-27 /data/ hello.txt Event: DELETE
    

Sersync同步服务部署

  1. 安装sersync服务,软件下载地址:https://github.com/wsgzao/sersync

    [root@store-nfs-01 ~]# cd /server/tools/
    # 下载sersync软件
    [root@store-nfs-01 tools]# wget https://github.com/wsgzao/sersync/raw/master/sersync2.5.4_64bit_binary_stable_final.tar.gz  
    
    # 解压sersync压缩包
    [root@store-nfs-01 tools]# tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz 
    [root@store-nfs-01 tools]# ll
    total 712
    drwxr-xr-x 2 root root     39 Oct 26  2011 GNU-Linux-x86
    -rw-r--r-- 1 root root 727290 Aug 27 00:30 sersync2.5.4_64bit_binary_stable_final.tar.gz
    [root@store-nfs-01 tools]# tree GNU-Linux-x86/
    GNU-Linux-x86/
    ├── confxml.xml    --sersync配置文件
    └── sersync2       --sersync命令文件
    
    0 directories, 2 files
    
    # 将sersync相关文件移动至/usr/local/用户目录下
    [root@store-nfs-01 tools]# mkdir /usr/local/sersync
    [root@store-nfs-01 tools]# mv GNU-Linux-x86/* /usr/local/sersync/
    [root@store-nfs-01 tools]# cd /usr/local/sersync/
    [root@store-nfs-01 sersync]# ll
    total 1772
    -rwxr-xr-x 1 root root    2214 Oct 26  2011 confxml.xml
    -rwxr-xr-x 1 root root 1810128 Oct 26  2011 sersync2
    
  2. 编写配置文件

    [root@store-nfs-01 sersync]# cp confxml.xml{,.bak}
    [root@store-nfs-01 sersync]# vim confxml.xml
    
    # 排除指定数据信息不要进行实时同步
      6     <filter start="false">   # 默认关闭
      7         <exclude expression="(.*)\.svn"></exclude>
      8         <exclude expression="(.*)\.gz"></exclude>
      9         <exclude expression="^info/*"></exclude>
     10         <exclude expression="^static/*"></exclude>
     11     </filter>
    
    # 定义inotify程序需要监控的事件信息
     12     <inotify>
     13         <delete start="true"/>
     14         <createFolder start="true"/>
     15         <createFile start="false"/>
     16         <closeWrite start="true"/>
     17         <moveFrom start="true"/>
     18         <moveTo start="true"/>
     19         <attrib start="false"/>
     20         <modify start="false"/>
     21     </inotify>
    
    # sersync核心配置
     24         <localpath watch="/data">                          --指定监控的目录
     25             <remote ip="172.16.1.31" name="backup"/>       --指定备份服务器IP和备份模块信息
     26             <!--<remote ip="192.168.8.39" name="tongbu"/>-->
     27             <!--<remote ip="192.168.8.40" name="tongbu"/>-->
     28         </localpath>
     29         <rsync>
     30             <commonParams params="-az"/>                    --指定rsync命令参数
     31             <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.passwd"/>    --指定rsync认证用户和认证密码文件
     32             <userDefinedPort start="true" port="873"/><!-- port=874 -->  --指定rsync端口信息
     33             <timeout start="true" time="200"/><!-- timeout=100 -->
     34             <ssh start="false"/>
     35         </rsync>
    
  3. 启动sersync服务并设置开机自启

    # 将sersync命令路径放置于环境变量PATH
    [root@store-nfs-01 sersync]# vim /etc/profile
    
    export PATH="$PATH:/usr/local/sersync"
    [root@store-nfs-01 sersync]# source /etc/profile
    
    # 查看sersync命令用法
    [root@store-nfs-01 sersync]# sersync -h
    set the system param
    execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
    execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
    parse the command param
    _______________________________________________________
    参数-d:启用守护进程模式
    参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
    c参数-n: 指定开启守护线程的数量,默认为10个
    参数-o:指定配置文件,默认使用confxml.xml文件
    参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
    参数-m:单独启用其他模块,使用 -m socket 开启socket模块
    参数-m:单独启用其他模块,使用 -m http 开启http模块
    不加-m参数,则默认执行同步程序
    ________________________________________________________________
    
    # 守护进程启动sersync服务
    [root@store-nfs-01 sersync]# sersync -dro /usr/local/sersync/confxml.xml
    ...
    execute command: cd /data && rsync -az -R --delete ./  --port=873  --timeout=200 rsync_backup@172.16.1.31::backup --password-file=/etc/rsync.passwd >/dev/null 2>&1 
    run the sersync: 
    watch path is: /data
    
    # 设置sersync程序开机自启
    [root@store-nfs-01 sersync]# echo "sersync -dro /usr/local/sersync/confxml.xml" >> /etc/rc.d/rc.local 
    
  4. sersync实时同步测试
    NFS存储服务器端

    [root@store-nfs-01 ~]# cd /data
    [root@store-nfs-01 data]# ls
    [root@store-nfs-01 data]# echo hello > hello.txt
    

    Rsync备份服务器端

    [root@store-rsync-01 ~]# cd /backup/
    [root@store-rsync-01 backup]# ls
    hello.txt
    

    成功撒花~

  5. 停止sersync的两种方法
    killall 服务名

    [root@store-nfs-01 data]# killall sersync
    

    kill 进程号

    [root@store-nfs-01 data]# ps -ef | grep sersync
    root      27546      1  0 01:02 ?        00:00:00 sersync -dro /usr/local/sersync/confxml.xml
    root      27724  27346  0 01:12 pts/1    00:00:00 grep --color=auto sersync
    [root@store-nfs-01 data]# kill -9 27546
    

NFS高可用

  1. Keepalived部署规划
    部署规划

  2. 安装keepalived软件

    [root@store-nfs-01 ~]# yum install -y keepalived
    
  3. 编写keepalived配置文件

    [root@store-nfs-01 ~]# cp /etc/keepalived/keepalived.conf{,.bak}
    [root@store-nfs-01 ~]# vim /etc/keepalived/keepalived.conf
    
    ! Configuration File for keepalived
    
    global_defs {
            router_id NFS-Master       --高可用集群主机身份标识
    }
    
    vrrp_instance NFS-Keepalived {
        state MASTER                  --标识身份(state不生效,依据priority区别主从)
        interface eno16777728         --VIP绑定的网卡
        virtual_router_id 51          --组ID,同组的ID相同
        priority 200                  --优先级,优先级高的为master
        advert_int 1                  --组播包发送的间隔时间(s)
        authentication {              --认证模式为密码认证
            auth_type PASS
            auth_pass hawava
        }
        virtual_ipaddress {          --VIP
            172.16.1.32/24
        }
    }
    
  4. 启动keepalived服务

    [root@store-nfs-01 ~]# systemctl start keepalived.service 
    [root@store-nfs-01 ~]# systemctl enable keepalived.service
    
  5. 测试keepalived功能
    查看NFS存储服务器和Rsync服务器VIP是否存在,可见身为Master主机的NFS存储服务器掌握VIP

    [root@store-nfs-01 ~]# ip a | grep 172.16.1.32
        inet 172.16.1.32/24 scope global secondary eno16777728
    
    [root@store-rsync-01 ~]# ip a | grep 172.16.1.32
    

    关闭NFS存储服务器的Keepalived服务,模拟测试NFS服务器出现故障

    [root@store-nfs-01 ~]# systemctl stop keepalived.service
    

    再次查看NFS服务器和Rsync服务器上的VIP,可见身为热备的Rsync服务器已经自动接管了VIP

    [root@store-nfs-01 ~]# systemctl stop keepalived.service
    
    [root@store-rsync-01 ~]# ip a | grep 172.16.1.32
        inet 172.16.1.32/24 scope global secondary eno16777728
    

    成功撒花~

MySQL数据库服务器部署

LNMP Web服务器部署

Nginx反向代理服务器部署

Memcached缓存服务器部署

Firewalld防火墙部署

Zabbix监控服务器部署

Ansible一键化部署

全网备份规划

Rsync备份服务器

开发检查所有服务器数据备份完整性脚本,并每天发邮件给管理员。

NFS存储服务器

开发通用脚本,并通过定时任务把NFS本地配置数据备份到Rsync备份服务器。

MySQL主数据库服务器

开发通用脚本,并通过定时任务把基础配置数据备份到Rsync备份服务器。

MySQL主热备数据库服务器

开发通用脚本,并通过定时任务把基础配置数据备份到Rsync备份服务器。

MySQL从数据库服务器

开发通用脚本,并通过定时任务把数据库全量不备份及增量数据定时备份到Rsync备份数据库;
开发通用脚本,并通过定时任务把基础配置数据备份到Rsync备份服务器。

LNMP Web服务器

开发通用脚本,通过定时任务把访问日志、网站程序备份到Rsync备份服务器;
开发通用脚本,通过定时任务把基础配置数据备份到Rsync备份服务器。

Nginx 反向代理服务器

配置通用备份脚本,通过定时任务将基础重要数据备份到Rsync备份服务器。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:45:32  更:2021-08-28 09:47:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:10:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码