菜鸟学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

相关文章
|
1月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
130 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
1月前
|
Linux Perl
Linux awk命令使用技巧
【10月更文挑战第16天】Linux awk命令使用技巧
30 4
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
90 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
存储 安全 Linux
Linux文件管理命令md5sum awk
通过结合 `md5sum`和 `awk`,不仅可以高效地进行文件完整性校验,还能灵活地处理和分析校验结果,为系统管理、数据审计等工作提供强大的支持。
60 2
|
1月前
|
Linux 网络安全
Linux虚拟机与主机和Xshell的连接问题解决
Linux虚拟机与主机和Xshell的连接问题解决
80 1
|
2月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
74 2
|
2月前
|
Unix Linux 网络安全
python中连接linux好用的模块paramiko(附带案例)
该文章详细介绍了如何使用Python的Paramiko模块来连接Linux服务器,包括安装配置及通过密码或密钥进行身份验证的示例。
97 1
|
1月前
|
关系型数据库 MySQL Linux
Navicat 连接 Windows、Linux系统下的MySQL 各种错误,修改密码。
使用Navicat连接Windows和Linux系统下的MySQL时可能遇到的四种错误及其解决方法,包括错误代码2003、1045和2013,以及如何修改MySQL密码。
220 0
|
2月前
|
Linux Python
Linux之centos安装clinkhouse以及python如何连接
Linux之centos安装clinkhouse以及python如何连接
|
3月前
|
Linux 网络安全 网络架构
如何处理在学校Linux连接不上服务器
如何处理在学校Linux连接不上服务器
下一篇
无影云桌面