网络抓包与分析方法的学习记录

掌握一些网络抓包和数据包分析的方法对于解决生产环境下遇到的疑难问题有很大帮助。 使用tcpdump命令加Wireshark工具 大多数线上服务都是部署在linux环境下,所以通常用tcpdump命令来截获网络数据包,然后拿到桌面环境(如windows)下用Wireshark解析数据包。Wireshark本身既可以捕获网络数据包,也可以解析一些常见通信协议和格式的数据。 场景一:HTTP协议数据包 首先实现了一个简易的HTTP服务端,监听端口9101。在服务端使用以下命令捕获数据包,输出到文件http.pcap,直到Ctrl+C终止, 使用curl命令发起HTTP请求, 将得到的http.pcap文件下载到windows环境下用Wireshark打开,如下图 如果没有对数据包内容进行过滤,则可以看到除了要关注的HTTP协议数

Mongodb跨数据中心部署实践

公司某休闲游戏的海外应用服务器和Mongodb数据库服务器都部署在了AWS美国东部某数据中心。最近为了降低欧洲用户的访问延迟,打算尝试使用Mongodb的zone sharding特性实现数据跨欧洲、北美两个数据中心,并在欧洲再部署一套应用服务器直连欧洲的数据库服务器。再通过AWS的Route 53(域名系统)的地理策略,依据其ip位置将用户分流到欧洲、北美两个入口,从而实现用户就近访问后端服务器,本地读写数据。 动手前先从架构和业务两方面思考有哪些需要解决的问题,尽可能避免一些弯路,做好充分的准备。 问题及解决方案 选择跨数据中心的网络连接方式 这里需要考虑安全和稳定两方面因素。分别调研了以下三种方式: VPC Peering Connections(对等连接),这个适用于同一数据中心里跨账户或跨VPC间的子网互连,目前

PostgreSQL命令速查 – 规则与触发器

参考Postgres XL官方文档,PostgreSQL官方文档 规则 规则(Rule)是定义在表上的,当该表发生insert、update、delete、select等操作时,自动触发其他操作。规则只能依附于某个表存在,删表时会连带删除表上的规则。当后面的被触发语句执行发生错误时,前面的触发语句也执行失败。 触发器 普通触发器(TRIGGER)是定义在表、视图和外部表上的,当该表发生insert、update、delete、truncate等操作时,自动触发一个返回值是trigger的特殊函数。普通触发器只能依附于某个表存在,删表时会连带删除表上的触发器。普通触发器创建时分为row级别和statement级别,一些内置变量如NEW、OLD只能在row级别使用。 事件触发器 事件触发器(EVENT TRIGGER)是独立存

虚拟机 – VirtualBox使用方法记录

VirtualBox是一款免费使用的虚拟机软件,通过安装不同操作系统的iso文件,可以获得多种不同的操作系统环境。不仅可以帮助使用者体验和学习各类操作系统,还可以实现在一台电脑上同时运行多个虚拟机,组成集群环境。软件下载地址在这里。 虚拟机的创建和配置 设置基本的虚拟机信息,包括名称、系统、内存、CPU、显示、存储、网络等。 操作系统的安装和运行 Mac OS 在虚拟机的DeviceKey中加入Apple的声明: 调整分辨率: 安装过程中用 “实用工具” -> “磁盘工具” 打开分区管理界面对刚开始创建的虚拟硬盘进行分区: Cent OS 设置NAT,使虚拟机通过主机访问外网: 设置主机和虚拟机之间的网络,使主机可以SSH到虚拟机:

PostgreSQL命令速查 – 扩展模块

扩展模块可以认为是第三方提供的一批函数,通过CREATE/DROP EXTENSION someone来安装或移除,通过\dx命令查看所有已安装的扩展模块。 更多扩展模块参考PostgreSQL官方文档 bloom 基于Bloom filters的索引方式。Bloom filters用于判断一个元素是不是在一个集合里,判定有则很可能有,判定无则一定无。优点是省空间低耗时,缺点是有一定误算率。 btree_gin 基因倒排索引,查找速度快,适合静态数据。 btree_gist 通用搜索树索引,更新快,适合动态数据,但可能会产生错误的匹配。 citext 大小写不敏感的text类型,该类字段存入的文本在与其他文本比较时将无视大小写。 dblink 用于访问其他PostgreSQL数据库。 file_fdw 用于直接读取数据库以

PostgreSQL命令速查 – 事务与过程语言

官方文档参考这里,Exception码参考这里 事务 在PostgreSQL里,一组被BEGIN和COMMIT包围的语句称为一个事务块,没有显式发起BEGIN命令的语句默认作为单独一个事务执行。事务过程中失败将回滚。 PL/pgSQL PostgreSQL既支持直接执行一组plpgsql语句,又支持将语句写在function中通过函数名反复调用执行。一组过程语句被BEGIN和END包围,内部不形成事务,通过EXCEPTION块来处理异常情况。 直接执行一组plpgsql语句 创建自定义函数,存储过程

PostgreSQL命令速查 – 数据操作

参考Postgres XL官方文档,PostgreSQL官方文档 数据类型 【名称(别名)】 【大小】 【格式】 【描述】 smallint (int2) 2 bytes 数字:整数,取值范围-32768到+32767 integer (int,int4) 4 bytes 数字:整数,取值范围-2147483648到+2147483647 bigint (int8) 8 bytes 数字:整数,取值范围-9223372036854775808到+9223372036854775807 numeric (decimal) 变长 1.23 数字:浮点数,numeric(p,s) 例如numeric(5,2)表示精度xxx.xx real (float4) 4 bytes 数字:浮点数,6位十进制数精度 double preci

域名系统 – 使用BIND搭建主备DNS服务

DNS(Domain Name System)域名系统提供域名与IP相互映射关系的服务,方便通过域名访问主机。BIND(Berkeley Internet Name Daemon)是一款DNS服务器软件。 安装 CentOS: Ubuntu: 配置 如果想实现name1.abc.com -> 172.31.32.100,name2.abc.com -> 172.31.32.101这样的域名IP映射,需要两步:一,在核心配置文件named.conf中增加域abc.com;二,在这个域对应的配置文件中增加name1、name2与IP的映射关系。除了这样的域名到IP的正向解析外,还可以实现IP到域名的反向解析。 修改配置文件后需要重启服务生效,相关命令如下: 核心配置文件named.conf named.conf在centos中

NFS使用方法记录

介绍 NFS(Network File System)是一种依赖RPC协议的分布式文件系统,通常用于共享网络中主机上的文件,使程序操作这些文件时看起来就像操作本地文件一样。例如,想要让主机A看到主机B上的某个目录,需要在B上运行nfs server共享该目录,然后A上通过挂载的方式将B上的目录挂到本地目录上,这样A从本地目录中便可以看到B上该目录中的内容。 服务端 安装nfs程序,配置文件见/etc/sysconfig/nfs。 在/etc/exports文件中添加需要共享的目录,并配置权限。 运行nfs相关进程。 查看端口信息,并开放相关端口的访问权限。 客户端 安装nfs程序。 临时挂载到本地目录。 开机自动挂载到本地目录。 挂载成功后通过df -h查看本地目录可以看到。

NTP使用方法记录

介绍 NTP(Network Time Protocol)是计算机系统之间进行时钟同步的网络协议。通常用于集群环境中的各个节点保持一致的时间。例如,在一个局域网环境中,选择一台主机作为提供时间源的ntp server,在其上运行ntpd进程,其他主机定时调用ntpdate与ntp server进行时间同步。也可以所有节点都运行ntpd进程与上层ntp server进行同步。 NTP服务器 安装与运行相关命令: ntpd默认使用UDP 123端口,使用ntpdate从ntp server同步时间时需要开放ntp server的123端口。 ntpd的配置文件是/etc/ntp.conf,内容如下: NTP客户端 需要同步时间的ntp客户端可以通过在crontab里增加ntpdate来实现时间定时同步。