chunjihong 发表于 2019-1-6 08:37:39

LVS的持久连接和awk/sed/grep的学习笔记

  一、LVS持久连接的模式

  1、PPC(persistent port connection)

  ipvsadm -A|E 192.168.10.1:80 -p 600
  定义VIP为192.168.10.1director的80端口为持久连接,也就是只把web服务加入集群服务,可以通过改变端口实现不同服务的持久连接且把不同服务加入集群服务

  

  2、PCC(persistent client connection)

  ipvsadm -A|E 192.168.10.1:0 -p 600

  定义VIP为192.168.10.1 director的所有端口为持久连接,也就是把该VIP上的所有服务加入集群服务

  

  3、PNMPP
  # iptables -t mangle -A PREROUTING -d $VIP -p tcp --dport $ClusterPORT -i $INCARD -j MARK --set-mark 10
  ipvsadm -A --f 10 -s rr

  通过iptables给不同服务做MARK标记,把不同服务定义为同一组,这样再通过ipvsadm的-f选项来实现对同一组服务的持久连接,且把它们加入集群服务

  

  二、AWK的学习笔记
  

  awk是通过对目标文件进行处理,处理完了之后输出报告。对文件的处理过程是以行为单位的,即逐行处理,然后对每行的字段进行分割,通过模式匹配后进行处理最后形成报告。

  

  1、AWK命令格式

  awk 'script' file1 file2, ...
  awk 'pattern { action }' file1 file2, ...
  

  2、

  -F : 用来指定分隔符,awk默认是以空格为字段分割符的,cut默认是以tab为字段分割符的

  cut -d'' -f1 -d 指定分隔符 -f选择分割后的字段

  -v : 用来自定义变量

  awk -v a="hai lang" 'BEGIN{printf a}

  注:变量引用不需要$

  也可以通过BEGIN{}语句实现自定义变量
  awk 'BEGIN{a="hai lang" ; printf a}'

  注:语句之间需要用";"隔开

  

  3、awk中的内置变量

  FS(filed separator)    它是用来对读取文本,所使用的字段分隔符

  RS(record separator)    它是用来对读取文本,所使用的行分隔符

  OFS(outfile filed separator)   它是用来对,进过处理后的文本,输出字段分隔符
  ORS(outfile row separator)   它是用来对,进行处理后的文本,输出行分隔符

  

  NR(number of record) awk会对多个文件进行处理,而NR显示目前处理的行号(统计所有文
  件的行号,该行号即是相对于所有文件的行号)

  NF(number of filed)    通过NF可以显示当前行的总字段数,$NF显示最后一个字段

  FNR   awk会对多个文件处理,但是FNR只显示,当前正在处理的文件的行号

  4、print和printf

  它们都是输出函数,都要匹配一定的格式,print默认换行的

  %s 以字符串格式输出

  %d 以整形格式输出

  %f 以浮点型格式输出

  N确定输出字符的长度

  -左对齐输出

  '{printf"%-15s %d\n",$1,$3}'

  $1以字符串的格式输出,共输出15个字符串,且是左对齐,不足的字符以空代替,多的不显示

  $3以整型输出

  $1和$3以enter作为分行符   

  

  5、   

  pattern用来匹配在文本中的内容,也就是进行过滤合适的文本
  

  1、Regexp: 正则表达式,格式为/regular expression/
  2、expresssion: 表达式,其值非0或为非空字符时满足条件
  x < y| xy|x >= y |   x == y|x != y | x ~ y |   x !~ y
  3、Ranges: 指定的匹配范围,格式为pat1,pat2
  4、BEGIN/END:特殊模式,仅在awk命令执行前运行一次或结束前运行一次
  通过正则表达式,字符运算符,数字运算符,布尔运算符等,进行模式匹配达到过滤的效果,最后对匹配到的结果进行处理。

  

  6、

  对匹配到的文本,进一步采取的操作
  

  ------------------
  if-else
  -----------------
  语法:if (condition) {then-body} else {[ else-body ]}
  

  awk -F: '{if ($1=="root") print $1, "Admin"; else print $1, "Common User"}' /etc/passwd
  先判断每行的第一个字段是不是root,如果是root则打印该行第一个字段,并且标记为admin

  如果不是root也打印该行第一个字段,并且标记为common user
  

  awk -F: '{if ($1=="root") printf "%-15s: %s\n", $1,"Admin"; else printf "%-15s: %s\n", $1, "Common User"}' /etc/passwd
  和上面一样只是改变了输出格式,如果只有一个if else可以不加{}
  

  awk -F: -v sum=0 '{if ($3>=500) sum++}END{print sum}' /etc/passwd
  判断每一行的第三个字段,如果大于等于500,就把sum变量加一,END是在处理完所有行,要退出之前
  执行打印sum的统计值
  

  ----------------
  while
  ----------------
  语法: while (condition){statement1; statment2; ...}
  awk -F: '{i=1;while (i
页: [1]
查看完整版本: LVS的持久连接和awk/sed/grep的学习笔记