January 3, 2020
利器

5 windows下的磁盘管理

装了一个苹果系统在ssd上,用硬盘盒插到windows电脑上,其GUI版的磁盘管理工具,无法删除分区和格式化磁盘,又找了一个国产的DiskGenius, 能删除分区,其后啥事也干了了,原来windows下有一个diskpart工具,list disk列出所有盘,select disk 1选择一个盘,clean就把盘给清理干净了, 再用GUI版的磁盘管理工具能就把磁盘格式化当移动硬盘用了。

4 windows版redis做本地开发测试

在数据量大的情况下,减少网络IO,特别是本地硬件资源比服务器资源更强大时,急需要一个windows的redis来解决问题。

临时服务安装:cmd敲命令进入Redis安装文件下,启动临时服务:redis-server.exe redis.windows.conf,如果出现一个方形图标,安装临时服务成功。

备注:通过以上面命令,会创建Redis临时服务,不会在window Service列表出现Redis服务名称和状态,此窗口关闭,服务会自动关闭 可以装一个Redis Management测试一下,当关闭这个临时服务是数据库连不上的。

现在进行客户端调用,因为只有临时服务,所以不要关闭上面窗口,我们打开文件夹下redis-cli.exe执行文件,进入客户端Dos窗口, 敲入Set uid 1返回OK ,表示写入内存中;我们再敲Get uid,会返回一个Value值1

参考自这里 ,redis的windows版本在这里,虽长年不更新,但还能用。

3 用mtr分析网络请求

背景:把腾讯云狠狠冤枉了一顿,用Ssh操控云主机,时不时没法及时响应,敲的内容过好几秒才能显示出来。 同时用阿里云对比,貌似又正常(也怪不得我要冤枉了)。这就把问题都怪腾讯云不稳定上面来了。 (2018/09/25)

定位问题的方法:

备注:需提供双向的mtr测试和ping测试的截图,本地ip–服务器ip 服务器ip–本地ip 完整的截图

结果访问第一跳就有丢包,腾讯小伙视为不正常,提示换网络环境尝试:

mtr丢包

后来插网线就0丢包了,万恶的360WIFI网卡

2 用rsync来同步两台机器的目录(单身)

(1)用spring开发的程序,双机部署,上传接口,可能随机到不同的机器;

(2)file访问文件的请求只反代理到其中一台机器的某目录

如何将B机器的文件实时归纳到A机器?即单向同步。

rsync + inotify达到实时单向同步的效果,主要参考自这里

(1)首先保证B机器可以用ssh免密登录A机器,方法是:

ssh-keygen -t rsa # 在B机器上生成ssh公钥
scp /root/.ssh/id_rsa.pub root@172.26.3.142:~/.ssh/temp.pub # 将B机器的公钥拷贝到A机器
cat ~/.ssh/temp.pub >> ~/.ssh/authorized_keys   # 在A机器上执行,将B的公钥追加到A机器的授权允可中
chmod 600 ~/.ssh/authorized_keys # 在A机器上执行,设置权限
ssh root@172.26.3.142 # 在B机器执行命令并不需要验密则表示成功!

(2)rsync一般是系统自带了,以下命令都在A机器上执行:

which rsync # 从环境变量看rsync在哪,一般在/usr/bin下
rpm -qf /usr/bin/rsync # 查看属性于哪个安装包,阿里主机上是较新的3.1.2版,因此不要动了
rsync --daemon # 查看rsync加载的配置文件,没有东西,看样子是没有启动。一般在/etc/rsyncd.conf下
vim /etc/rsyncd.conf # 编辑同步脚本,基本上就是把注释的代码打开,修改之后的内容如下,后续也没运行什么命令,不过系统进程中可以看到rsync,有监听873端口
rsync --daemon # 如果关闭了,使用这个命令启动

rsyncd.conf的配置示例:

# configuration example:

uid = root
gid = root
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

[ftp]
  path = /root/www/guguhui_service/api
  comment = copy file from 143
  # https://blog.csdn.net/iie_libi/article/details/56682520
  host allow = 172.26.3.143
  list = yes
  auth users = root

其实有了minio之后,这种场景都不存在

(3)inotify是能监听文件目录的变化,在B机器上安装inotify,以下命令在B机器上执行:

wget https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz # 下载  https://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/
tar -zxvf inotify-tools-3.13.tar.gz # 解压
cd inotify-tools-3.13/
./configure --prefix=/root/program/inotify && make && su -c 'make install' # 配置并编译安装
cd ../inotify/bin
vim monitor.sh # 新建启动脚本,脚本如下,主要是就是调用两个工具命令行

monitor.sh的脚本如下:

#!/bin/bash
SRC=/root/www/guguhui_service/api/

DST=root@172.26.3.142:/root/www/guguhui_service/api/

/usr/bin/rsync -ahqzt --delete $SRC $DST

/root/program/inotify/bin/inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read status

do
/usr/bin/rsync -ahqzt --delete $SRC $DST
echo "`date +'%Y-%m-%d %H:%M:%S'` ${status} has rsynced " >>rsync.log
done

以上脚本有点危险,–delete参数会将目标无关的extraneous东西都删除掉,什么是无关,是B机器没有的吗?现在的情况是发现A的一些文件不见,所以用以下脚本 :

#!/bin/bash
SRC=/root/www/guguhui_service/api/

DST=root@172.26.3.142:/root/www/guguhui_service/api/

/usr/bin/rsync -ahqzt $SRC $DST

/root/program/inotify/bin/inotifywait -mrq -e modify,create,attrib ${SRC} | while read status

do
/usr/bin/rsync -ahqzt $SRC $DST
echo "`date +'%Y-%m-%d %H:%M:%S'` ${status} has rsynced " >>rsync.log
done

其它shell管理脚本:

chmod +x monitor.sh # 执行权限
./monitor.sh & # 后台启动
ps -ef|grep inotify # 可以看到进程

(4)验证
在B机器上新增目录或修改文件、删除文件或目录,都能实时同步到A机器

1 用Wireshark分析TCP网络包

程序调用接口,对方返回异常,比如说长度超限,但是用POSTMAN等模拟是可以的。程序发的请求有什么问题?真相是什么?

正常的请求如下:

正常的网络包

但是,程序发出的请求是这样的:

异常的网络包

诊断出:未按form-data的格式发东西,原来是header没加上

ip过滤器的添加方式:ip.addr == 172.16.0.121


loading