|
菜鸟学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 < yTrue if x is less than y.
x yTrue if x is greater than y.
x >= yTrue if x is greater than or equal to y.
x == yTrue if x is equal to y.
x != yTrue if x is not equal to y.
x ~ yTrue if the string x matches the regexp denoted by y.
x !~ yTrue 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 |
|
|