概述
项目计划用WordPress搭建一个博客系统, 为了性能更好,两个服务器都对外提供WordPress博客系统服务, 数据放在MySQL服务器, 有些上传的图片发送到NFS服务器上,并且把NFS数据实时同步到一个备份服务器上。
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客户端发布新文章带图片的也可以实时同步过来了
评论前必须登录!
注册