wordpress多节点部署+rsync备份图片
基于LAMP架构搭建LB+web+mysql+nas架构,实现从web站点上传的图片自动同步(wordpress)
环境:
10.0.0.128 apache+wordpress服务,数据库主库指向10.0.0.132,基于docker来安装,映射出来,docker安装wordpress
10.0.0.132 MySQL(主),备份服务器
10.0.0.129 MySQL(从),NAS服务器,NAS服务器指向
1.docker搭建wordpress+MySQL
docker run的时候,需要-v映射到nfs的共享目录,单个docker的映射目录()
还是直接docker run得了
docker pull wordpress
docker run --name wordpress -p 8002:80 -v /apps/wordpress:/var/www/html/ -d wordpress
#docker run --name wordpress -p 8002:80 -v /apps/uploads:/var/www/html/wp-content/uploads -d wordpress
docker stop `docker ps | grep wordpress | awk '{print $1}'`
docker rm -f `docker ps -a | grep wordpress | awk '{print $1}'`
##查看工作目录,查看从docker仓库下载下来的docker image镜像
##docker inspect imageID/image name,就是查看dockerfile
[root@master ~]#docker inspect wordpress | grep -i working
"WorkingDir": "/var/www/html",
[root@master ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
974257bc8c36 wordpress "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:8002->80/tcp, :::8002->80/tcp wordpress
ss -ntl | grep 8002
LISTEN 0 128 *:8002 *:*
LISTEN 0 128 [::]:8002 [::]:*
10.0.0.128:8002
##MySQL操作,需要提前建库和用户
##所有的建站信息全部存放在表里
[(none)]>create database wordpress;
Query OK, 1 row affected (0.01 sec)
[(none)]>grant all on wordpress.* to wp@'%';
Query OK, 0 rows affected (0.01 sec)
[(none)]>flush privileges;
Query OK, 0 rows affected (0.00 sec)
新建一篇文章发布
2.rsync直接同步uploads目录到备份机[wp]
docker搭建映射出来的路径,不能再进行一次挂载,所以说API服务器有两个,IP+相同的端口号,uploads的rsync直接指向到10.0.0.132的复制目录,/data/bak
[root@master uploads]#exportfs -r
exportfs: /apps/wordpress/wp-content/uploads does not support NFS export
如果是多个web前端的话,程序可以控制写到LB的IP,负载均衡两个WEB,两个WEB的图片备份都指向备份机器,且两台WEB之间同步图片
##安装rsync工具和inotify-tools工具
rpm -q rsync &> /dev/null || yum -y install rsync
rpm -q inotify-tools &> /dev/null || yum -y install inotify-tools
#1.站点图片目录,有记录日期,直接同步这个文件夹,发布新文章,新图片上面都有
/apps/wordpress/wp-content/uploads
[root@master 10]#ls
0923test-01-1024x640.jpg 0923test-01-300x188.jpg 0923test-01.jpg image-150x150.png image-1568x842.png image-768x412.png
0923test-01-150x150.jpg 0923test-01-768x480.jpg image-1024x550.png image-1536x825.png image-300x161.png image.png
#2.直接使用sersync或者是脚本同步uploads到备份服务器10.0.0.132
scp sersync2.5.4_64bit_binary_stable_final.tar.gz 10.0.0.128:/root
tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz /apps/sersync
#3.编辑xml文件
vim confxml.xml
<sersync>
<localpath watch="/apps/wordpress/wp-content/uploads"> <!--/apps/wordpress/wp-content/uploads -->
<remote ip="10.0.0.132" name="wp"/> <!--修改远端rsync备份服务器和备份目录 -->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/> <!--鉴权用户名,调用本地的password文件 -->
#4.编辑备份端
rpm -q rsync &> /dev/null || yum -y install rsync
vim /etc/rsyncd.conf
[wp]
path = /data/wordpress/
##记得要写path/
read only = no
##不只读,可写
auth users = rsyncuser
##默认用户
secrets file = /etc/rsync.pas
##默认密码
##重启服务
systemctl restart rsyncd
#5.运行脚本,监控/data/wordpress/2022/10/的变化
#同步前先进行scp同步一遍先
scp /apps/wordpress/wp-content/uploads/* 10.0.0.132:/data/wordpress/
#执行脚本
master:[root@master GNU-Linux-x86]#./sersync2 -dro confxml.xml
nohup ./sersync2 -dro confxml.xml
ps aux | grep ser
root 13227 0.0 0.0 125108 712 ? Ssl 23:02 0:00 ./sersync2 -dro confxml.xml
##监控变化
backup:watch -n0.5 ll /data/wordpress/2022/10/
在wordpress站点发布图片,图片名字为10044444test.jpg

3.rsync使用脚本(在没有包的情况下,常用)
顺便安装了rsync和inotify,可以作为定时任务,或者nohup也行
缺点:调用多次rsync,有点小毛病,调用多次create,attribu等指令
vim inotify_rsync.sh
nohup ./inotify_rsync.sh
##监控NAS目录的变化
SRC='/apps/wordpress/wp-content/uploads/'
##备份服务器为132的bak,调用rsync的协议
DEST='rsyncuser@10.0.0.132::wp'
rpm -q rsync &> /dev/null || yum -y install rsync
rpm -q inotify-tools &> /dev/null || yum -y install inotify-tools
#修改参数,监控文件数量
echo 50000000 > /proc/sys/fs/inotify/max_user_watches
echo 327679 > /proc/sys/fs/inotify/max_queued_events
echo "starting monitor file change..."
sleep 2
#持续前台监控特定事件,定义时间格式、日期格式、动作(新建、删除、移动---重命名、写入、权限变化) + nas目录,输入到while内
inotifywait -mrq --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
##表示新建=新建,删除=删除
rsync -az --delete --password-file=/etc/rsync.pas $SRC $DEST
echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
#日志在129上面,在129上执行的脚本
done
Every 0.5s: tree /data/wordpress/2022/10/
├── test11-1024x640.jpg
├── test11-150x150.jpg
├── test11-300x188.jpg
├── test11-768x480.jpg
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
4.负载均衡架构
nginx:前端负载均衡
web01,web02:docker部署
备份服务器:web01和web02互相使用rsync脚本同步,同步前先完成一遍复制确保一致
web01和web02再备份一次到备份服务器
3方---4方---多方同步解决
目前只能实现docker单节点部署wordpress,通过脚本自动备份到远端132的机器
1.环境:可以在slave1上面搭建web02站点
搭建docker环境,搭建私有仓库
1.关闭防火墙,SELINUX
sed 's/enable/disabled/g' /etc/config/selinux
2.卸载旧版本的docker包
rpm -qa | grep docker
yum -y remove docker*,删除掉所有的依赖
3.docker安装存储库
yum install -y yum-utils device-mapper-persistent-data lvm2
4.添加阿里云的yum源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
修改内部的gpgcheck
:%s/gpgcheck=1/gpgcheck=0/g
sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/docker-ce.repo
5.安装docker-ce
yum install docker-ce docker-ce-cli containerd.io -y
scp -r /etc/docker/* 10.0.0.129:/etc/docker/
6.修改docker的源daemon.json
systemctl daemon-reload;systemctl restart docker
7.测试安装服务
docker images
docker ps -a
yum -y install httpd php php-mysqlnd php-json
chown apache.apache /var/www/html/*
ll /var/www/html/*
2.拷贝所有web01站点的信息过去,docker需要映射出来
1.配置docker基础环境
--拉取最新镜像
docker pull wordpress
--拉取仓库镜像,运行
docker pull registry
docker run -d -p 5000:5000 --restart=always --name registry -v /apps/myregistry:/var/lib/registry registry
--打标签
docker image tag wordpress 10.0.0.128:5000/wordpress:v1.0
[root@master registry]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.128:5000/wordpress v1.0 c3c92cc3dcb1 9 months ago 616MB
--配置insucure的镜像仓库地址
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://plqjafsr.mirror.aliyuncs.com"
],
"exec-opts": [
"native.cgroupdriver=systemd"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"insecure-registries": ["10.0.0.128:5000"] ---配置本地仓库
}
--重新加载
systemctl daemon-reload
systemctl restart docker
--推送,查看
docker push 10.0.0.128:5000/wordpress:v1.0
curl http://10.0.0.128:5000/v2/_catalog
{"repositories":["wordpress"]}
--slave1尝试
[root@slave1 ~]#curl http://10.0.0.128:5000/v2/_catalog
{"repositories":["wordpress"]}
2.slave1拉取镜像,运行
--slave1
docker pull 10.0.0.128:5000/wordpress:v1.0
docker run --name wordpress -p 8002:80 --restart=always -v /apps/wordpress:/var/www/html/ -d 10.0.0.128:5000/wordpress:v1.0
docker run --name wordpress -p 8002:80 --restart=always -v /apps/wordpress:/var/www/html/ -d wordpress
docker start `docker ps -a | grep wordpress | awk '{print $1}'`
--拷贝web01的文件到/apps/wordpress
scp -r -p /apps/wordpress/* 10.0.0.129:/apps/wordpress/
rsync -a /apps/wordpress/* 10.0.0.129:/apps/wordpress/
3.试运行
docker stop `docker ps -a | grep wordpress | awk '{print $1}'`
docker start `docker ps -a | grep wordpress | awk '{print $1}'`
docker rm -f `docker ps -a | grep wordpress | awk '{print $1}'`
3.配置WEB01的DNS解析,添加A记录
4.前端添加一个nginx或者是LVS,实现前端负载均衡
本文作者:Catyer
本文链接:https://www.cnblogs.com/catyer/p/16753593.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步