菜鸟学Linux 第084篇笔记 lvs持久连接和awk简单使用

简介:

菜鸟学Linux 第084篇笔记 lvs持久连接和awk简单使用




内容总览

lvs持久连接

awk, gawk 简单使用

awk变量

awk操作符

awk 模式和动作 pattern action

awk 数组 array





LVS持久连接

无论使用任何算法,LVS持久都能实现在一定时间内,将来自同一个客户端请求派发至

此前选定的RS。


持久连接模板(内存缓冲区)

每一个客户端 及分配给它的RS的映射关系


在基于ssl,需要用到持久连接

PPC 将来自于同一个客户端对同一个服务的请求,始终定向至此前选定的RS

持久端口连接

ipvsadm -A -t 192.168.11.122:80 -p 300


PCC 将来自于同一个客户端对所有端口的请求,始终定向至此前选定的RS, 

持久客户端连接  (把所有端口全部都定义为集群服务,一律向RS转发)

ipvsadm -A -t 192.168.11.122:0 -p 300


PNMPP 持久防火墙标记连接

作用是将pcc的功能再进行优化,pcc虽然可以持久客户端连接,但是会将所有的

port都会转给real server, 而PNMPP则可以限制其只有某些个端口进行转发


原理, 是使用iptables标记某些端口将这些端口标记为一个数字

   然后ipvsadm -f flag支持接收标记,所以当收到所标记的数值时就会将

   其调度到real server



For example, say we want to create one-hour persistent port affinity between

ports 80 and 443 on VIP 172.16.100.6 for real servers 172.16.100.7 and 172.16.100.8 :

/sbin/iptables -F -t mangle 

/sbin/iptables -A PREROUTING -i eth0 -t mangle -p tcp  -d 172.16.100.6 

--dport 80 -j MARK --set-mark 1 (此为一行命令)

/sbin/iptables -A PREROUTING -i eth0 -t mangle -p tcp  -d 172.16.100.6

--dport 443 -j MARK --set-mark 1 (此为一行命令)

/sbin/ipvsadm -A -f  1 -s rr -p 3600 

/sbin/ipvsadm -a -f  1 -r 172.16.100.7 -m 

/sbin/ipvsadm -a -f  1 -r 172.16.100.8 -m 



配置持久连接

ipvsadm -A|E ... -p timeout

timeout: 持久连接时长,默认300秒,单位是秒



rsync server (inotify+rsync server)  

更新速度比较慢,尤其文件比较大时,再用此种方式不太合适


金山开发的工具 sersync 基于C++开发的

支持并发多线程复制,执行性能非常好

可以接收inotify发来的信息

适用服务器比较多, 需要复制大文件的环境比较适用

    (自行研究并配置使其可工作)







grep  文本过虑器

grep 'pattern' input_file ...


sed 流编辑器 实现对文本编辑

sed 'COMMAND/pattern/' input_file...


awk 报告生成器

格式化以后,显示

nawk

gawk


# awk [options] 'script' file file2, ...

# awk [options] 'PATTERN { action }' file file2 ...




$0 表示一整行

$1, $2, $.... 表示切片的第N个



print 打印其后边所定义的变量或字符

printf 打印其后边所定义的变量或字符(有格式的输出)

printf format, item1,item2..


format格式以%开头,后跟一个字符,如下:

%c character显示字符的ASCII码

%d, %i 十进制整数

%e, %E 科学计数法显示数值

%f  显示浮点数

%g, %G 以科学计数法的格式或浮点数的格式显示数值

%s  显示字符串

%u  无符号整数

%%  显示%自身


修饰符

N 显示宽度(N要替换为数值)

- 左对齐

+ 显示数值符号


如 # awk -F: '{printf "%-15s%i\n",$1,$3}' /etc/passwd




awk变量

记录变量

OFS="#" output Filed Separater,定义输出分隔符为#

FS=":"  定义输入分隔符为:

awk -F: 也可以定义输入分隔符


数据变量

NR  the number of input records, 

awk已经处理过的行数,如果多个文件,行数会累加

FNR 与NR不同的是,FNR是记录已经被处理过的当前文件的行数

NF Number of field, 显示行共有的字段个数,注意数值会随着分隔符不同而变化


自定义变量

定义变量test并打印出该变量

# awk -v test="hello test" 'BEGIN{print test}'

第二种定义变量并打印方式

# awk 'BEGIN{test="hello test";print test}'




awk的操作符:

1.算术操作符:

-x: 负值

+x: 转换为数值;

x^y: 

x**y: 次方

x*y: 乘法

x/y:除法

x+y:

x-y:

x%y:


2.字符串操作符:

只有一个,而且不用写出来,用于实现字符串连接;


3.赋值操作符:

=

+=

-=

*=

/=

%=

^=

**=


++

--

需要注意的是,如果某模式为=号,此时使用/=/可能会有语法错误,应以/[=]/替代;


4.布尔值

awk中,任何非0值或非空字符串都为真,反之就为假;


5.比较操作符:

x < y True if x is less than y. 

x <= y True if x is less than or equal to y. 

x > y True if x is greater than y. 

x >= y True if x is greater than or equal to y. 

x == y True if x is equal to y. 

x != y True if x is not equal to y. 

x ~ y True if the string x matches the regexp denoted by y. 

x !~ y True if the string x does not match the regexp denoted by y. 


subscript in array   True if the array array has an element with 

  the subscript subscript.


6.表达式间的逻辑关系符:

&&

||


7.条件表达式:C语言的语法

selector?if-true-exp:if-false-exp


8.函数调用:

function_name (para1,para2)




awk的模式和action:

awk 'program' input-file1 input-file2 ...

其中的program为:

pattern { action }

pattern { action }

...


一、常见的模式类型:

1、Regexp: 正则表达式,格式为/regular expression/

如: # awk -F: '/^\(/sbin\)/{print $NF}' /etc/passwd


2、expresssion: 表达式,其值非0或为非空字符时满足条件,

如:$1 ~ /oot$/ 或 $1 == "root",用运算符~(匹配)和!~(不匹配)。

# awk -F: '$7~"bash$"{print $1,$7}' /etc/passwd

匹配$7里以bash结尾的行 并显示$1,$7


3、Ranges: 指定的匹配范围,格式为pat1,pat2

# awk -F: '"^r","^m"{print $1,$3,$7}' /etc/passwd

表示匹配从第一个pattern到pattern所匹配到的行 


4、BEGIN/END:特殊模式,仅在awk命令执行前运行一次或结束前运行一次

如# awk -F: '$3<500{printf "%-20s%-5i%-20s\n",$1,$3,$7}BEGIN

{print "User ID Shell"}END{print "this is end of file"}' /etc/passwd

在匹配开始时会打印User ID Shell 结束时会显示this is end of file

(这里仅做测试使用)


5、Empty(空模式):匹配任意输入行;


二、常见的Action

1、Expressions:

2、Control statements

3、Compound statements

4、Input statements

5、Output statements




三、Control Statements 控制语句:

(需要读懂并会写)

3.1 if-else

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


例子:

awk -F: '{if ($1=="root") print $1, "Admin"; 

else print $1, "Common User"}' /etc/passwd


awk -F: '{if ($1=="root") printf "%-15s: %s\n", $1,"Admin"; 

else printf "%-15s: %s\n", $1, "Common User"}' /etc/passwd


awk -F: -v sum=0 '{if ($3>=500) sum++}END{print sum}' /etc/passwd


3.2 while循环 是对一行的每一个字段做循环

语法: while (condition){statement1; statment2; ...}


awk -F: '{i=1;while (i<=3) {print $i;i++}}' /etc/passwd

awk -F: '{i=1;while (i<=NF) { if (length($i)>=4) {print $i}; i++ }}' /etc/passwd


3.3 do-while

语法: do {statement1, statement2, ...} while (condition)

awk -F: '{i=1;do {print $i;i++}while(i<=3)}' /etc/passwd


3.4 for

语法: for ( variable assignment; condition; iteration process) 

{ statement1, statement2, ...}

awk -F: '{for(i=1;i<=3;i++) print $i}' /etc/passwd

awk -F: '{for(i=1;i<=NF;i++) { if (length($i)>=4) {print $i}}}' /etc/passwd


for循环还可以用来遍历数组元素: 与C相同

语法: for (i in array) {statement1, statement2, ...}

awk -F: '$NF!~/^$/{BASH[$NF]++}END{for(A in BASH)

{printf "%15s:%i\n",A,BASH[A]}}' /etc/passwd


3.5 case (与C相同)

语法:switch (expression) { case VALUE or /REGEXP/: statement1, 

statement2,... default: statement1, ...}


3.6 break 和 continue

常用于循环或case语句中


3.7 next

提前结束对本行文本的处理,并接着处理下一行;

例如,下面的命令将显示其ID号为奇数的用户:


# awk -F: '{if($3%2==0) next;print $1,$3}' /etc/passwd






四、awk中使用数组

4.1数组


array[index-expression]


index-expression可以使用任意字符串;需要注意的是,如果某数据组元素事先不

存在,那么在引用其时,awk会自动创建此元素并初始化为空串;因此,要判断某数

据组中是否存在某元素,需要使用index in array的方式。


要遍历数组中的每一个元素,需要使用如下的特殊结构:

for (var in array) { statement1, ... }

其中,var用于引用数组下标,而不是元素值;


例子:

netstat -ant | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

每出现一被/^tcp/模式匹配到的行,数组S[$NF]就加1,

NF为当前匹配到的行的最后一个字段,此处用其值做为数组S的元素索引;


awk '{counts[$1]++}; END {for(url in counts) print counts[url], url}'

 /var/log/httpd/access_log(一行命令)

用法与上一个例子相同,用于统计某日志文件中IP地的访问量


4.2 删除数组变量

从关系数组中删除数组索引需要使用delete命令。使用格式为:


delete  array[index]

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1892941如需转载请自行联系原作者


Winthcloud

相关文章
|
4天前
|
Linux
Linux(5)WIFI/BT调试笔记
Linux(5)WIFI/BT调试笔记
21 0
|
5天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
19天前
|
Linux Perl
Linux|从 STDIN 读取 Awk 输入
Linux|从 STDIN 读取 Awk 输入
20 4
|
1月前
|
Linux Perl
Linux技巧|Awk 比较运算符
在 Awk 中,使用比较运算符(如 &gt;, &lt;, ==, != 等)可方便地过滤文本和字符串。本文通过示例展示了如何处理食品购物清单,标记数量小于或等于 20 的商品。 Awk 语法 `expression { actions; }` 用于根据条件执行操作,如在满足条件的行末尾添加特殊标记。例如,`$3 &lt;= 20 { printf &quot;%s\t%s\n&quot;, $0,&quot;TRUE&quot; ; }` 会在数量小于或等于 20 的行后添加 &quot;TRUE&quot;。继续探索 Awk 的比较运算符以进行更复杂的文本处理。
25 2
|
1天前
|
存储 Linux Shell
Linux|Awk 变量、数字表达式和赋值运算符
Linux|Awk 变量、数字表达式和赋值运算符
6 2
|
3天前
|
监控 Linux 网络安全
Linux服务器如何查询连接服务器的IP
【4月更文挑战第15天】Linux服务器如何查询连接服务器的IP
9 1
|
3天前
|
运维 网络协议 Linux
Linux(28) Linux双网卡配置为连接到Linux主机的PC提供外网访问
Linux(28) Linux双网卡配置为连接到Linux主机的PC提供外网访问
31 1
|
4天前
|
Linux Android开发
Linux(6)CH9434 SPI调试笔记
Linux(6)CH9434 SPI调试笔记
13 0
|
7天前
|
网络协议 安全 Linux
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
|
21天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
37 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境