背景
早上上班,客户群里反馈系统登录不了,根据反馈的系统页面报错信息,可以判断出是服务器磁盘不足导致。由于系统有mysql数据库、上传图片附件、生成pdf文件等占用磁盘空间大的问题,最后通过定位,证实了为图片目录过大,将一点几个T的磁盘分区占满了,为了能保证系统能正常启动,临时将历史图片目录压缩成tar,移到根目录下面。
新机器职责划分
由于不是长久之计,所以与客户反应了情况,申请了几台私有云主机,并将机器职责分别划分为:
系统部署、定时任务、NGINX
数据库
微信公众号
文件服务、服务灾备、数据备份
docker环境配置
由于服务都是docker部署的,所以先部署docker环境,参考我的另一篇文章部署
备份docker镜像
从源服务器备份镜像
命令说明: -o代表需要将镜像备份到的目录 test:2024.09.06.1代表需要备份的镜像名称(这里记住用镜像名称,如果使用惊醒id备份的话,后期reload后镜像出不来)
服务镜像
docker save -o /container_bak/test.tar test:2024.09.06.1
mysql镜像
docker save -o /container_bak/mysql.tar mysql:2024.09.06.1
redis镜像
docker save -o /container_bak/redis.tar redis:2024.09.06.1
载入docker镜像
在目标服务器上,通过sftp链接源服务器后,将备份的镜像文件下载过来,进入tar所在目录,载入
服务镜像
docker load -i test.tar
mysql镜像
docker load -i mysql.tar
redis镜像
docker load -i redis.tar
docker save -o /container_bak/redis.tar de25a81a5a0b
docker load -i redis.tar
运行容器
服务镜像
docker run -d -v test_data:/test -v /data/test/upload:/uploadFile --net=host --restart=on-failure:1 -e “SPRING_PROFILES_ACTIVE=prod” --name test test:2024.09.06.1
mysql镜像
docker run -d -v /data/mysqldata:/var/lib/mysql -v /runa/mysqlconf:/etc/mysql --restart=always -e MYSQL_ROOT_PASSWORD=“qR#r&FC0IHg1O%8@TAqa” -e TZ=Asia/Shanghai --network host --name mysql mysql:5.7.28
redis镜像
docker run -d -v /test/redis/data:/data -v /test/redis/redis.conf:/usr/local/etc/redis/redis.conf -v /runa/redis/redis.log:/usr/local/etc/redis/redis.log --restart=always --network host --name redis redis:5.0.6 redis-server /usr/local/etc/redis/redis.conf
通过sftp下载备份的文件
登录sftp
sftp root@192.168.x.x
拷贝文件
将源主机/data下所有目录及文件拷贝到当前主机的/test目录下
执行命令
get -r /data /test/
参数说明
-r 代表需要拷贝目录及其下所有文件
/data 源服务器目录
/test 目标机器目录
期间遇到的问题
如何挂在新磁盘
查看磁盘状态
lsblk
分区
fdisk -l
写入配置
vi /etc/fstab
重启机器
reboot
sftp不通
A主机连不上B主机22端口,请在B主机上面查看
vi /etc/hosts.allow
systemctl restart sshd
防火墙
查看防护墙状态
firewall-cmd --state
加白名单
firewall-cmd --permanent --zone=trusted --add-source=172.x.x.x
放开端口
firewall-cmd --permanent --zone=public --add-port=3306/tcp
重新加载
firewall-cmd --reload