所有由Roar, miou发布的文章

centos7安装配置nmon

https://www.cnblogs.com/mingerlcm/p/7748539.html

--选择适合系统的版本:nmon安装包:http://nmon.sourceforge.net/pmwiki.php?n=Site.Download
--下载后直接解压出模板(nmon analyser v51_2.xlsm),用于最后制图 nmon_analyser工具:https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power+Systems/page/nmon_analyser
--解压,拷贝,重命名:cp nmon_x86_64_centos7 /usr/local/bin/nmon
--授权:cd /usr/local/bin   chmod 777 nmon
--执行,查看是否安装成功:./nmon
--数据采集:./nmon_x86_64_centos7 -c 10 -s 10 -f -m .
################
-f :按标准格式输出文件名称   生成文件:<hostname>_YYYYMMDD_HHMM.nmon
-t : 输出最耗资源的进程
-s :每隔n秒采集一次,这里为30秒
-c :采集次数,这里为10,即监控=10*30/60=5分钟
-m : 指定生成文件位置
test :监控记录的标题
#####################################
--下载本地:将localhost_170616_0138.csv文件下载到本地
1) 下载后打开nmon analyser v51_2.xlsm
2) 调整excel宏的安全级别,调整为最低或者如下操作
3) 然后点击Analyser nmon data 按钮,选择下载下来的.csv文件,然后就会转化成.excel文件,生成图形化的文件,例如:

sudo /usr/local/bin/nmon -c 10 -s 6000 -f -m ~/nmon/test1/

–SUSE系统安装:根据上面找到对应版本进行安装;

SUSE查看版本号
suse:~ # lsb_release -d
Description: SUSE Linux Enterprise Server 10 (x86_64)
suse:~ # cat /etc/SuSE-release
SUSE Linux Enterprise Server 10 (x86_64)
VERSION = 10
PATCHLEVEL = 3
suse:~ # uname -r
2.6.16.60-0.54.5-smp

nginx配置ssl证书

1.简介:

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容请看SSL。
  它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

<span style=”font-weight: bold;”–<-自行颁发不受浏览器信任的SSL证书

为晒晒IQ网颁发证书。ssh登陆到服务器上,终端输入以下命令,使用openssl生成RSA密钥及证书。
# 生成一个RSA密钥
$ openssl genrsa -des3 -out 33iq.key 1024
# 拷贝一个不需要输入密码的密钥文件
$ openssl rsa -in 33iq.key -out 33iq_nopass.key
# 生成一个证书请求
$ openssl req -new -key 33iq.key -out 33iq.csr
# 自己签发证书
$ openssl x509 -req -days 365 -in 33iq.csr -signkey 33iq.key -out 33iq.crt
第3个命令是生成证书请求,会提示输入省份、城市、域名信息等,重要的是,email一定要是你的域名后缀的。这样就有一个 csr 文件了,提交给 ssl 提供商的时候就是这个 csr 文件。当然我这里并没有向证书提供商申请,而是在第4步自己签发了证书。
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
openssl x509 -req -days 365 -in 33iq.csr -signkey 33iq.key -out 33iq.crt

2.ngx_stream_ssl_module:https://cloud.tencent.com/developer/section/1259656     https://blog.lyz810.com/article/2016/06/ngx_stream_ssl_module_doc_zh-cn/

配置模板:
stream {
 ...
 server {
 listen 12345 ssl;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
 ssl_certificate /usr/local/nginx/conf/cert.pem;
 ssl_certificate_key /usr/local/nginx/conf/cert.key;
 ssl_session_cache shared:SSL:10m;
 ssl_session_timeout 10m;
 ...
 }

—ssl_certificate

语法:ssl_certificate file
默认:—
上下文:stream, server
为给定的服务器指定一个PEM格式的证书文件。如果中级证书需要指定在初级证书中,它们需要在相同的文件中按如下顺序指定:初级证书在前,然后是中级证书。PEM格式的密钥也应该放到相同文件中。
从1.11.0版本开始,该指令可以指定多次加载不同类型的证书,例如RSA和ECDSA:

—ssl_certificate_key

语法:ssl_certificate_key file
默认:—
上下文:stream, server
为给定的服务器指定一个PEM格式的密钥文件。
engine:name:id值可以代替文件指定,会从OpenSSL引擎name中加载指定id的密钥。

—ssl_ciphers

语法:ssl_ciphers ciphers
默认:ssl_ciphers HIGH:!aNULL:!MD5
上下文:stream, server
指定启用的加密算法。加密算法指定为OpenSSL库可以识别的格式,例如:
ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
完整的列表可以通过“openssl ciphers”命令查看。

—ssl_protocols

语法:ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]
默认:ssl_protocols TLSv1 TLSv1.1 TLSv1.2
上下文:stream, server
启用指定的协议。TLSv1.1和TLSv1.2参数只有OpenSSL库在1.0.1及更高版本使用时才有效。

—ssl_session_cache

语法:ssl_session_cache off | none | [builtin[:size]] [shared:name:size]
默认:ssl_session_cache none
上下文:stream, server
设置保存会话参数的缓存类型和大小。缓存可以下面任意类型:
off
使用会话缓存是强烈禁止的:nginx明确告诉客户端会话不能被重用。
none
使用会话缓存是不允许的:nginx告诉客户端会话可以重用,但实际上会话参数不会保存在缓存中。
builtin
构建在OpenSSL中的缓存,只被一个工作进程使用。缓存大小指定在会话中。如果没给出大小,它等于20480个会话,使用built-in缓存可以引起内存碎片。
shared
在工作进程之间共享的缓存。缓存大小指定为字节。1M可以保存大约4000个会话。每个共享缓存有一个唯一的名字。相同名字的缓存可以在多个服务器之间使用。
缓存和类型可以同时使用,例如:
ssl_session_cache builtin:1000 shared:SSL:10m;
但是只使用共享缓存不带built-in缓存会更有效率。

—ssl_session_timeout

语法:ssl_session_timeout time
默认:ssl_session_timeout 5m
上下文:stream, server
指定一个时间,在这个期间客户端可以重用保存在缓存中的会话参数。

2.配置nginx双向认证:https://blog.csdn.net/qq_22239675/article/details/86541088

(1)创建证书目录:mkdir /usr/local/nginx/ssl:

(2)为服务器端和客户端准备公钥、私钥:

--生成服务端私钥
openssl genrsa -out server.key 1024
--生成服务端公钥
openssl rsa -in server.key -pubout -out server.pem
--客户端私钥
openssl genrsa -out client.key 1024
--客户端公钥
openssl rsa -in client.key -pubout -out client.pem

(3)生成CA证书:

--生成 CA 私钥:
openssl genrsa -out ca.key 1024
--生成请求文件:注意,这里的 Organization Name (eg, company) [Internet Widgits Pty Ltd]: 后面生成客户端和服务器端证书的时候也需要填写,不要写成一样的!!!       Common Name (e.g. server FQDN or YOUR name) []: 这一项,是最后可以访问的域名
openssl req -new -key ca.key -out ca.csr
--生成ca证书:
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

(4)生成服务器端证书和客户端证书:

--服务器端需要向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR 文件:
openssl req -new -key server.key -out server.csr
--向自己的 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书:
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
--生成client端csr:
openssl req -new -key client.key -out client.csr
--client 端得到 CA 签名生成client端证书:
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt

(5)如果使用jmeter进行测试,还需要对客户端证书和私钥进行转换:https://www.cnblogs.com/cuimiemie/p/6442668.html

–keytool和openssl生成的证书相互之间无法识别,keytool生成的为jsk文件,openssl默认生成的为PEM格式文件。需要先转换成pkcs12格式,然后再使用对方的命令转换成需要的格式。

openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 -name client -passin pass:${passwd} -passout pass:${passwd}
keytool -importkeystore -srckeystore client.p12 -srcstoretype PKCS12 -srcstorepass ${passwd} -alias client -deststorepass ${passwd} -destkeypass ${passwd} -destkeystore ClientCert.jks

–jmeter配置:

–Protocols:客户端与服务器通过SSL加密通道连接时,可以选择单向或者双向认证(Dual)。双向认证时,您还需要指定相应的信任秘钥库(Trust Key Store), 客户端证书,以及对应的文件保护密码(Secret)。

–User authentication:如果服务器配置了用户认证,您需要提供相应的用户名和口令。

–ClientId prefix:标识客户端的固定前缀,每个连接(虚拟用户)再添加一个uuid串,整个作为客户标识。

–Keep alive(s):心跳信号发送间隔。例如,300表示客户端每隔300秒向服务器发出ping请求,以保持连接活跃。

–Connection keep time(s):连接建立后,保持该连接的时长。例如,1800表示1800秒之后连接将被关闭,即使一直发送心跳信号。

–Connect attempt max:第一次连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。

–Reconnect attempt max:后继连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。

3.nginx最后配置文件如下:

server {
        listen 1234 ssl so_keepalive=on ;
        proxy_connect_timeout 1s;
        proxy_timeout 3600s;
        proxy_pass iot1886;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate /usr/local/nginx/ssl/server.crt;
        ssl_certificate_key /usr/local/nginx/ssl/server.key;
        ssl_client_certificate /usr/local/nginx/ssl/ca.crt;
        ssl_verify_client on;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;
    }

4.涉及的一些名词介绍:https://www.cnblogs.com/UnGeek/p/6048334.html

TLS:传输层安全协议 Transport Layer Security的缩写
SSL:安全套接字层 Secure Socket Layer的缩写
TLS与SSL对于不是专业搞安全的开发人员来讲,可以认为是差不多的,这二者是并列关系,详细差异见 http://kb.cnblogs.com/page/197396/
KEY 通常指私钥。
CSR 是Certificate Signing Request的缩写,即证书签名请求,这不是证书,可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构。
CRT 即 certificate的缩写,即证书。
X.509 是一种证书格式.对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。
X.509的证书文件,一般以.crt结尾,根据该文件的内容编码格式,可以分为以下二种格式:
PEM - Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN..."开头, "-----END..."结尾,内容是BASE64编码.
Apache和*NIX服务器偏向于使用这种编码格式.
DER - Distinguished Encoding Rules,打开看是二进制格式,不可读.
Java和Windows服务器偏向于使用这种编码格式
OpenSSL 相当于SSL的一个实现,如果把SSL规范看成OO中的接口,那么OpenSSL则认为是接口的实现。接口规范本身是安全没问题的,但是具体实现可能会有不完善的地方,比如之前的"心脏出血"漏洞,就是OpenSSL中的一个bug.

##################遇到报错:######################

(1)同样的转换命令,在服务端转换server文件时未报错,转换

[junoN1@node1 ssl]$ openssl pkcs12 -export -in client.crt -inkey client.pem -out client.p12 -name client -passin pass:${passwd} -passout pass:${passwd}
unable to load private key
139774655215504:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:707:Expecting: ANY PRIVATE KEY

(2)jmeter:报错,查看后台terminal即可:

–Response message: Publish: Connection not found.   协议文件错误,最开始使用了key和crt文件;

–unable to load SSL private key from PEM file。           还是协议文件报错,使用的server端的文件;

####

##阿里云下载免费证书:https://blog.csdn.net/baofeidyz/article/details/80435929

1.获取免费证书:https://www.cnblogs.com/grimm/p/5938496.html https://www.linuxidc.com/Linux/2011-11/47478.htm

docker 安装zabbix

#######参考文档#######

https://www.cnblogs.com/Dicky-Zhang/p/7189714.html    https://blog.rj-bai.com/post/144.html

监控出入流量:https://www.cnblogs.com/smail-bao/p/6109882.html

监控某个端口:https://blog.51cto.com/shuzonglu/2104195

tcp状态监控脚本和模板:https://www.cnblogs.com/hyzhou/p/7019464.html  https://www.cnblogs.com/dannylinux/p/8694171.html

zabbix监控redis,rocketmq;https://github.com/cuimingkun/zbx_tem_redis

常用模板:https://cloud.tencent.com/info/ce1d393f124949962a7dcde477efca39.html

1.拉取镜像:需要用到三个镜像:

mysql:数据库镜像,官方最新为mysql8

zabbix/zabbix-agent:客户端镜像

zabbix/zabbix-web-nginx-mysql:web界面镜像

zabbix/zabbix-server-mysql :server镜像

2.配置mysql:

docker run --name zabbix-mysql-server --hostname zabbix-mysql-server \
-v /junosoft/docker_data/mysql/zabbix:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD="root123" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_DATABASE="zabbix" \
-p 13306:3306  \
-d mysql \
--character-set-server=utf8 --collation-server=utf8_bin

3.配置zabbix镜像:

docker run  --name zabbix-server-mysql --hostname zabbix-server-mysql \
--link zabbix-mysql-server:mysql \
-e DB_SERVER_HOST="mysql" \
-e MYSQL_USER="zabbix" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-v /etc/localtime:/etc/localtime:ro \
-v /junosoft/docker_data/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
-v /junosoft/docker_data/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
-p 10051:10051 \
-d \
zabbix/zabbix-server-mysql

4.配置web界面:

最后安装zabbix-web-nginx
docker run --name zabbix-web-nginx-mysql1 --hostname zabbix-web-nginx-mysql \
--link zabbix-mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-e DB_SERVER_HOST="mysql" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_DATABASE="zabbix" \
-e ZBX_SERVER_HOST="zabbix-server" \
-e PHP_TZ="Asia/Shanghai" \
-p 18000:80 \
-p 18443:443 \
-d \
zabbix/zabbix-web-nginx-mysql

5.agent安装:

docker run --name zabbix-agent --link zabbix-server-mysql:zabbix-server -e ZBX_SERVER_HOST="zabbix-server" -p 20050:10050 -d zabbix/zabbix-agent:latest
docker run --name zabbix-agent -e ZBX_SERVER_HOST="10.101.1.41" -p 10050:10050 -d zabbix/zabbix-agent:latest

–配置nginx监控脚本:https://www.cnblogs.com/bixiaoyu/p/9169319.html

(1)nginx配置文件添加:

location /status {
stub_status on;
access_log off;
allow 192.168.2.0/24;
allow 127.0.0.1;
deny all;
}

(2)在客户端镜像中添加脚本文件:nginx_monitor.sh,并赋予执行权限:

NGINX_PORT=80  
NGINX_COMMAND=$1
nginx_active(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/status/" |awk '/Active/ {print $NF}'
}
nginx_reading(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/status/" |awk '/Reading/ {print $2}'
}
nginx_writing(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/status/" |awk '/Writing/ {print $4}'
       }
nginx_waiting(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/status/" |awk '/Waiting/ {print $6}'
       }
nginx_accepts(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/status/" |awk 'NR==3 {print $1}'
       }
nginx_handled(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/status/" |awk 'NR==3 {print $2}'
       }
nginx_requests(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/status/" |awk 'NR==3 {print $3}'
       }
  case $NGINX_COMMAND in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
;;
      *)
echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}"
    esac

(3)zabbix_agent.conf

UserParameter=status[*],/bin/bash /usr/local/zabbix/etc/zabbix_agentd.conf.d/nginx_monitor.sh "$1"

(4)服务端测试:

[root@zabbix-server ~]#zabbix_get -s 192.168.2.146 -k status
USAGE:/usr/local/zabbix/etc/zabbix_agentd.conf.d/nginx_monitor.sh {active|reading|writing|waiting|accepts|handled|requests}

(5)web界面添加模板:

–添加监控项:分别添加7个监控项,active|reading|writing|waiting|accepts|handled|requests

–添加完成

—图形创建:

—在主机,模板中添加

–在监控图形中即可找到:

###################报错内容###############

1.Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work.

修改系统文件/etc/sysctl.conf,net.ipv4.ip_forward=1
sysctl -p生效,重新建立镜像即可;

2.MySQL报错:MySQL8.0提示 caching_sha2_passwor' cannot be loaded

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root123';
ALTER USER 'zabbix'@'%' IDENTIFIED WITH mysql_native_password BY 'zabbix';

3.中文乱码:https://www.linuxidc.com/Linux/2017-08/146162.htm

本地C:\Windows\Fonts找一种喜欢的语言,比如我选择宋体,上传到服务器上,如果是docker镜像,可以安装apk add openssh

##############心得###########

(1)每安装完一个镜像,记得用docker logs看下,是否有问题,遇到问题日志分析;

##############客户端安装#####################

(1)如下:

在客户端上也需要下载zabbix的yum源
wget http://repo.zabbix.com/zabbix/4.1/rhel/7/x86_64/zabbix-release-4.1-1.el7.noarch.rpm
rpm -ivh zabbix-release-4.1-1.el7.noarch.rpm
yum install -y zabbix-agent
vim /etc/zabbix/zabbix_agentd.conf //修改如下配置
Server=127.0.0.1修改为Server=192.168.133.130 //定义服务端的ip(被动模式)
ServerActive=127.0.0.1修改为ServerActive=192.168.133.130 //定义服务端的ip(主动模式)
Hostname=Zabbix server修改为Hostname=aming-123 //这是自定义的主机名,一会还需要在web界面下设置同样的主机名
setenforce 0
systemctl start zabbix-agent
systemctl enable zabbix-agent

(2)主动模式和被动模式:

主动模式和被动模式
主动或者被动是相对客户端来讲的
被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端
主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可。
当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力。
服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式

Alpine Linux简介

  1. 简要概括:

    Alpine 的意思是“高山的”,比如 Alpine plants高山植物,Alpine skiing高山滑雪、the alpine resort阿尔卑斯山胜地。
    Alpine Linux 网站首页注明“Small!Simple!Secure!Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.”概括了以下特点:
1、小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;
2、安全:面向安全的轻量发行版;
3、简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。
4、适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。
  1. 本地安装可以查看:http://blog.csdn.net/csdn_duomaomao/article/details/76053229

  2. docker下运行:官方镜像:http://gliderlabs.viewdocs.io/docker-alpine/

docker pull alpine
docker run -it --name myalpine alpine
  1. 安装包管理:

(1)更新镜像源文件为国内库:/etc/apk/repositories,
#采用国内阿里云的源,文件内容为:
https://mirrors.aliyun.com/alpine/v3.6/main/
https://mirrors.aliyun.com/alpine/v3.6/community/
# 如果采用中国科技大学的源,文件内容为:
https://mirrors.ustc.edu.cn/alpine/v3.6/main/
https://mirrors.ustc.edu.cn/alpine/v3.6/community/
(2)alpine 提供了非常好用的apk软件包管理工具,可以方便地安装、删除、更新软件。
#查询openssh相关的软件包
apk search  openssh   
#安装一个软件包
apk add  xxx   
#删除已安装的xxx软件包
apk del  xxx   
#获取更多apk包管理的命令参数
apk --help   
#比如安装常用的网络相关工具:
#更新软件包索引文件
apk update    
#用于文本方式查看网页,用于测试http协议
apk add curl  
#提供了查看网络连接的协议端口的命令ss,可以替代netstat命令
apk add iproute2  
#drill 命令可以替代dig和nslookup DNS查询命令
apk add drill   
#测试192.168.3.166的80端口,查看web服务是否能正常访问。
curl 192.168.3.166  
#查看建立的TCP连接
ss -ta   
#查询域名的信息
drill blog.csdn.net @8.8.8.8    
#根据IP地址,反向查找域名
drill -x 8.8.8.8 @47.94.71.34   

###########参考文档########################

https://blog.csdn.net/zl1zl2zl3/article/details/80118001

https://blog.csdn.net/qq_34924407/article/details/82056717

############遇到的问题#####################

(1)WARNING: Ignoring APKINDEX.8d3fc6bf.tar.gz: No such file or directory

更新镜像文件,没有apk update

(2)ERROR: unsatisfiable constraints:

有的包会报错,证明这个源有问题

docker监控工具

参考:https://www.cnblogs.com/softidea/p/7246000.html

1.ctop安装:https://github.com/bcicen/ctop 到官网下载最新的版本;

sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.2/ctop-0.7.2-linux-amd64 -O /usr/local/bin/ctop
sudo chmod +x /usr/local/bin/ctop
Option
Description
-a
show active containers only
-f <string>
set an initial filter string
-h
display help dialog
-i
invert default colors
-r
reverse container sort order
-s
select initial container sort field
-scale-cpu
show cpu as % of system total
-v
output version information and exit

nginx查看连接数

1.主要方法:

–通过access.log进行访问:连接数

–通过status进行查看:

nginx status详解
active connections – 活跃的连接数量
server accepts handled requests — 总共处理了11989个连接 , 成功创建11989次握手, 总共处理了11991个请求
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.

–通过zabbix进行监控;

2.日志研究:

(1)https://www.zifangsky.cn/1019.html

--放于stream之内:
    log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
    access_log logs/access_1234.log proxy ;
    error_log  logs/error_1234.log;
    open_log_file_cache off;
--关于open_log_file_cache:开启日志打开缓存,其他日志介绍,详见http://www.ttlsa.com/linux/the-nginx-log-configuration/
为了提高包含变量的日志文件存放路径的性能,可以使用open_log_file_cache指令来设置,格式如下:
    open_log_file_cache max=N [inactive=time][min_use=N][valid=time] |off
该指令默认是禁止的,等同于: open_log_file_cache off;
max:设置缓存中的最大文件描述数量。
inactive:设置一个时间,如果在设置的时间内没有使用此文件描述,则自动删除此描述。
min_uses:在参数inactive指定的时间范围内,如果日志文件超过使用次数,则该日志文件的描述计入缓存,默认为10秒钟
valid:设置多长时间检查一次,看日志文件路径与文件名是否仍然存在,默认60秒。
示例:open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m
--关于TCP_NODELAY,启用就意味着禁用了Nagle算法,允许小包的发送;具体原因详见:https://blog.csdn.net/lclwjl/article/details/80154565
对于关闭TCP_NODELAY,则是应用了Nagle算法。数据只有在写缓存中累积到一定量之后,才会被发送出去,这样明显提高了网络利用率(实际传输数据payload与协议头的比例大大提高)。但是这由不可避免地增加了延时;与TCP delayed ack这个特性结合,这个问题会更加显著,延时基本在40ms左右。当然这个问题只有在连续进行两次写操作的时候,才会暴露出来。

centos常用几款监控工具

1.iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等,详细的将会在后面的使用参数中说明。官方网站:http://www.ex-parrot.com/~pdw/iftop/,参考:https://www.vpser.net/manage/iftop.html

(1)安装部署:

--依赖包安装
yum install -y gcc flex byacc libpcap ncurses ncurses-devel libpcap-devel tcpdump
--下载iftop
cd /usr/local/src
wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
--解压iftop
tar zxvf iftop-0.17.tar.gz
--编译安装iftop
cd iftop-0.17
./configure --prefix=/usr/local/iftop
make
make install
--赋予iftop权限
chmod 700 /usr/local/iftop/sbin/iftop
--使用
/usr/local/iftop/sbin/iftop
/usr/local/iftop/sbin/iftop -i eth0 -n 就可以看到eth0网卡的流量状况

(2)相关参数:

TX:发送流量
RX:接收流量
TOTAL:总流量
cumm:运行iftop以来的总流量
peak:峰值流量
rates:分别表示过去 2s 10s 40s时间内网卡总的平均流量
iftop常用参数摘录
-i设定监测的网卡,如:# iftop -i eth1-B 以bytes为单位显示流量(默认是bits),如:# iftop -B-n使host信息默认直接都显示IP,如:# iftop -n-N使端口信息默认直接都显示端口号,如: # iftop -N-F显示特定网段的进出流量,如# iftop -F 192.168.1.0/24或# iftop -F 192.168.1.0/255.255.255.0-h(display this message),帮助,显示参数信息-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;-b使流量图形条默认就显示;-f过滤计算包;-P使host信息及端口信息默认就都显示;-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

进入iftop画面后的一些操作命令(注意大小写)
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按q退出监控。

关于ab压测的点点

##################

kernel: nf_conntrack: falling back to vmalloc:https://blog.csdn.net/TN947/article/details/85415481

关于连接跟踪的相关介绍:https://blog.csdn.net/u010472499/article/details/78292811

单机百万:https://blog.csdn.net/lijinqi1987/article/details/74545851

基于Locust、Tsung的百万并发秒杀压测案例[转] https://www.cnblogs.com/walter-chen/p/5485383.html

###########################

问题1:默认20000连接如何修改

https://blog.51cto.com/zhizhimao/2347849?source=dra   https://blog.51cto.com/lsxme/2048003  

apr-util致命错误:expat.h:没有那个文件或目录  https://blog.csdn.net/dn1115680109/article/details/80847924

源码编译安装:分别下载Apache httpd,apr,apr-util,pcre

http://httpd.apache.org/download.cgi

http://apr.apache.org/download.cgi

http://www.pcre.org/ https://ftp.pcre.org/pub/pcre/

2.安装:

把文件上传到服务器上:
--安装组件
tra   -zxvf httpd-2.4.38.tar.gz
tar -zxvf apr-1.6.5.tar.gz
cp -r apr-1.6.5 httpd-2.4.38/srclib/apr
cd apr-1.6.5
./configure --prefix=/usr/local/apr
make && make install
tar -zxvf apr-util-1.6.1.tar.gz
cp -r apr-util-1.6.1 httpd-2.4.38/srclib/apr-util
cd apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
tar -zxvf pcre-8.43.tar.gz
cd pcre-8.43
./configure --prefix=/usr/local/pcre --with-apr=/usr/local/apr
make && make install


--安装httpd:
cd httpd-2.4.38
./configure --with-included-apr --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-so --enable-mods-shared=most
make && make install

3.遇到问题:

(1)编译apr-util报错“致命错误:expat.h:没有那个文件或目录”

问题:缺少 expat库
解决方法 :yum install -y  expat-devel

(2)httpd make报错:collect2: error: ld returned 1 exit status

执行这两条命令的目的就是为了避免这个报错;
cp -r apr-1.6.5 httpd-2.4.38/srclib/apr
cp -r apr-util-1.6.1 httpd-2.4.38/srclib/apr-util

问题2:关于999893与999894之间相差55秒的有趣现象:

 

–第二次测试:999894

相关内容:关于高负载服务器Kernel的TCP参数优化https://www.cnblogs.com/94cool/p/5631905.html

net.ipv4.tcp_mem
内核分配给TCP连接的内存,单位是Page,1 Page = 4096 Bytes,可用命令查看:
  #getconf PAGESIZE
  4096
  net.ipv4.tcp_mem = 196608       262144  393216
  第一个数字表示,当 tcp 使用的 page 少于 196608 时,kernel 不对其进行任何的干预
  第二个数字表示,当 tcp 使用了超过 262144 的 pages 时,kernel 会进入 “memory pressure” 压力模式
  第三个数字表示,当 tcp 使用的 pages 超过 393216 时(相当于1.6GB内存),就会报:Out of socket memory
  以上数值适用于4GB内存机器,对于8GB内存机器,建议用以下参数:
  net.ipv4.tcp_mem = 524288     699050  1048576  (TCP连接最多约使用4GB内存)16GB*4即为4194304
net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem
为每个TCP连接分配的读、写缓冲区内存大小,单位是Byte
  net.ipv4.tcp_rmem = 4096        8192    4194304
  net.ipv4.tcp_wmem = 4096        8192    4194304
  第一个数字表示,为TCP连接分配的最小内存
  第二个数字表示,为TCP连接分配的缺省内存
  第三个数字表示,为TCP连接分配的最大内存
  一般按照缺省值分配,上面的例子就是读写均为8KB,共16KB,  4.0GB TCP内存能容纳的连接数,约为  4000MB/16KB = 250K = 25万
net.ipv4.tcp_max_orphans
最大孤儿套接字(orphan sockets)数,单位是个
net.ipv4.tcp_max_orphans = 65536
表示最多65536个
注意:当cat /proc/net/sockstat看到的orphans数量达到net.ipv4.tcp_max_orphans的约一半时,就会报:Out of socket memory
对于net.ipv4.tcp_max_orphans = 65536,当orphans达到32768个时,会报Out of socket memory,此时占用内存 32K*64KB=2048MB=2GB
  (每个孤儿socket可占用多达64KB内存),实际可能小一些

net.ipv4.tcp_orphan_retries
孤儿socket废弃前重试的次数,重负载web服务器建议调小
  net.ipv4.tcp_orphan_retries = 1
  设置较小的数值,可以有效降低orphans的数量(net.ipv4.tcp_orphan_retries = 0并不是想像中的不重试)

net.ipv4.tcp_retries2
活动TCP连接重传次数,超过次数视为掉线,放弃连接。缺省值:15,建议设为 2或者3.

net.ipv4.tcp_synack_retries
TCP三次握手的syn/ack阶段,重试次数,缺省5,设为2-3
net.ipv4.tcp_fin_timeout = 30
FIN_WAIT状态的TCP连接的超时时间
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
TIME_WAIT状态的socket快速回收,循环使用
net.ipv4.tcp_max_syn_backlog = 4096
TCP连接SYN队列大小
net.core.netdev_max_backlog = 2048
网络设备的收发包的队列大小
net.ipv4.tcp_syncookies = 1
TCP SYN Cookies,防范DDOS攻击,防止SYN队列被占满

######其他############

1.epoll实现tcp百万级高并发测试源码:https://blog.csdn.net/u014220105/article/details/84849570

–百万并发配置记录:https://blog.csdn.net/max229max/article/details/87279330

–模拟百万tcp并发:https://blog.csdn.net/u011001084/article/details/54089182

epoll_SC.rar

2.lvs替代方案:https://blog.csdn.net/fgf00/article/details/80629295

3.lvs简单调优:

四,lvs简单调优
1,调整ipvs connection hash表的大小
IPVS connection hash table size,取值范围:[12,20]。该表用于记录每个进来的连接及路由去向的信息。连接的Hash表要容纳几百万个并发连接,任何一个报文到达都需要查找连接Hash表,Hash表是系统使用最频繁的部分。Hash表的查找复杂度为O(n/m),其中n为Hash表中对象的个数,m为Hash表的桶个数。当对象在Hash表中均匀分布和Hash表的桶个数与对象个数一样多时,Hash表的查找复杂度可以接近O(1)。
连接跟踪表中,每行称为一个hash bucket(hash桶),桶的个数是一个固定的值CONFIG_IP_VS_TAB_BITS,默认为12(2的12次方,4096)。这个值可以调整,该值的大小应该在 8 到 20 之间,详细的调整方法见后面。每一行都是一个链表结构,包含N列(即N条连接记录),这个N是无限的,N的数量决定了决定了查找的速度。
LVS的调优建议将hash table的值设置为不低于并发连接数。例如,并发连接数为200,Persistent时间为200S,那么hash桶的个数应设置为尽可能接近200x200=40000,2的15次方为32768就可以了。当ip_vs_conn_tab_bits=20 时,哈希表的的大小(条目)为 pow(2,20),即 1048576,对于64位系统,IPVS占用大概16M内存,可以通过demsg看到:IPVS: Connection hash table configured (size=1048576, memory=16384Kbytes)。对于现在的服务器来说,这样的内存占用不是问题。所以直接设置为20即可。
关于最大“连接数限制”:这里的hash桶的个数,并不是LVS最大连接数限制。LVS使用哈希链表解决“哈希冲突”,当连接数大于这个值时,必然会出现哈稀冲突,会(稍微)降低性能,但是并不对在功能上对LVS造成影响。
调整 ip_vs_conn_tab_bits的方法:
新版的linux kernel中的IPVS代码,允许调整 ip_vs_conn_bits 的值。而老kernel中的的IPVS代码则需要通过重新编译内核来进行调整。
在linux kernel发行版里,IPVS通常是以模块的形式编译的。
确认能否调整使用命令 modinfo -p ip_vs(查看 ip_vs 模块的参数),看有没有 conn_tab_bits 参数可用。假如可以用,那么说时可以调整,调整方法是加载时通过设置 conn_tab_bits参数:
在/etc/modprobe.d/目录下添加文件ip_vs.conf,内容为:
options ip_vs conn_tab_bits=20
查看
ipvsadm -l
如果显示IP Virtual Server version 1.2.1 (size=4096),则前面加的参数没有生效
modprobe -r ip_vs
modprobe ip_vs
重新查看
IP Virtual Server version 1.2.1 (size=1048576)
假如没有 conn_tab_bits 参数可用,则需要重新调整编译选项,重新编译。
Centos6.2,内核版本2.6.32-220.13.1.el6.x86_64,仍然不支持这个参数,只能自定义编译了。
另外,假如IPVS支持调整 ip_vs_conn_tab_bits,而又将IPVS集成进了内核,那么只能通过重启,向内核传递参数来调整了。在引导程序的 kernel 相关的配置行上,添加:ip_vs.conn_tab_bits=20 ,然后,重启。
或者重新编译内核。
2,linux系统参数优化
关闭网卡LRO和GRO
现在大多数网卡都具有LRO/GRO功能,即 网卡收包时将同一流的小包合并成大包 (tcpdump抓包可以看到>MTU 1500bytes的数据包)交给 内核协议栈;LVS内核模块在处理>MTU的数据包时,会丢弃;
因此,如果我们用LVS来传输大文件,很容易出现丢包,传输速度慢;
解决方法,关闭LRO/GRO功能,命令:
ethtool -k eth0 查看LRO/GRO当前是否打开
ethtool -K eth0 lro off 关闭GRO
ethtool -K eth0 gro off 关闭GRO
禁用ARP,增大backlog并发数
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.core.netdev_max_backlog = 500000  (在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目)
3,lvs自身配置
尽量避免sh算法
一些业务为了支持会话保持,选择SH调度算法,以实现 同一源ip的请求调度到同一台RS上;但 SH算法本省没有实现一致性hash,一旦一台RS down,,当前所有连接都会断掉;如果配置了inhibit_on_failure,那就更悲剧了,调度到该RS上的流量会一直损失;
实际线上使用时,如需 会话保持,建议配置 persistence_timeout参数,保证一段时间同一源ip的请求到同一RS上。
4,手动绑定linux系统网卡中断
lvs的并发过大,对网卡的利用很频繁,而对网卡的调优,也能增加lvs的效率。当前大多数系统网卡都是支持硬件多队列的,为了充分发挥多核的性能,需要手动将网卡中断(流量)分配到所有CPU核上去处理。默认情况下,网卡的所有的中断都是发送到一个默认的cpu上去处理的,而cpu中断需要等待时间,这样对于使用网卡频繁的服务,网卡性能就会成为瓶颈。
1,查看网卡中断:
# cat /proc/interrupts
2,绑定网卡中断到cpu
例如将中断52-59分别绑定到CPU0-7上:
[plain] view plaincopy
echo "1" > /proc/irq/52/smp_affinity  
echo "2" > /proc/irq/53/smp_affinity  
echo "4" > /proc/irq/54/smp_affinity  
echo "8" > /proc/irq/55/smp_affinity  
echo "10" > /proc/irq/56/smp_affinity  
echo "20" > /proc/irq/57/smp_affinity  
echo "40" > /proc/irq/58/smp_affinity  
echo "80" > /proc/irq/59/smp_affinity  
/proc/irq/${IRQ_NUM}/smp_affinity为中断号为IRQ_NUM的中断绑定的CPU核的情况。以十六进制表示,每一位代表一个CPU核。
        1(00000001)代表CPU0
        2(00000010)代表CPU1
        3(00000011)代表CPU0和CPU1
3,关闭系统自动中断平衡:
# service irqbalance stop
4,如果网卡硬件不支持多队列,那就采用google提供的软多队列RPS;
配置方法同硬中断绑定,例:
# echo 01 > /sys/class/net/eth0/queues/rx-0/rps_cpus
# echo  02 > /sys/class/net/eth0/queues/rx-1/rps_cpus

关于基督教的基本认知

1.关于基督:(希伯来语发音为弥赛亚)意思是“受膏者”,《圣经》中的耶稣就是基督,耶稣是耶和华神的儿子,出生于伯利恒 (巴勒斯坦中部),三十岁左右开始传道,三十三岁时在总督本丢彼拉多执政时受难、为了全人类的罪被钉死在十字架上,第三天复活、并向门徒显现四十天后升天,坐在全能天父的右边,他必要在世界穷尽的审判之日在光荣中降来,建立荣耀的天国,给「善」带来最后的胜利。耶稣这名是神所起的,以马内利是人所称的,意即神与我们同在。

2.关于右边:《圣经》中的“右边”,不是理性认识上的上下和左右,只用在神的权能上,代表权柄和荣耀。

3.关于“3”:“三”——属神的数字:
(1)“三位一体”,基督教最基本的教义(圣父、圣子、圣灵)。
(2)耶稣三十岁出来传道,传了三年。
(3)耶稣基督被钉十字架,埋葬;三日复活。
(4)犹大买耶稣的钱:三十块(三的倍数)。
(5)犹太人的宇宙观:天分三层,极高之处乃神的居所。
(6)圣经用“圣哉!圣哉!圣哉!”对神赞美。

4.关于12门徒:彼得、西庇太的儿子雅各和约翰、安得烈、腓力、巴罗多买、多马、马太、亚勒腓的儿子雅各、达太(又作雅各的儿子犹大)、奋瑞党的西门,马提亚、以及加略人犹大。以象征古以色列人十二支派来代表整个犹太民族。

5.关于新约和旧约:因为上帝与人类共进行了2次立约。第一次叫做旧约,是在耶稣降临以前,时间在公元前,内容是因律法称义。也就是,谁的行为符合神的律法,谁就是神眼中的义人,谁就可以得救。实际就是犹太教的信仰。第二次叫做新约,是在耶稣降临以后,时间在公元后,内容是因信称义。也就是,信耶稣的去天堂,不信耶稣的去地狱。实际就是基督宗教的信仰。

6.与基督教有关的节日:
(1)复活节:于每年春分月圆之后的第一个星期日。在古代教会,代表受洗的浸礼被安排在复活节这一天,象征着信仰者从死亡迈向新的生命,在当代西方国家,流行赠送复活节鸡蛋的习俗;复活节后的第50天,是圣灵降临节,又称五旬节。这个节日是为了纪念上帝将圣灵赐给信徒。在新约《圣经》中,上帝赐下圣灵是在耶稣基督不再以有形的方式向门徒显现之后,目的是让门徒记住耶稣基督的话语和工作。

(2)圣诞节是一个普世大众都非常熟悉的节日,它是每年的12月25日,12月24日晚则被称为平安夜。这是庆祝耶稣基督的诞生的节日,事实上,这一天原本与耶稣诞生的日期无关,圣诞节目前的日期是在公元4世纪的罗马被确定。