TCP连接状态详解及TIME_WAIT过多的解决方法
TCP连接状态详解及TIME_WAIT过多的解决方法
上图对排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻地认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解释一下,以便加强记忆!不过在这之前,先回顾一下TCP建立连接的三次握手过程,以及关闭连接的四次握手过程。
1、建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。
(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
(3) 客户必须再次回应服务段一个ACK报文,这是报文段3。
2、连接终止协议(四次握手)由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一 ...
使用elk收集nginx日志grafana展示
文档仅收集nginx的日志来grafana展示,如果要收集ingress-nginx的日志来grafana展示见 https://www.putianhui.cn/posts/60dba0725b3e 这个文档中的安装ingress-nginx配置
安装es681我这里用docker安装的es681,这里先安装docker
1$ curl https://www.putianhui.cn/package/script/install_docker.sh |bash
创建es数据和logs目录并启动
123$ mkdir -p /data/es-data/{data,logs}$ cd /data/es-data/ && chmod 777 data && chmod 777 logs$ docker run -d --name es681 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /data/es-data/data:/usr/ ...
【持续更新】Kafka常用优化
磁盘占用过大优化生产环境服务器目前生产上kafka占用磁盘地方过大。因为数据量大建议优化。
目前kafka 使用的是默认配置,默认配置中有两项配置可优化
log.retention.hours 清理超过指定时间清理
log.retention.bytes 超过指定大小后,删除旧的消息
目前默认配置 存放时间是7天而且大小无限大,我们可以将存放时间缩小且设定默认大小(存在风险是可能会丢数据)
配置字段名
含义
默认值
log.cleanup.policy
日志清理保存的策略(delete|compact)两种
delete
log.retention.hours
日志保存的时间(hours,minutes,ms)三种可选
168(7day)
log.retention.bytes
删除前日志允许保存的最大值
-1(无限)
log.segment.delete.delay.ms
日志文件被真正删除前的保留时间
60000(60s)
log.cleanup.interval.mins
每隔一段时间多久调用一次清理的步骤
10
log.retention.c ...
Go-Viper配置管理工具
一、什么是ViperViper是一个方便Go语言应用程序处理配置信息的库。它可以处理多种格式的配置。它支持的特性:
设置默认值
从JSON、TOML、YAML、HCL和Java properties文件中读取配置数据
可以监视配置文件的变动、重新读取配置文件
从环境变量中读取配置数据
从远端配置系统中读取数据,并监视它们(比如etcd、Consul)
从命令参数中读物配置
从buffer中读取
调用函数设置配置信息
二、为什么要使用Viper在构建现代应用程序时,您不必担心配置文件格式; 你可以专注于构建出色的软件。Viper 可以做如下工作:
加载并解析JSON、TOML、YAML、HCL 或 Java properties 格式的配置文件
可以为各种配置项设置默认值
可以在命令行中指定配置项来覆盖配置值
提供了别名系统,可以不破坏现有代码来实现参数重命名
可以很容易地分辨出用户提供的命令行参数或配置文件与默认相同的区别
Viper读取配置信息的优先级顺序,从高到低,如下:
显式调用Set函数
命令行参数
环境变量
配置文件
key/value 存储系统
默认值
...
解决Mysql主从复制Relay log read failure问题
一、问题描述Mysql主从复制模式中,slave上报错 “relay log read failure”,导致主从同步停止。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960mysql> show slave status\G*************************** 1. row *************************** Slave_IO_State: Queueing master event to the relay log Master_Host: 192.168.99.44 Master_User: repl Master_Port: 3306 Connect_Retry: 30 Maste ...
MacOS下安装sshpass工具
本地编译安装下载源码包到本地
1wget https://nchc.dl.sourceforge.net/project/sshpass/sshpass/1.08/sshpass-1.08.tar.gz
解压并切换到安装包目录
12tar xzvf sshpass-1.08.tar.gzcd sshpass-1.08
编译并编译安装
1234./configureecho $?sudo make&&sudo make installecho $?
检查是否安装成功
12345678910111213sshpassUsage: sshpass [-f|-d|-p|-e] [-hV] command parameters -f filename Take password to use from file -d number Use number as file descriptor for getting password -p password Provide password as argument (security unwise) ...
【NAT回流解决办法】路由器配置nat后内网用户无法通过外网ip访问内部服务。
组网需求192.168.99.0/24网段公司内网,192.168.99.1为内网服务器IP,当前将公网ip1.1.1.2:80映射到内网服务器的192.168.99.110:80,实现了外网用户通过公网接口IP来访问内网服务器的需求。现要求实现内网用户通过公网IP访问内网服务器的需求。
组网拓扑
配置步骤步骤一:路由器配置静态nat使其互联网能通过1.1.1.2:80访问到192.168.99.110:80的服务。
解决互联网访问内网服务的问题。
至此互联网即可通过1.1.1.2:80访问到192.168.99.110的80端口
步骤二:配置内网接口的公网nat以及acl
解决内网主机无法通过公网ip访问内网问题。
创建高级ACL。在Web界面选择安全–ACL–高级ACL–新建,然后点击确定。
添加ACL规则,一次选择“添加规则”,添加上内网PC的IP和映射的公网IP,点击√,进行确认
源IP:内网PC的IP
目的IP:服务器映射后的公网地址
动作:允许
在内网接口处调用nat转换规则,依次选择“IP业务–NAT–外网访问–新建”,新建外网访问。
填写Nat outbou ...
Go操作elasticsearch
下载es镜像
1docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.0
创建一个网络
1docker network create esnet
启动容器
1docker run --name es -p 9200:9200 -p 9300:9300 --network esnet -e "discovery.type=single-node" bdaab402b220
安装ElisticHD
1docker run -p 9800:9800 -d --link es:demo --network esnet -e "discovery.type=single-node" containerize/elastichd
下载依赖库
1go get github.com/olivere/elastic/v7
操作案例 创建索引
123456789101112131415161718192021222324252627282930313233343536373 ...
Let's Encrypt免费https/SSL通配证书申请与续期
Let’s Encrypt 是免费、开放和自动化的证书颁发机构。目前有很多网站使用Let’s Encrypt证书做https加密。我也一直在用,不过以前都是用的单域名证书,新建网站就需要重新申请,比较麻烦。但现在已经可以申请Let’s Encrypt通配证书了。
实际上,申请 Let’s Encrypt 生成证书的工具不止一种,我用过 cerbot 和 acme.sh。以前用 cerbot 申请的时候不得不停掉 80 端口的服务,感觉不太友好。后来用 acme.sh 简单一点,本文将介绍如何使用 acme.sh 来独立申请域名通配证书。
acme.sh 项目地址为https://github.com/acmesh-official/acme.sh,本文参考官方文档。
一、安装123$ curl https://get.acme.sh | sh[2022年 01月 07日 星期五 09:24:40 CST] OK[2022年 01月 07日 星期五 09:24:40 CST] Install success! # 出现此消息安装成功。
安装完成之后会在当前目录下生成 .acme. ...
Mac通过dd刻录centos启动盘
Mac通过dd刻录centos启动盘
之所以选择dd是因为有时候软碟通刻录的启动盘服务器无法正常启动。
1、先插入u盘到mac设备。
2、通过diskutil工具查看U盘设备编号。
12345$ diskutil list/dev/disk4 (external, physical): # 我这里是/dev/disk4 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *15.5 GB disk4 1: Windows_FAT_32 CES_X64FREV 15.5 GB disk4s4
3、通过diskutil卸载U盘的挂载。
12$ diskutil unmountDisk /dev/disk4Unmount of all volumes on disk4 was successful
4、通过 ...