简易注册中心监控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安全、控制台接管等,提出防御措施,帮助企业应对云安全风险。
云上攻防:实例元数据、控制台接管
|
4月前
|
存储 数据挖掘 Linux
服务器数据恢复—机房搬迁导致服务器无法识别raid的数据恢复案例
某单位机房搬迁,将所有服务器和存储搬迁到新机房并重新连接线路,启动所有机器发现其中有一台服务器无法识别RAID,提示未做初始化操作。 发生故障的这台服务器安装LINUX操作系统,配置了NFS+FTP作为单位内部的文件服务器使用。服务器为ProLiant DL380系列服务器,通过hp smart array控制器挂载了一组由14块SCSI硬盘组成的RAID5磁盘阵列。该raid5磁盘阵列采用双循环的校验方式。 北亚企安数据恢复工程师到达现场后对故障服务器进行了初检,经过检测发现raid信息丢失。
服务器数据恢复—机房搬迁导致服务器无法识别raid的数据恢复案例
|
5月前
|
Kubernetes 网络协议 Docker
k8s 开船记-故障公告:自建 k8s 集群在阿里云上大翻船
k8s 开船记-故障公告:自建 k8s 集群在阿里云上大翻船
|
存储 算法 数据挖掘
服务器数据恢复—raid6硬盘故障导致nas存储无法访问的数据恢复案例
一台nas存储中有一组由十几块硬盘组建的raid6磁盘阵列。 nas存储中的raid6阵列成员盘出现故障离线,磁盘阵列崩溃,nas存储无法正常访问。
服务器数据恢复—raid6硬盘故障导致nas存储无法访问的数据恢复案例
|
弹性计算 运维 网络安全
一次阿里云ECS主机上挂载文件存储NAS的排障过程记录
一次阿里云ECS主机上挂载文件存储NAS的排障过程记录
522 1
一次阿里云ECS主机上挂载文件存储NAS的排障过程记录
|
运维 监控
WGCLOUD运维监控方案 - 如何设置主机10分钟内恢复正常就不进行提醒
这个,我们只要把agent上报时间改成10分钟就好了
|
监控 关系型数据库 MySQL
Hfish 集群蜜罐搭建
一款社区型免费产品,HFish 承载了全新的架构理念和失陷方案,通过安全可靠的中低交互蜜罐增加了企业在失陷感知和威胁情报领域的能力。
725 0
Hfish 集群蜜罐搭建
|
监控 NoSQL 关系型数据库
|
容灾 数据中心
数据传输(DTS):云服务商的区域故障不再是噩梦
最近一周,云服务提供商AWS,Azure相继出现大面积服务故障,AWS 美国东一区S3宕机故障、Azure 28个数据中心有26个数据中心出现停服故障。对于那些将服务/数据集中部署在故障区域的公司来说,AWS/Azure的区域故障直接导致了他们业务的不可服务,造成不可估量的经济损失及公司品牌的负面影响。
3844 0