云计算百科
云计算领域专业知识百科平台

实现基于分布式的LAMP架构+NFS实时同步到备份服务器

概述        

项目计划用WordPress搭建一个博客系统, 为了性能更好,两个服务器都对外提供WordPress博客系统服务, 数据放在MySQL服务器, 有些上传的图片发送到NFS服务器上,并且把NFS数据实时同步到一个备份服务器上。

服务名称IP地址
DNS 10.0.0.200
WEB1 10.0.0.201
WEB2 10.0.0.202
MySQL 10.0.0.203
NFS 10.0.0.204
BACKUp 10.0.0.205

200:DNS服务配置

执行脚本

bash install_dns.sh

#!/bin/bash # #******************************************************************** #Author:            wangxiaochun #QQ:                29308620 #Date:              2020-10-23 #FileName:          install_dns.sh #URL:               http://www.wangxiaochun.com #Description:       The test script #Copyright (C):     2020 All rights reserved #********************************************************************

DOMAIN=wang.org HOST=www HOST_IP=10.0.0.200 LOCALHOST=`hostname -I | awk '{print $1}'`

. /etc/os-release

color () {     RES_COL=60     MOVE_TO_COL="echo -en \\\\033[${RES_COL}G"     SETCOLOR_SUCCESS="echo -en \\\\033[1;32m"     SETCOLOR_FAILURE="echo -en \\\\033[1;31m"     SETCOLOR_WARNING="echo -en \\\\033[1;33m"     SETCOLOR_NORMAL="echo -en \\E[0m"     echo -n "$1" && $MOVE_TO_COL     echo -n "["     if [ $2 = "success" -o $2 = "0" ] ;then         ${SETCOLOR_SUCCESS}         echo -n $"  OK  "         elif [ $2 = "failure" -o $2 = "1"  ] ;then          ${SETCOLOR_FAILURE}         echo -n $"FAILED"     else         ${SETCOLOR_WARNING}         echo -n $"WARNING"     fi     ${SETCOLOR_NORMAL}     echo -n "]"     echo  }

install_dns () {     if [ $ID = 'centos' -o $ID = 'rocky' ];then         yum install -y  bind bind-utils     elif [ $ID = 'ubuntu' ];then         apt update         apt install -y bind9 bind9-utils bind9-host bind9-dnsutils     else         color "不支持此操作系统,退出!" 1         exit     fi      }

config_dns () {     if [ $ID = 'centos' -o $ID = 'rocky' ];then         sed -i -e '/listen-on/s/127.0.0.1/localhost/' -e '/allow-query/s/localhost/any/' -e 's/dnssec-enable yes/dnssec-enable no/' -e 's/dnssec-validation yes/dnssec-validation no/'  /etc/named.conf         cat >>     /etc/named.rfc1912.zones <<EOF zone "$DOMAIN" IN {     type master;     file  "$DOMAIN.zone"; }; EOF         cat > /var/named/$DOMAIN.zone <<EOF \\$TTL 1D @    IN SOA    master admin (                     1    ; serial                     1D    ; refresh                     1H    ; retry                     1W    ; expire                     3H )    ; minimum           NS     master master      A    ${LOCALHOST}          $HOST         A    $HOST_IP EOF         chmod 640 /var/named/$DOMAIN.zone         chgrp named /var/named/$DOMAIN.zone     elif [ $ID = 'ubuntu' ];then         sed -i 's/dnssec-validation auto/dnssec-validation no/' /etc/bind/named.conf.options         cat >>     /etc/bind/named.conf.default-zones <<EOF zone "$DOMAIN" IN {     type master;     file  "/etc/bind/$DOMAIN.zone"; }; EOF         cat > /etc/bind/$DOMAIN.zone <<EOF \\$TTL 1D @    IN SOA    master admin (                     1    ; serial                     1D    ; refresh                     1H    ; retry                     1W    ; expire                     3H )    ; minimum           NS     master master      A    ${LOCALHOST}          $HOST         A    $HOST_IP EOF         chgrp bind  /etc/bind/$DOMAIN.zone     else         color "不支持此操作系统,退出!" 1         exit     fi }

start_service () {     systemctl enable named     systemctl restart named     systemctl is-active named.service     if [ $? -eq 0 ] ;then          color "DNS 服务安装成功!" 0       else         color "DNS 服务安装失败!" 1     exit 1     fi    }

install_dns

config_dns

start_service  

脚本功能概述

  • 基础信息:

    • 定义了 DNS 域名 (DOMAIN=wang.org)、主机名 (HOST=www)、主机 IP 地址 (HOST_IP=10.0.0.200)。
    • 自动获取当前主机的 IP 地址并赋值给 LOCALHOST。
  • 操作系统检测:

    • 通过 /etc/os-release 文件检测操作系统类型,支持 CentOS/Rocky 和 Ubuntu。
  • 彩色输出:

    • 使用 ANSI 转义序列打印不同颜色的信息,提示任务是否成功(success)、失败(failure)、或警告(warning)。
  • DNS 安装:

    • 根据操作系统不同,分别使用 yum 或 apt 安装 BING 及相关工具。
  • DNS 配置:

    • 修改 named 配置文件,允许外部查询,并禁用 DNSSEC(DNS 安全扩展)。
    • 配置 DNS 区域文件,定义主域名(wang.org)及其解析记录(包括主机 www)。
  • 启动服务:

    • 将 named 服务设置为开机自启,重启服务并检查运行状态。
    • 根据服务状态输出结果。
  • 配置文件修改

    安装完成并验证

    host www.wang.org 127.0.0.1

    因为要返回201、202的地址,所以要修改配置文件

    vim /etc/bind/wang.org.zone

     不重启服务生效

    rndc reload

    验证测试

    203: MySQL服务

    1. 安装MySQL

    apt update && apt install mysql-server -y

    2. 配置文件修改 

    因为MySQL默认监听127.0.0.1

     所以需要修改配置文件才能远程连接

    vim /etc/mysql/mysql.conf.d/mysqld.cnf

    3. 重启MySQL服务

    systemctl restart mysql

     4. 创建用户和数据库

    #创建数据库
    mysql> create database wordpress;

    #创建登录的用户、密码和允许来源的IP地址
    mysql> create user wordpress@'10.0.0.%' identified by '123456';

    #用户授权(给用户wordpress@'10.0.0.%'进入wordpress数据库的所有权限)
    mysql> grant all on wordpress.* to wordpress@'10.0.0.%';

    201、202:WEB服务

    1. 安装web服务软件

    两个web服务器安装Apache和其依赖

    apt update && apt install apache2 php php-mysql -y

    2. 安装WordPress

    进入WordPress官网下载: 博客工具、发布平台和内容管理系统 – WordPress.org China 简体中文

    拷入安装包并解压:

    unzip wordpress-6.2-zh_CN.zip //后面是压缩包文件名

    把解压的WordPress目录放到网站所在的目录

    mv wordpress/* /var/www/html/

    查看(删掉index文件)

    输入web服务所在的域名就可以访问网站了 

     上图信息需要写入WordPress配置文件, 但是配置文件没有写权限,所以我们要打开目录的写权限

     查看目录权限

    //查看apachede是由哪个身份运行的
    ps aux

     所以把目录文件权限赋予 www-data

    chown www-data.www-data /var/www/html -R
    #-R: 递归

    查看属性,已经修改成功

    重新执行步骤,成功进入,安装完成后10.0.0.203数据库会生成数据库文件

    204: NFS服务

    NFS(Network File System,网络文件系统)是一种通过网络共享文件的协议,允许不同设备(如服务器和客户端)在网络中共享文件系统,使用户能够像访问本地文件系统一样访问远程文件系统。

    进入网站文章发表时上传的图片文件都存于uploads文件夹中,我们下面要做的是把图片文件放入到nfs服务器中 

    1. 安装NFS(服务端)

    apt install nfs-server -y

    2. 安装NFS(客户端)

    在201、202web服务器安装

    apt install nfs-common -y

    3. 新建共享文件夹(服务端)

    mkdir /data/www -p

    新建的目录没有默认给www-data写权限

    所以要把所有者,所属组改成www-data

    chown www-data.www-data /data/www/ #因为目录为空,所以不用加 -r 选项

     

     4. 新建配置文件(服务端)

    mkdir /etc/exports.d/
    vim /etc/exports.d/wordpress.exports

    /data/www 10.0.0.0/24(rw)

     用户不同还需要压榨成相同的用户

    让服务生效

    exportfs -v //查看是否生效
    exportfs -r //生效操作

    5. 文件挂载(客户端)

    首先把201服务器的文件拷入204服务端共享文件夹,因为一挂载,原来的文件就会丢失

     在201服务器下执行:

    rsync -av /var/www/html/ 10.0.0.204:/data/www/

    #这条命令使用 rsync 工具将本地 /var/www/html/ 目录下的内容同步到远程主机 10.0.0.204 的 /data/www/ 目录
    #-a (archive):开启归档模式,递归同步目录,并保留文件的权限、时间戳、符号链接等属性。
    #-v (verbose):详细模式,显示同步过程中的详细信息

    挂载之前可以用此命令确认是否可以访问

    showmount -e 10.0.0.204

     

    可以把文件移走,也可以直接挂载

    vim /etc/fstab

     查看挂载

    这时候201就会出现204服务端的共享文件 

     在202同样的道理

    vim /etc/fstab

    这时候文件数据也挂过来了

    205: rsync服务

    rsync 服务是一个快速且灵活的工具和协议,用于高效同步和传输文件。它在本地和远程系统之间传输文件时,只复制变化部分,从而节省带宽和时间。

    rsync是在204上安装,因为204是源,205是目标,205配rsync 服务

    1. 新建配置文件

    205:

    [root@ubuntu2204 ~]#cat > /etc/rsyncd.conf

    uid = root
    gid = root
    max connections = 0
    ignore errors
    exclude = lost+found/
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsyncd.lock
    reverse lookup = no

    [backup]
    path = /data/backup/
    comment = backup dir
    read only = no
    auth users = rsyncuser
    secrets file = /etc/rsync.pas

    还要新建一个放用户名和密码的文件 /etc/rsync.pas 

    #服务器端准备目录
    [root@ubuntu2204 ~]#mkdir -pv /data/backup

    #服务器端生成验证文件(用户名和密码+赋权限)
    [root@ubuntu2204 ~]#echo "rsyncuser:123456" > /etc/rsync.pas
    [root@ubuntu2204 ~]#chmod 600 /etc/rsync.pas

    重新启动服务

    2. 配置同步信息

    204:

    204数据服务器上下载sersync,并拷贝到相应的目录解压

    创建个软链接起名叫sersync 

     

    现在这个二进制文件存在程序环境路径的问题,所以把它生成到软链接里去(local/bin也是PATH变量里的文件夹)

    ln -s /usr/local/sersync/sersync2 /usr/local/bin/

    删掉自带的confxml.xml配置文件,导入下面的文件

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <head version="2.5">
    <host hostip="localhost" port="8008"></host>
    <debug start="false"/>
    <fileSystem xfs="false"/>
    <filter start="false">
    <exclude expression="(.*)\\.svn"></exclude>
    <exclude expression="(.*)\\.gz"></exclude>
    <exclude expression="^info/*"></exclude>
    <exclude expression="^static/*"></exclude>
    </filter>
    <inotify>
    <delete start="true"/>
    <createFolder start="true"/>
    <createFile start="false"/>
    <closeWrite start="true"/>
    <moveFrom start="true"/>
    <moveTo start="true"/>
    <attrib start="true"/>
    <modify start="false"/>
    </inotify>

    <sersync>
    <localpath watch="/data/www">
    <remote ip="10.0.0.205" name="backup"/>
    <!–<remote ip="192.168.8.39" name="tongbu"/>–>
    <!–<remote ip="192.168.8.40" name="tongbu"/>–>
    </localpath>
    <rsync>
    <commonParams params="-artuz"/>
    <auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/>
    <userDefinedPort start="false" port="874"/><!– port=874 –>
    <timeout start="false" time="100"/><!– timeout=100 –>
    <ssh start="false"/>
    </rsync>
    <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!–default every 60mins execute once–>
    <crontab start="false" schedule="600"><!–600mins–>
    <crontabfilter start="false">
    <exclude expression="*.php"></exclude>
    <exclude expression="info/*"></exclude>
    </crontabfilter>
    </crontab>
    <plugin start="false" name="command"/>
    </sersync>

    <plugin name="command">
    <param prefix="/bin/sh" suffix="" ignoreError="true"/><!–prefix /opt/tongbu/mmm.sh suffix–>
    <filter start="false">
    <include expression="(.*)\\.php"/>
    <include expression="(.*)\\.sh"/>
    </filter>
    </plugin>

    <plugin name="socket">
    <localpath watch="/opt/tongbu">
    <deshost ip="192.168.138.20" port="8009"/>
    </localpath>
    </plugin>
    <plugin name="refreshCDN">
    <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
    <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
    <sendurl base="http://pic.xoyo.com/cms"/>
    <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
    </localpath>
    </plugin>
    </head>

    创建账户密码就可以连接对方了 

    echo "rsyncuser:123456" > /etc/rsync.pas
    chmod 600 /etc/rsync.pas

     3. 同步验证

    现在 data/backup文件夹为空

    204数据服务器以后台方式执行命令

    nohup sersync2 -dro /usr/local/sersync/confxml.xml &> /dev/null #后台执行,有标准输出扔到垃圾箱里

    这是看执行过程的方式

    现在查看205服务器文件夹,已经同步过来了

    在web客户端发布新文章带图片的也可以实时同步过来了

     

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 实现基于分布式的LAMP架构+NFS实时同步到备份服务器
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!