LVS配置
今天面试时,突然被面试官问到怎样用shell命令搞定某个文件夹下java代码行数的统计。
想了一下,基本思路就是找到这个文件夹下面的所有java文件,然后每个文件统计一下代码,外层套个for循环,叠加一下结果,就拿到想要的结果了。
不过显然面试官希望我用一句shell搞定,当场晕菜了,没搞定。回来想了一下,其实确实不是啥太难的问题。
最粗略版
- find . -name "*.java"|xargs wc -l|grep "total"|awk '{print $1}'
- find . -name "*.java"|xargs cat|wc -l #Output:37634
上面的两句效果一样,只不过第二种是先利用cat将多个java文件的内容合并输出了。然后再统计。
不过两个都有共同的毛病——连文件里面的空行都给统计进去算作一行了。
去除空行版
- find . -name "*.java"|xargs cat|grep -v ^$|wc -l #Output:36335
这个版本靠谱一些了,可以看到去掉空行之后的统计结果变为了:36335,比上个版本干掉了1299行的空行。。。
但是,java代码还有注释呢啊?!Fuck,还得干掉注释!
去除注释版
- # exclude the lines begin with //
- find . -name "*.java"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l #Output:36064
好,这个方法发现,以//开头的注释有36335-36064=271行。这里需要注意的是,注释行未必就以//作为开头,可能N个空格之后才开始的的//,所以匹配时需要加上上面的^\s*放在开头。
大功告成啦?扯淡!!!
java里面注释好几种风格,再给你看看这个非常常见的注释,还是会在统计结果里面
- /**
- * @author xxx 2012-6-15 下午3:19:47
- */
咋搞?这种注释我还真没想好怎么方便的除去,简单粗暴的方法但是可以在上面grep的参数里面再加入3个正则,分别去除以/**、*、*/开头的行。不过我自己想着都觉得挫。不知道有没有更好的办法了。
一、LVS简介
LVS是章文嵩博士发起和领导的优秀的集群解决方案,
许多商业的集群产品,比如RedHat的Piranha,TurboLinux公司的Turbo Cluster等,都是基于LVS的核心代码的。
在现实的应用中,LVS得到了大量的部署,请参考 http://www.linuxvirtualserver.org/deployment.html
关于Linux LVS的工作原理和更详细的信息,请参考 http://www.linuxvirtualserver.org。
二、配置实例
本例由两台物理服务器实现;
使用的服务包括有三种:
telnet;
WWW;
图片下载;
1. 网络拓扑结构
如图1所示:
VS1: 192.168.175.44
| |
RS1: 192.168.175.45 RS2: 192.168.175.46
三、服务器硬件配置
首先说明,虽然本文的测试环境中用的是2台相同配置的服务器,但LVS并不要求集群中的服务器规格划一,
相反,可以根据服务器的不同配置和负载情况,调整负载分配策略,充分利用集群环境中的每一台服务器。
这2台服务器中,rs1即是提供服务的服务器,也作为虚拟服务器(即负载平衡服务器),
负责将用户的访问请求转发到集群内部的rs1,rs2,然后由rs1,rs2分别处理。
client为客户端测试机器,可以为任意操作系统。
2台服务器的操作系统和网络配置分别为:
vs1: RedHat 4.1.2-54, Kernel 2.6.18-348.el5
vs1: eth0 192.168.0.1
vs1: eth0:101 192.168.175.44
rs1: Red Hat 4.1.2-54, Kernel 2.6.18-348.el5
rs1: eth0 192.168.175.45
rs1: dummy0 192.168.0.101
rs2: Red Hat 4.1.2-54, Kernel 2.6.18-348.el5
rs2: eth0 192.168.175.46
rs2: dummy0 192.168.0.101
client: Windows xp
client: eth0 10.2.9.99
其中,192.168.175.44是允许用户访问的IP。
四、LVS集群配置
1. 在配置之前,先检查内核是否打了LVS补丁:
如果你使用的是RedHat自带的内核或者从RedHat下载的内核版本,已经预先打好了LVS的补丁。
这可以通过查看
/usr/src/linux/net/目录下有没有几个ipvs开头的文件来判断:
如果有,则说明已经打过补丁。
查看内核中是否已经加载ip_vs模块
[root ~]# lsmod | grep ip_vs
查询内核版本(现在的版本一般都会满足)
[root ~]# uname -r
2.6.18-348.el5
创建链接,将内核模块做软连接至/usr/src/目录下, 并改名为/usr/src/linux/
这样做的好处是,在编译keepalived的时候可以直接找到内核文件,而不用指定内核路径,
如果不做此项操 作,则在编译时需指定内核路径
[root ~]# ln -s /usr/src/kernels/2.6.18-348.el5-x86_64/ /usr/src/linux
2. 对两台物理服务器对建立一个目录来下载文件并安装
[root ~]# mkdir /opt/lvs
[root ~]# cd /opt/lvs
下载 ipvsadm-1.24-8.1.x86_64.rpm 和 piranha-0.8.4-11.x86_64.rpm
到目录 /opt/lvs
[root lvs]# ls
ipvsadm-1.24-8.1.x86_64.rpm piranha-0.8.4-11.x86_64.rpm
安装这两个模块:
方式一: 用rpm模块安装
[root lvs]# rpm -ivh ipvsadm-1.24-8.1.x86_64.rpm
Preparing... ########################################### [100%]
1:ipvsadm ########################################### [100%]
[root lvs]# rpm -ivh piranha-0.8.4-11.x86_64.rpm
error: Failed dependencies:
php is needed by piranha-0.8.4-11.x86_64
[root lvs]# rpm -ivh --nodeps piranha-0.8.4-11.x86_64.rpm
Preparing... ########################################### [100%]
1:piranha ########################################### [100%]
方式二: 用yum安装
先检查下yum是否可用,如果可用,就用yum安装
[root lvs]# yum list
[root lvs]# yum -y install ipvsadm piranha
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
...
Total download size: 5.4 M
Downloading Packages:
(1/5): ipvsadm-1.24-13.el5.x86_64.rpm | 34 kB 00:00
(2/5): php-common-5.1.6-43.el5_10.x86_64.rpm | 155 kB 00:17
(3/5): piranha-0.8.4-25.el5_9.1.x86_64.rpm | 717 kB 00:01
(4/5): php-cli-5.1.6-43.el5_10.x86_64.rpm | 2.2 MB 00:00
(5/5): php-5.1.6-43.el5_10.x86_64.rpm | 2.4 MB 00:00
-------------------------------------------------------------------------------------
Total 46 kB/s | 5.4 MB 01:59
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : php-common 1/5
Installing : php-cli 2/5
Installing : php 3/5
Installing : ipvsadm 4/5
Installing : piranha 5/5
Installed:
ipvsadm.x86_64 0:1.24-13.el5 piranha.x86_64 0:0.8.4-25.el5_9.1
Dependency Installed:
php.x86_64 0:5.1.6-43.el5_10 php-cli.x86_64 0:5.1.6-43.el5_10 php-common.x86_64 0:5.1.6-43.el5_10
Complete!
3. 创建虚拟网口:
[root lvs]# cd /etc/sysconfig/network-scripts/
[root network-scripts]# vim ifcfg-lo\:0
DEVICE=lo:0
BOOTPROTO=static
IPADDR=192.168.175.44
NETMASK=255.255.255.255
ONBOOT=yes
ARP=no
【wq】
[root network-scripts]# service network restart
4. 修改系统默认配置:
[root ~]# vim /etc/sysctl.conf
【添加下列字段】
net.ipv4.tcp_max_syn_backlog = 20480
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.core.rmem_max = 16777216
net.core.rmem_default = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_tw_buckets = 1200000
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
kernel.panic = 5
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 2
【wq】
[root ~]# sysctl -p
5. 修改LVS的配置:
[root ~]# cd /etc/sysconfig/ha/
[root ha]# vim lvs.cf
serial_no = 39
primary = 192.168.175.45
service = lvs
backup_active = 1
backup = 192.168.175.46
heartbeat = 1
heartbeat_port = 539
keepalive = 3
deadtime = 9
network = direct
debug_level = NONE
monitor_links = 0
syncdaemon = 0
virtual XP {
active = 1
address = 192.168.175.44 eth0:1
vip_nmask = 255.255.255.0
port = 80
send = "GET / HTTP/1.0\r\n\r\n"
expect = "HTTP"
use_regex = 0
load_monitor = none
scheduler = wlc
protocol = tcp
timeout = 5
reentry = 5
quiesce_server = 0
server xp1 {
address = 192.168.175.45
active = 1
weight = 1
}
server xp2 {
address = 192.168.175.46
active = 1
weight = 1
}
}
【wq】
6. 在两台物理机上分别启动心跳服务:
[root ~]# service pulse start
Starting pulse: [ OK ]
这时,能在主物理机192.168.175.45上看到负载均衡网卡已启动,
而192.168.175.46上是没有这个网卡的:
[root ~]# ifconfig
eth0 Link encap:Ethernet
inet addr:192.168.175.45
...
eth0:1 Link encap:Ethernet HWaddr D4:3D:7E:70:8E:54
inet addr:192.168.175.44 Bcast:192.168.175.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Memory:df9a0000-df9c0000
当主物理机的服务关闭时,在192.168.175.46上看到网卡已启动:
[root ~]# ifconfig
eth0 Link encap:Ethernet HWaddr D4:3D:7E:70:8E:54
inet addr:192.168.175.46
...
eth0:1 Link encap:Ethernet HWaddr D4:3D:7E:70:8E:54
inet addr:192.168.175.44 Bcast:192.168.175.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Memory:df9a0000-df9c0000
7. 查看虚拟服务器状态:
[root ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.175.44:80 wlc
-> 192.168.175.46:80 Route 1 0 0
-> 192.168.175.45:80 Local 1 0 0
将服务设成开机自启动:
[root ~]# chkconfig --level 345 pulse on
三、LVS测试
查看nginx的访问日志:
[root logs]# tail -0f logs/access.log
如果两台机器的访问是交替的,就说明负载均衡生效了;
LVS配置的更多相关文章
- linux lvs 配置
redhatAS4.2 安装集群LVS 环境描述: 本文在配置LVS时使用三台linux,一台做Directorserver (192.168.0.25) ,两台做realserver(192.168 ...
- Rhel6-heartbeat+lvs配置文档
系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.119 server19.example.com 192.168.12 ...
- LVS配置与安装
IP和主机准备: 准备VIP :20.20.20.1 lvs主机 :172.24.22.70 HA主机:172.24.22.4 包准备:ipvsadm-1.24.tar.gz 1.安装前配置包 2. ...
- 学习笔记(2)——实验室集群LVS配置
查看管理结点mgt的网卡信息,为mgt设置VIP [root@mgt ~]# ifconfig eth0 Link encap:Ethernet HWaddr 5C:F3:FC:E9:: inet a ...
- linux中级之lvs配置(命令)
一.nat模式配置 环境说明: DS:nat网卡(自动获取也可以,充当vip): 192.168.254.13 255.255.255.0 vmnet3网卡(仅主机): 172.16.100.1 25 ...
- LVS配置记录
目录: 一.NAT模式配置 二.DR模式配置 三.TUN模式配置 LVS原理及架构不再赘述. 一.NAT模式 部署环境 注意: 1) DIP.RIP必须为同网段: 2) RS网关必须指向DS: 3) ...
- Rhel6-keepalived+lvs配置文档
系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.119 server19.example.com 192.168.12 ...
- 负载均衡集群之LVS配置命令
ipvs/ipvsadm 添加集群服务--> ipvsadm -A|E -t|u|f VIP[:Port] -s scheduler [-p timeout] [-O] [-M netmask] ...
- 虚拟机中Lvs配置
参考:http://zh.linuxvirtualserver.org/node/272 环境,三台centos 5.2.基于ipvsadm的负载均衡,采用DR方式,负载均衡的服务是web. 内核版本 ...
随机推荐
- O044、一张图秒懂 Nova 16种操作
参考https://www.cnblogs.com/CloudMan6/p/5565757.html
- Hive的日志操作
想要看hive的日志,我们查看/home/hadoop/hive/conf/hive-log4j2.properties # list of properties property.hive.log. ...
- hadoop 中ALL Applications 中Tracking 下History查找不到MapReduce Job 日志
运行一个Map Reduce job 想查看日志: 点击History ,找不到网页 解决办法如下: 1.其中有一个进程是需要启动的: Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行 ...
- zabbix监控项截图整理
general监控项
- JAVA 从打包成jar到导入到IntelliJ IDEA使用
一. 使用常用命令打包: jar -cvf 目标jar包名称 待打包路径 例:jar -cvf myjar.jar com/dn/Demo 二. 打开IntelliJ IDEA (2017.2版本) ...
- BZOJ 1005 prufer序列
给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? 第一行为N(0 < N < = 1000),接下来N行,第i+1行给出第i个节点的度数Di ...
- Maven编译
多模块 只有需要编译成jar的模块才设置build <build> <plugins> <plugin> <groupId>org.springfram ...
- springcloud实践(一)服务发现:Eureka
Eureka 入门 是什么? Eureka 是 Netflix 开源的一个 RESTful服务,主要用于服务注册与发现. 它由Eureka server 和Eureka client组成. Eurek ...
- Acwing-167-木棒(搜索, 剪枝)
链接: https://www.acwing.com/problem/content/169/ 题意: 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位. 然后他又 ...
- react创建项目后运行npm run eject命令将配置文件暴露出来时报错解决方法
最近在用create-react-app创建项目,因要配置各种组件,比如babel,antd等, 需要运行npm run eject命令把项目的配置文件暴露出来,但是还是一如既然碰到报错,因为是在本地 ...