简易注册中心监控NAS断电断网

本文涉及的产品
文件存储 NAS,50GB 3个月
简介: 日常使用NAS过程中,偶尔会出现家里断电或者断网的情况,NAS自带网络断开的通知功能,但需要是恢复网络链接后才会通知,而此时都恢复了,再通知也就没那么重要,还有断电情况下也是需要回家才能知道,断电保护可以使用UPS,当停电后UPS通过usb数据线会给NAS发送通知

日常使用NAS过程中,偶尔会出现家里断电或者断网的情况,NAS自带网络断开的通知功能,但需要是恢复网络链接后才会通知,而此时都恢复了,再通知也就没那么重要,还有断电情况下也是需要回家才能知道,断电保护可以使用UPS,当停电后UPS通过usb数据线会给NAS发送通知,NAS收到通知后在设定时间内关机并发送ups进入电池供电模式的通知,但这个方式需要购买ups设备,成本在300元左右。

注册中心原理

联想到注册中心等其他集群模式下的心跳连接,心跳超时则进行剔除的方式,自己便用python写了一个简单的web服务当作注册中心,再写一个定时任务每隔5秒扫描一遍最近注册时间数据,对比下来如果超时60秒以上,则认为NAS已经失去链接,立刻发送邮件/钉钉通知,当NAS重新上线连接后,定时任务扫描到注册信息会再发送已经连接的通知信息。

NAS端原理

上文已经通过python提供了一个web服务,此时只需要在NAS端任务计划中创建一个每分钟的定时任务即可,定时请求心跳接口,服务端记录请求时间。

或者在docker里启动一个定时任务,crontab命令

service cron start

*/1 * * * * curl http://ip:2580/register                            

服务端代码

启动python的命令,需要在后台运行

ps -ef|grep python

nohup python3 nas_health.py  &

nohup python3 nas_register.py  &

nas_register-类似于注册中心的概念,提供一个get接口供NAS访问

# -*- encoding: utf-8 -*-

import os

import datetime

import tornado.web



class MainHandler(tornado.web.RequestHandler):

   def get(self):

       """get请求"""

       now = datetime.datetime.now()

       out = open("nas_datetime-" + str(now.year) + '-' + str(now.month) + '-' + str(now.day), 'a')

       out.write(str(now) + '\n')

       out.close()

       self.write("")



application = tornado.web.Application([(r"/register", MainHandler)],

                                     static_path=os.path.join(os.path.dirname(__file__), "static"), )



# 读取文件中的数据

def read_txt_file(file_name):

   newFile = open(file_name)

   data = newFile.read()

   newFile.close()

   return data



if __name__ == "__main__":

   application.listen(2580)

   tornado.ioloop.IOLoop.instance().start()


nas_health-定时扫描日志文件,对比注册时间

# -*- encoding: utf-8 -*-

import datetime

import time

import smtplib

from email.mime.text import MIMEText

from email.header import Header



# 读取文件中的数据

def read_txt_file(file_name):

   newFile = open(file_name)

   data = newFile.read()

   if data == '':

       return ''

   now = ''

   for line in data.split('\n'):

       if line == '':

           break

       now = line

   newFile.close()

   return now



def loop_monitor():

   email_state = True

   while True:

       try:

           file_now = datetime.datetime.now()

           now_str = read_txt_file(

               "nas_datetime-" + str(file_now.year) + '-' + str(file_now.month) + '-' + str(file_now.day))

           if now_str == '':

               continue

           now = datetime.datetime.strptime(str(now_str), "%Y-%m-%d %H:%M:%S.%f")

           now2 = datetime.datetime.now()

           print((now2 - now).seconds)

           if (now2 - now).seconds >= 60 and email_state:

               email("心跳已经超时", "xxx@xxx.com")

               email_state = False

           if (now2 - now).seconds < 60 and email_state == False:

               email_state = True

               email("心跳已经恢复", "xxx@xxx.com")

       except Exception as e:

           print("时间错误", e)

       time.sleep(5)  # 暂停5秒



def email(text, toemail):

   sender = "xxx@xxx.com"  # 发送方的邮箱

   password = "xxxx."  # 邮箱的授权码

   receiver = toemail  # 接收方的邮箱

   data_time = time.strftime("%Y-%m-%d %H:%M:%S")

   subject = data_time + "Nas服务器心跳报警"  # title邮件标题

   words = text  # text邮件内容

   msg = MIMEText(words, 'plain', 'utf-8')  # 中文需参数‘utf-8',单字节字符不需要

   msg['Subject'] = Header(subject, 'utf-8')  # 邮件标题

   msg['from'] = sender  # 发信人地址

   msg['to'] = receiver  # 收信人地址

   smtp = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)

   smtp.connect('smtp.exmail.qq.com')

   smtp.login(sender, password)

   smtp.sendmail(sender, receiver, msg.as_string())

   smtp.quit()



if __name__ == "__main__":

   loop_monitor()


相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
目录
相关文章
|
运维 测试技术
6月27日阿里云故障说明
6月27日下午,我们在运维上的一个操作失误,导致一些客户访问阿里云官网控制台和使用部分产品功能出现问题。故障于北京时间2018年6月27日16:21左右开始,16:50分开始陆续恢复。对于这次故障,没有借口,我们不能也不该出现这样的失误!我们将认真复盘改进自动化运维技术和发布验证流程,敬畏每一行代码,敬畏每一份托付。
10778 2
|
1月前
|
云安全 弹性计算 安全
云上攻防:实例元数据、控制台接管
随着企业上云趋势增强,云安全成为焦点。云服务提供高效的数据存储和计算能力,但也带来数据保护和访问控制的新挑战。攻击者常利用云服务漏洞,威胁企业数据安全。本文探讨云上攻防关键领域,如元数据泄露、AKSK安全、控制台接管等,提出防御措施,帮助企业应对云安全风险。
云上攻防:实例元数据、控制台接管
|
20天前
|
安全 文件存储 数据安全/隐私保护
贝锐花生壳全新客户端上线:远程威联通NAS,无需公网IP、简单3步!
为了实现随时随地访问和备份珍贵数据,贝锐花生壳推出专为威联通NAS设计的内网穿透方案。用户只需通过威联通NAS应用中心一键安装,即可享受无需公网IP的远程访问便利。此外,贝锐花生壳还提供自动部署HTTPS证书和访问控制功能,确保数据传输的安全性。群晖NAS用户同样可以通过套件中心一键安装使用。
39 0
贝锐花生壳全新客户端上线:远程威联通NAS,无需公网IP、简单3步!
|
4月前
|
存储 数据挖掘 Linux
服务器数据恢复—机房搬迁导致服务器无法识别raid的数据恢复案例
某单位机房搬迁,将所有服务器和存储搬迁到新机房并重新连接线路,启动所有机器发现其中有一台服务器无法识别RAID,提示未做初始化操作。 发生故障的这台服务器安装LINUX操作系统,配置了NFS+FTP作为单位内部的文件服务器使用。服务器为ProLiant DL380系列服务器,通过hp smart array控制器挂载了一组由14块SCSI硬盘组成的RAID5磁盘阵列。该raid5磁盘阵列采用双循环的校验方式。 北亚企安数据恢复工程师到达现场后对故障服务器进行了初检,经过检测发现raid信息丢失。
服务器数据恢复—机房搬迁导致服务器无法识别raid的数据恢复案例
|
6月前
|
存储 缓存 安全
【VSAN数据恢复】VSAN集群节点数据迁移失败的数据恢复案例
VSAN存储是一个对象存储,以文件系统呈现给在vSphere主机上。这个对象存储服务会从VSAN集群中的每台主机上加载卷,将卷展现为单一的、在所有节点上都可见的分布式共享数据存储。 对于虚拟机来说,只有一个数据存储,这个分布式数据存储来自VSAN集群中每一台vSphere主机上的存储空间,通过磁盘组进行配置,在单独的存储中存放所有的虚拟机文件。这种数据存储方式比较安全,当闪存盘或者容量盘出现故障的时候,数据会向其他节点转移,在转移过程中有可能出现故障。
|
5月前
|
Kubernetes 网络协议 Docker
k8s 开船记-故障公告:自建 k8s 集群在阿里云上大翻船
k8s 开船记-故障公告:自建 k8s 集群在阿里云上大翻船
|
存储 算法 数据挖掘
服务器数据恢复—raid6硬盘故障导致nas存储无法访问的数据恢复案例
一台nas存储中有一组由十几块硬盘组建的raid6磁盘阵列。 nas存储中的raid6阵列成员盘出现故障离线,磁盘阵列崩溃,nas存储无法正常访问。
服务器数据恢复—raid6硬盘故障导致nas存储无法访问的数据恢复案例
|
存储 网络协议 安全
在外远程NAS群晖Drive - 群晖Drive挂载电脑磁盘同步备份【无需公网IP】
在外远程NAS群晖Drive - 群晖Drive挂载电脑磁盘同步备份【无需公网IP】
|
数据安全/隐私保护
服务器迁移中心
服务器迁移中心
106 0
|
弹性计算 运维 网络安全
一次阿里云ECS主机上挂载文件存储NAS的排障过程记录
一次阿里云ECS主机上挂载文件存储NAS的排障过程记录
522 1
一次阿里云ECS主机上挂载文件存储NAS的排障过程记录