centos使用阿里云ossfs工具挂载远程bucket目录

网友投稿 316 2022-10-06

centos使用阿里云ossfs工具挂载远程bucket目录

场景及用途:ecs服务器需要存储服务日志180天以上,通过ossfs工具挂载oss bucket

以下是实现脚本,但是实际使用种发现当bucket内存储得小文件很多时,ls 命令查看非常慢,听阿里得说是因为每秒只能查看160个文件左右得原因才慢得,当然也有其他方法可以规避这种问题,因为是属于冷存储了,平时也不看价格方面也较为便宜,如果要求及时查看、响应时间等可以使用NAS产品,测试比ossfs快很多,稍微贵一些

#!/bin/bash

#

# A xurui@weimiao.cn

# D 20220408

# v 3

### 安装ossfs部分 ###

OssfsInstall (){

# ossfs需要依赖fuse 2.8.4以上版本

yum -y install >/dev/null 2>&1

# XXX wm-logs子账户AK

echo "wm-logs:xxxxxxxxxxBRUP7h3DWf:xxxxxxxxxxxuq7Ehi8v4EEt" > /etc/passwd-ossfs

chmod 640 /etc/passwd-ossfs

ln -sf /usr/local/bin/ossfs /bin/ossfs

read -p "提供ossfs挂载点[dake || xiaobaiying || xinxiliu || zhongtai || dushuhui] : " Line

if [[ $Line = 'dake' || $Line = 'xiaobaiying' || $Line = 'xinxiliu' || $Line = 'zhongtai' || $Line = 'dushuhui' ]];then

mkdir -p /$Line/{nginx,php,go,java}

# 挂载时报错ossfs: bucket 'wm-logs' does not exist,说明oss控制台bucket下没有对应的目录

ossfs wm-logs:/$Line/nginx/ /$Line/nginx/ -ourl=wm-logs:/$Line/java/  /$Line/java/  -ourl=wm-logs:/$Line/php/   /$Line/php/   -ourl=wm-logs:/$Line/go/    /$Line/go/    -ourl="ossfs installed ...done"

# 开机启动

echo -e "

ossfs wm-logs:/$Line/nginx/ /$Line/nginx/ -ourl=wm-logs:/$Line/java/  /$Line/java/  -ourl=wm-logs:/$Line/php/   /$Line/php/   -ourl=wm-logs:/$Line/go/    /$Line/go/    -ourl=>> /etc/rc.local

echo "开机启动配置: /etc/rc.local ...done"

else

echo "从指定的参数中挂载失败"

exit 30

fi

}

### 提示ossfs部分 ###

OssfsCheckStatus (){

echo -e "\033[33m ossfs not installed, please execute 'sh $0 install'\033[0m"

exit 20

}

### 运行脚本部分 ###

ScriptRunUsage (){

echo -e "\033[31m 没有正确匹配参数 \033[0m"

echo -e "\033[33mUsage : \n sh $0 \$1

dake        [大课]

xiaobaiying [小白营]

xinxiliu    [信息流]

zhongtai    [中台]

dushuhui    [读书会]

install     [安装ossfs,重复执行可挂载多业务线目录]

removedir   [卸载挂载目录]

upgrade     [更新脚本]

\033[0m"

exit 10

}

### 全局传参 ###

A=$1

B=$2

Nian=$(date +%Y)

Yue=$(date +%m)

Ri=$(date +%d)

NginxLogs=$(ls -l /'{print $NF}'|grep -E '[0-9]')

AppliLogs=$(ls -l /'{print $NF}'|grep -E '[0-9]')

###日志执行逻辑 ####

NginxLogic (){

# NGINX

mkdir -p /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)

cp $NginxLogs /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)

cd /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)

# 只对日志格式为: ****.access.log-20211201 进行处理

rename .log _$(hostname -i)_"$Yue""$Ri"_"$B".log *.log-*

mv /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)/* /$A/$B/$Nian/$Yue/

rm -fr /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)

}

AppliLogic (){

# PHP GO JAVA

mkdir -p /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)

cp $AppliLogs /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)

cd /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)

# 只对日志格式为: ****.access.log-[0-9] 进行处理

# 只对日志格式为: ****.access.[0-9].log 进行处理

rename .log _$(hostname -i)_"$Yue""$Ri"_"$B".log *.log*

mv /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)/* /$A/$B/$Nian/$Yue/

rm -fr /$A/$B/$Nian/$Yue/Temp_"$B"_"$Yue"_$(hostname -i)

}

### 自动更新脚本 ###

UpgradeScript (){

mkdir -p /script/

wget -q -N -- ---O /script/.wm-logs-upgrade.sh

mv /script/.wm-logs-upgrade.sh /script/wm-logs.sh

}

### 移除挂载目录 ###

RemoveDiskDir (){

# fusermount -z umount -u 卸载

echo -e "\033[33m输入要卸载的目录名:\n`df -h|grep -w "ossfs"|awk '{print " "$NF}'`\n参考: 移除所有 /dake 目录 | /xiaobaiying 目录\033[0m"

read -p "输入唯一[严格要求准确]关键字: "  "DirName"

df -h|grep -w "ossfs"|grep -w "$DirName"|awk '{print "fusermount -zu "$NF}'|sh

sed -i "/\\$DirName/d" /etc/rc.local

}

### 脚本逻辑主体 ###

if [ "$1" = "install" ];then

OssfsInstall;

elif [ "$1" = "removedir" ];then

RemoveDiskDir;

elif [ "$1" = "upgrade" ];then

UpgradeScript;

echo "`ls -l /script/wm-logs.sh|awk '{print $6,$7,$8,$NF}'` update done"

else

if [[ $1 = 'dake' || $1 = 'xiaobaiying' || $1 = 'xinxiliu' || $1 = 'zhongtai' || $1 = 'dushuhui' ]];then

ossfs=$(rpm -qa|grep ossfs-|wc -l)

UpgradeScript;

if [ $ossfs = 1 ];then

if [ "$2" = "nginx" ];then

NginxLogic;

elif [ "$2" = "php" ];then

AppliLogic;

elif [ "$2" = "go" ];then

AppliLogic

elif [ "$2" = "java" ];then

AppliLogic;

else

echo -e "\033[31m 没有正确匹配参数 sh $0 $1 \$2 = nginx|php|go|java \033[0m"

exit 40

fi

else

OssfsCheckStatus;

fi

else

ScriptRunUsage;

fi

fi

以下是脚本外内容

脚本定时运行时间及参数含义

12 4  2,3,8,13,18,23,28 * * sh /script/wm-logs.sh changqing nginx

1、changqing 是业务线名称,

2、nginx 是这个业务线下得前端nginx ,当然也可以实php、go、java 等,

3、$1或者$2传对应得参数会在本地和bucket内创建对应得目录并挂载,需要在脚本内提前定义常量

4、脚本不负责切割,只负责对已经切割得日志进行上传,不切割得不处理。

关于自动更新 UpgradeScript;

在下载服务器有一个主脚本,和其他服务器上得脚本内容都是一致得,因为服务器数量很多不能每个机器都改一次。所以当修改下载服务器得脚本时,其他应用服务器会将新脚本更新到本地,下次在执行本地脚本时候就是新脚本。

可以手动执行更新,不需要更新功能可以注释。

脚本都是经过实际场景打磨得,没坑

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实现屏幕截图工具的代码分享
下一篇:AliAGC 自动增益控制算法:解决复杂场景下的音量问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~