1. 实现基于分布式的LAMP架构,并将NFS实时同步到备份服务
1.1 web服务器配置
服务器环境准备
需配置DNS解析,将域名解析成web服务器的地址
服务名称 | IP地址 |
---|---|
web01-server | 10.0.0.8 |
web02-server | 10.0.0.18 |
mysql-server | 10.0.0.28 |
nfs-server | 10.0.0.38 |
backup-server | 10.0.0.48 |
1.1.1 实现分布式LAMP架构,将web服务器数据目录挂载到nfs文件共享服务器上
web服务器配置
#web1配置
[root@web01 ~]#yum install -y httpd php php-mysqlnd php-json nfs-utils
[root@web01 ~]#systemctl enable --now httpd
[root@web01 ~]#wget https://cn.wordpress.org/latest-zh_CN.tar.gz
[root@web01 ~]#tar xf latest-zh_CN.tar.gz
[root@web01 ~]#ls
anaconda-ks.cfg latest-zh_CN.tar.gz wordpress
[root@web01 ~]#cp -r wordpress/* /var/www/html/
[root@web01 ~]#chown -R apache. /var/www/html/
#web2配置
[root@web02 ~]#yum install -y httpd php php-mysqlnd php-json nfs-utils
[root@web02 ~]#systemctl enable --now httpd
mysql服务器配置
#mysql服务器配置:创建数据库及授权账号
[root@mysql ~]#yum install -y mysql-server
[root@mysql ~]#systemctl enable --now mysqld
[root@mysql ~]#mysql
mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)
mysql> create user wordpress@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on wordpress.* to wordpress@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
NFS服务器配置
#nfs服务器配置
[root@nfs ~]#yum -y install nfs-utils
[root@nfs ~]#systemctl enable --now nfs-server
[root@nfs ~]#mkdir /data/web -p
[root@nfs ~]#useradd www -s /bin/bash
[root@nfs ~]#id www
uid=1000(www) gid=1000(www) groups=1000(www)
[root@nfs ~]#chown -R www.www /data/web/
[root@nfs ~]#vim /etc/exports #配置共享目录,设置读写权限,所用用户都压榨成id1000的www用户
/data/web *(rw,all_squash,anonuid=1000,anongid=1000)
[root@nfs ~]#exportfs -r #重读配置文件,并共享目录
[root@nfs ~]#exportfs -v #查看本机所有NFS共享
/data/web <world>(sync,wdelay,hide,no_subtree_check,anonuid=1000,anongid=1000,sec=sys,rw,secure,root_squash,all_squash)
#nfs客户端(web1或web2)查看远程主机的NFS共享
[root@web01 ~]#showmount -e 10.0.0.38
Export list for 10.0.0.38:
/data/web *
#将web1上的文件复制到web2服务器的目录中
[root@web01 ~]#rsync -a /var/www/html/* 10.0.0.18:/var/www/html/
#web服务器未使用nfs挂载前,如果该目录已有数据,需要先把数据同步到nfs服务器被挂载的目录中
[root@web01 ~]#rsync -a /var/www/html/wp-content/uploads/ 10.0.0.38:/data/web
#web服务器配置实现nfs永久挂载
[root@web01 ~]#vim /etc/fstab
10.0.0.38:/data/web /var/www/html/wp-content/uploads nfs defaults,_netdev 0 0
[root@web01 ~]#mount -a
[root@web01 ~]#df -h
.......
10.0.0.38:/data/web 18G 2.1G 16G 12% /var/www/html/wp-content/uploads
[root@web02 ~]#vim /etc/fstab
10.0.0.38:/data/web /var/www/html/wp-content/uploads nfs defaults,_netdev 0 0
[root@web02 ~]#mount -a
[root@web02 ~]#df -h
.......
10.0.0.38:/data/web 18G 2.1G 16G 12% /var/www/html/wp-content/uploads
1.1.2 使用sersync实现NFS服务器上的数据文件实时同步到备份服务器上
数据备份服务器配置(rsync服务器)
#rsync(备份)服务器配置
[root@backup ~]#yum -y install rsync-daemon
[root@backup ~]#vim /etc/rsyncd.conf
uid = www #提定以哪个用户来访问共享目录,将其指定为生成的文件所有者,默认为nobody
gid = www #指定以哪个用户组来访问共享目录,如果未指定,默认为nobody。在Ubuntu中为nogroup。
max connections = 0 #指定允许的最大连接数,0 表示不限制连接数
ignore errors #忽略同步过程中的错误
exclude = lost+found/ #指定要在同步过程中排除的目录或文件,在此例中,排除了lost+found目录
log file = /var/log/rsyncd.log #指定日志文件的路径
pid file = /var/run/rsyncd.pid #指定进程 ID 文件的路径
lock file = /var/run/rsyncd.lock #指定锁文件的路径
reverse lookup = no #禁用反向DNS查找
#hosts allow = 192.168.8.0/24 #指定允许访问 rsync 服务器的主机 IP 地址范围
[backup]
path = /data/web/ #定义一个模块(module),每个模块对应一个不同的共享目录
comment = backup #为此模块添加注释,用于描述此共享目录
read only = no #指定是否只读
auth users = rsyncuser #指定允许访问此模块的授权用户rsyncuser
secrets file = /etc/rsync.pas #指定包含授权用户密码的文件路径
#服务器端准备备份目录
[root@backup ~]#mkdir -pv /data/web
#服务器端生成账户密码验证文件
[root@backup ~]#echo "rsyncuser:123456" > /etc/rsync.pas
[root@backup ~]#chmod 600 /etc/rsync.pas
#服务器端启动rsync服务
[root@backu ~]#systemctl start rsyncd #CentOS 7 以上版本
NFS文件共享服务器配置(rsync客户端)
#客户端(nfs-server)配置密码文件
[root@nfs ~]#echo "123456" > /etc/rsync.pas
[root@nfs~]#chmod 600 /etc/rsync.pas #此为必要项,权限必须修改
#客户端查看rsync服务器信息
#查看远程rsync服务器的模块信息
[root@nfs ~]#rsync rsync://rsyncuser@10.0.0.48
backup backup
#交互式验证查看具体模块内的文件
[root@nfs ~]#rsync rsync://rsyncuser@10.0.0.48/backup
Password:
#非交互式查看共享目录
[root@nfs ~]#rsync --password-file=/etc/rsync.pas rsync://rsyncuser@10.0.0.48/backup
drwxr-xr-x 18 2023/09/25 20:08:32 .
drwxr-xr-x 16 2023/09/25 18:30:21 2023
#rsync客户端(nfs-server)配置
[root@nfs ~]#wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs ~]#tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs ~]#cp -a GNU-Linux-x86 /usr/local/sersync
#创建PATH变量文件并使其生效
[root@nfs ~]#echo 'PATH=/usr/local/sersync:$PATH' > /etc/profile.d/sersync.sh
[root@nfs ~]#source /etc/profile.d/sersync.sh
#sersync目录只有两个文件:一个是二进制程序文件,一个是xml格式的配置文件
[root@nfs ~]#ls /usr/local/sersync/
confxml.xml sersync2
#确认安装rsync客户端工具
[root@nfs ~]#rpm -q rsync &> /dev/null || dnf -y install rsync
#备份sersync配置文件
[root@nfs ~]#cp /usr/local/sersync/confxml.xml{,.bak}
#修改sersync配置文件
[root@nfs ~]#vim /usr/local/sersync/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"/> ##修改此行为true,文件属性变化后也会同步
<modify start="false"/>
</inotify>
<sersync>
<localpath watch="/data/web"> ##修改此行,需要同步的源目录或文件,建议同步目录
<remote ip="10.0.0.48" name="backup"/> ##修改此行,指定备份服务器地址和rsync daemon的模块名
<!--<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"/> #> #修改此行为true,指定备份服务器的rsync配置的用户和密码文件
<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>
#创建连接rsynd服务器的用户密码文件,并必须修改权限
[root@nfs ~]#echo 123456 > /etc/rsync.pas
[root@nfs ~]#chmod 600 /etc/rsync.pas
[root@nfs ~]#sersync2 -dro /usr/local/sersync/confxml.xml
#测试在NFS共享目录中修改文件,查看备份服务器是否同步
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...