centos ra 1(centos 8)
大家好,关于centos ra 1很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于centos 8的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
如何生成每秒百万级别的 http 请求
在进行负责测试时要牢记一件重要的事:你能在 Linux上建立多少个 socket连接。这个**是硬编码在内核里的,最典型的就是临时 W端口的**。(在某种程度上)你可以在/etc/sysctl.conf里扩展它。但是基本上,一台 Linux机器只能同时打开大约 64,000个 socket。因此在负载测试时,我们不得不通过在单一的连接上尽可能多地发出请求来充分利用 socket。除此之外,我们还需要不止一台的机器来产生负载。否则,负载生成器会把可用的 socket占用导致不能产生足够的负载。
我一开始用的是‘ab’,Apache Bench。它是我所知道的 http基准测试工具中最简单、最通用的。并且它是 Apache附带的产品,因此它可能已经存在于你的系统中。不幸的是,我在使用它的时候每秒大约只能生成 900个请求。虽然我见过其他人使用它每秒能达到 2,000个请求,但我可以立即告诉你,‘ab’并不适合我们的基准测试。
Httperf
接着,我尝试了‘httperf’。这个工具更强大,但是它依然相对简单并且功能有限。要算出每秒生产了多少个请求并不是仅传递参数那么简单。经过我的多次尝试,获取了每秒超过几百请求的结果。例如:
它以每秒 1,000个的速率创建了 100,000个会话(session)。每次会话发起 5次请求,时间间隔为 2秒。
httperf--hog--server=192.168.122.10--wsess=100000,5,2--rate 1000--timeout 5
Total: connections 117557 requests 219121 replies 116697 test-duration 111.423 s
Connection rate: 1055.0 conn/s(0.9 ms/conn,<=1022 concurrent connections)
Connection time [ms]: min 0.3 avg 865.9 max 7912.5 median 459.5 stddev 993.1
Connection time [ms]: connect 31.1
Connection length [replies/conn]: 1.000
Request rate: 1966.6 req/s(0.5 ms/req)
Request size [B]: 91.0
Reply rate [replies/s]: min 59.4 avg 1060.3 max 1639.7 stddev 475.2(22 samples)
Reply time [ms]: response 56.3 transfer 0.0
Reply size [B]: header 267.0 content 18.0 footer 0.0(total 285.0)
Reply status: 1xx=0 2xx=116697 3xx=0 4xx=0 5xx=0
CPU time [s]: user 9.68 system 101.72(user 8.7% system 91.3% total 100.0%)
Net I/O: 467.5 KB/s(3.8*10^6 bps)
最终,我使用这些设置达到了每秒 6,622个连接:
httperf--hog--server 192.168.122.10--num-conn 100000--ra 20000--timeout 5
(总共创建了 100,000个连接,并且以每秒 20,000个连接的固定速率创建)
它还有一些潜在的优势,并且拥有比‘ab‘更多的特性。但它不是我要用在这个项目里的重量级工具。我需要的是能够支持分布式多负载测试节点的工具。因此,我的下一个尝试是:Jmeter。
Apache Jmeter
这是一个功能齐全的 web应用测试套件,它可以模拟真实用户的所有行为。你可以使用 Jmeter的代理去访问你的网站,进行点击、登陆、模仿用户可以做的所有行为。Jemeter会把这些行为记录下来作为测试用例。然后 Jmeter会反复执行这些动作来模拟你想要的用户数量。尽管配置 Jmeter比‘ab‘和’httperf‘复杂得多,但它是一个很有趣的工具!
根据我的测试,它每秒可以产生 14,000个请求!这绝对是一个好的进展。
我使用了 Googlle Code project上的一些插件,并且使用它们的“Stepping Threads”和“HTTP RAW”请求,最终每秒大约可以产生 30,000个请求!但这已经达到极限了,所以还要寻找另一个工具。这里有一个我之前的 Jmeter配置,希望可以帮助到其他人。虽然这个配置离完美相差甚远,但有时它可以满足你的要求。
Tsung:重型的(heavy-duty)、分布式的、多协议测试工具
它每秒基本可以产生 40,000个请求,这绝对是我们想要的工具。类似于 Jmeter,你可以把一些行为记录下来在测试时运行,并且可以测试大多数的协议。比如 SSL、HHTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP和 Jabber/XMPP。与 Jmeter不同的是,它没有让人感到迷茫的 GUI设置,它仅有一个 XML配置文件,和一些你选择的分布式节点的 SSH密钥。它的简洁和效率对我的吸引力,完全不亚于它的健壮性和可扩展性。我发现它是一个很强大的工具,在正确的配置下它可以每秒产生百万级的 HTTP请求。
除此之外,Tsung还可以在 html上产生图表以及输入你的测试的详细报告。测试的结果通俗易懂,并且你甚至可以把这些图片展示给你的 boss看!
在这个系列文章的剩余部分,我还会讲解这个工具。现在你可以继续浏览下面的配置说明,或者直接跳到下一页。
在 CentOS 6.2上安装 Tsung
首先,你要安装(Erlang需要的) EPEL源。因此,在进行下一步之前要把它安装好。安装完后,继续安装你用来产生负载的每个节点需要的包。如果你还没有在节点之间建立无密码 SSH密钥(passwordless SSH key),那么请建立之。
yum-y install erlang perl perl-RRD-**.noarch perl-Log-Log4perl-RRDs.noarch gnuplot perl-Template-Toolkit firefox
从 Github或者 Tsung的官网上下载最新的 Tsung。
wget
解压并且编译。
tar zxfv tsung-1.4.2.tar.gz
cd tsung-1.4.2
./configure&& make&& make install
把示例配置复制到~/.tsung目录里。这是 Tsung的配置文件和日志文件的存放地方。
cp/usr/share/doc/tsung/examples/http_**.xml/root/.tsung/tsung.xml
你可以根据你的需求去编辑这个配置文件,或者使用我的配置文件。经过大量的尝试以及失败后,我目前的配置文件在使用 7个分布式节点时可以每秒产生 5百万个 HTTP请求。
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM"/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
<clients>
<client host="localhost" weight="1" cpu="10" maxusers="40000">
<ip value="192.168.122.2"/>
</client>
<client host="loadnode1" weight="1" cpu="9" maxusers="40000">
<ip value="192.168.122.2"/>
</client>
<client host="loadnode2" weight="1" maxusers="40000" cpu="8">
<ip value="192.168.122.3"/>
</client>
<client host="loadnode3" weight="1" maxusers="40000" cpu="9">
<ip value="192.168.122.21"/>
</client>
<client host="loadnode4" weight="1" maxusers="40000" cpu="9">
<ip value="192.168.122.11"/>
</client>
<client host="loadnode5" weight="1" maxusers="40000" cpu="9">
<ip value="192.168.122.12"/>
</client>
<client host="loadnode6" weight="1" maxusers="40000" cpu="9">
<ip value="192.168.122.13"/>
</client>
<client host="loadnode7" weight="1" maxusers="40000" cpu="9">
<ip value="192.168.122.14"/>
</client>
</clients>
<servers>
<server host="192.168.122.10" port="80" type="tcp"/>
</servers>
<load>
<arrivalphase phase="1" duration="10" unit="minute">
<users maxnumber="15000" arrivalrate="8" unit="second"/>
</arrivalphase>
<arrivalphase phase="2" duration="10" unit="minute">
<users maxnumber="15000" arrivalrate="8" unit="second"/>
</arrivalphase>
<arrivalphase phase="3" duration="30" unit="minute">
<users maxnumber="20000" arrivalrate="3" unit="second"/>
</arrivalphase>
</load>
<sessions>
<session probability="100" name="ab" type="ts_http">
<for from="1" to="10000000" var="i">
<request><http url="/test.txt" method="GET" version="1.1"/></request>
</for>
</session>
</sessions>
</tsung>
Centos系统 ip命令使用方法
[root@Linux~]# ip [option] [动作] [命令]
参数:
option:设定的参数,主要有:
-s:显示出该设备的统计数据(statistics),例如总接受封包数等;
动作:就是是可以针对哪些网络参数进行动作,包括有:
link:关于设备(device)的相关设定,包括 MTU, MAC地址等等
addr/address:关于额外的 IP设定,例如多 IP的实现等等;
route:与路由有关的相关设定
上面的语法我们可以知道, ip除了可以设定一些基本的网络参数之外,还能够进行额外的 IP设定,包括多 IP的实现,真是太完美了!下面我们就分三个部分(link, addr, route)来介绍这个 ip命令。
关于设备(device)的相关设定: ip link
ip link可以设定与设备(device)有关的相关设定,包括 MTU以及该网络设备的 MAC等等,当然也可以启动(up)或关闭(down)某个网络设备。整个语法是这样的:
[root@linux~]# ip [-s] link show==单纯的查阅该设备相关的信息
[root@linux~]# ip link set [device] [动作与参数]
参数:
show:仅显示出这个设备的相关内容,如果加上-s会显示更多统计数据;
set:可以开始设定项目, device指的是 eth0, eth1等等设备代号;
动作与参数:包括以下动作:
up|down:启动(up)或关闭(down)某个设备,其他参数使用预设的以太网参数;
address:如果这个设备可以更改 MAC,用这个参数修改;
name:给予这个设备一个特殊的名字;
mtu:设置最大传输单元。
范例一:显示出所有的设备信息
[root@linux~]# ip link show
1: lo: LOOPBACK,UP,10000 mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: BROADCAST,MULTICAST,UP,10000 mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
3: sit0: NOARP mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
[root@linux~]# ip-s link show eth0
2: eth0: BROADCAST,MULTICAST,UP,10000 mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
484011792 2247372 0 0 0 0
TX: bytes packets errors dropped carrier collsns
2914104290 2867753 0 0 0 0
使用 ip link show可以显示出整个设备的硬件相关信息,如上所示,包括 MAC地址、MTU等等,比较有趣的应该是那个 sit0的设备了,那个 sit0的设备是将IPv4和 IPv6的封包进行转换,对于我们仅使用 IPv4的网络是没有作用的。 lo及 sit0都是主机内部自行设定的。而如果加上-s的参数后,则这个网卡的相关统计信息就会被列出来,包括接收(RX)及传送(TX)的封包数量等等,详细的内容与 ifconfig所输出的结果相同。
范例二:启动、关闭与设定设备的相关信息
[root@linux~]# ip link set eth0 up
#启动eth0这个设备;
[root@linux~]# ip link set eth0 down
#关闭eth0这个设备;
[root@linux~]# ip link set eth0 mtu 1000
#更改 MTU为1000 bytes,单位就是 bytes。
更新网卡的 MTU使用 ifconfig也可以实。如果是要更改『网卡代号、 MAC地址的信息』的话,那可就得使用 ip了,设定前需要先关闭该网卡,否则会不成功。如下所示:
范例三:修改网卡代号、MAC等参数
[root@linux~]# ip link set eth0 name vbird
SIOCSIFNAME: Device or resource busy
#因为该设备目前是启动的,所以不能这样做设定。你应该要这样做:
[root@linux~]# ip link set eth0 down==关闭设备
[root@linux~]# ip link set eth0 name vbird==重新设定
[root@linux~]# ip link show==查看信息
2. vbird: BROADCAST,MILTICASE mtu 900 qdisc pfifo_fast qlen 1000
link/ehter 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff
#呵呵,连网卡代号都可以改变!不过,玩玩后记得改回来啊!
#因为我们的 ifcfg-eth0还是使用原本的设备代号!避免有问题,要改回来
[root@linux~]# ip link set vbird name eth0==设备改回来
[root@linux~]# ip link set eth0 address aa:aa:aa:aa:aa:aa
[root@linux~]# ip link show eth0
#如果你的网卡支持MAC更改的话,
#那么上面这个命令就可以更改你的网卡MAC了!
#不过,还是那句老话,测试完之后请立刻改回来!
在这个设备的硬件相关信息设定,上面包括 MTU, MAC以及传输的模式等等,都可以在这里设定。有趣的是那个 address的项目,那个项目后面接的可是MAC地址而不是IP地址很容易搞错啊!切记切记!更多的硬件参数可以使用 man ip查阅一下与 ip link有关的设定。
关于额外的 IP相关设定: ip address
如果说 ip link是与 OSI七层模型的第二层数据链路层有关的话,那么 ip address(ip addr)就是与第三层网络层有关的了。主要是在设定与 IP有关的各项参数,包括 netmask, broadcast等等。
[root@linux~]# ip address show==查看IP参数
[root@linux~]# ip address [add|del] [IP参数] [dev?备名] [相关参数]
参数:
show:单纯的显示出设备的 IP信息;
add|del:进行相关参数的增加(add)或删除(del)设定,主要有:
IP参数:主要就是网域的设定,例如 192.168.100.100/24之类的设定;
dev:这个 IP参数所要设定的设备,例如 eth0, eth1等等;
相关参数:如下所示:
broadcast:设定广播位址,如果设定值是+表示让系统自动计算;
label:该设备的别名,例如eth0:0;
scope:这个设备的领域,通常是以下几个大类:
global:允许来自所有来源的连线;
site:仅支持IPv6,仅允许本主机的连接;
link:仅允许本设备自我连接;
host:仅允许本主机内部的连接;
所以当然是使用 global了。预设也是 global!
范例一:显示出所有设备的 IP参数:
[root@linux~]# ip address show
1: lo: LOOPBACK,UP,10000 mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: BROADCAST,MULTICAST,UP,10000 mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
inet6 fe80::250:fcff:fe22:9acb/64 scope link
valid_lft forever preferred_lft forever
3: sit0: NOARP mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
下面我们进一步来新增虚拟的网络设备:
范例二:新增一个设备,名称假设为 eth0:vbird
[root@linux~]# ip address add 192.168.50.50/24 broadcast+/
dev eth0 label eth0:vbird
[root@linux~]# ip address show eth0
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
inet 192.168.50.50/24 brd 192.168.50.255 scope global eth0:vbird
inet6 fe80::240:d0ff:fe13:c346/64 scope link
valid_lft forever preferred_lft forever
#看上面的输出多出了一行,增加了新的设备,名称是 eth0:vbird
#至于那个 broadcast+也可以写成 broadcast 192.168.50.255。
[root@linux~]# ifconfig
eth0:vbir Link encap:Ethernet HWaddr 00:40:D0:13:C3:46
inet addr:192.168.50.50 Bcast:192.168.50.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:5 Base address:0x3e00
#如果使用 ifconfig就能够看到这个怪东西了!
范例三:将刚刚的设备删除
[root@linux~]# ip address del 192.168.50.50/24 dev eth0
#删除比较简单。
--------------------------------------------------------------------------------
关于路由的设定: ip route
这个项目就是路由的查看与设定。事实上ip route的功能几乎与 route这个命令一样,但是,它还可以进行额外的参数设置,例如 MTU的规划等等,相当的强悍啊!
[root@linux~]# ip route show==单纯的显示出路由的设定
[root@linux~]# ip route [add|del] [IP或网域] [via gateway] [dev设备]
参数:
show:单纯的显示出路由表,也可以使用 list;
add|del:增加(add)或删除(del)路由;
IP或网域:可使用 192.168.50.0/24之类的网域或者是单纯的 IP;
via:从那个 gateway出去,不一定需要;
dev:由那个设备连出去,需要;
mtu:可以额外的设定 MTU的数值;
范例一:显示出目前的路由资料
[root@linux~]# ip route show
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2
169.254.0.0/16 dev eth1 scope link
default via 192.168.1.254 dev eth1
如上表所示,最简单的功能就是显示出目前的路由信息,其实跟 route这个命令相同。必须注意的几点:
proto:此路由的路由协定,主要有 redirect, kernel, boot, static, ra等,其中 kernel指的是直接由核心判断自动设定。
scope:路由的范围,主要是 link,是与本设备有关的直接连接。
再来看一下如何进行路由的增加与删除:
范例二:增加路由,主要是本机直接可沟通的网域
[root@linux~]# ip route add 192.168.5.0/24 dev eth0
#针对本机直接沟通的网域设定好路由,不需要透过外部的路由器
[root@linux~]# ip route show
192.168.5.0/24 dev eth0 scope link
....以下省略....
范例三:增加可以通往外部的路由,需透过 router;
[root@linux~]# ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0
[root@linux~]# ip route show
192.168.5.0/24 dev eth0 scope link
....其他省略....
192.168.10.0/24 via 192.168.5.100 dev eth0
#仔细,因为我有 192.168.5.0/24的路由存在(与我的网卡直接相关),
#所以才可以将 192.168.10.0/24的路由丢给 192.168.5.100
#那部主机来帮忙传递!与之前提到的 route命令是一样的限制!
范例四:增加预设路由
[root@linux~]# ip route add default via 192.168.1.2 dev eth0
#那个 192.168.1.2就是我的预设路由器(gateway);
#记住,只要一个预设路由就OK了;
范例五:删除路由
[root@linux~]# ip route del 192.168.10.0/24
[root@linux~]# ip route del 192.168.5.0/24
事实上,这个 ip的命令实在是太博大精深了!刚接触 Linux网络的朋友,可能会看到有点晕!您先会使用 ifconfig, ifup, ifdown与 route即可,等以后有经验了之后,再继续回来玩 ip这个好玩的命令吧!有兴趣的话,也可以自行参考 ethtool这个命令!
如何在CentOS6.5系统中安装Docker
开始安装docker之旅:
[root@localhost~]# uname-r
2.6.32-431.el6.x86_64
[root@localhost~]# cat/etc/issue
CentOS release 6.5(Final)
Kernel\r on an\m
注意其他的源可能导致你的内核和docker的版本不一致,需要升级内核至3.x。
安装:
[root@localhost~]# rpm-ivh raproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Retrievingg/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
warning:/var/tmp/rpm-tmp.JN76fI: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing.。。###########################################[100%]
1:epel-release###########################################[100%]
[root@localhost~]# rpm--import/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
[root@localhost~]# yum-y install docker-io
启动并设置开机自动启动
[root@localhost~]# service docker start
Starting cgconfig service:[确定]
Starting docker:[确定]
[root@localhost~]# chkconfig docker on
获取cnetos镜像
[root@localhost~]# docker pull centos:latest
centos:latest: The image you are pulling has been verified
511136ea3c5a: Pull complete
5b12ef8fd570: Pull complete
34943839435d: Downloading[===》] 18.38 MB/232.5 MB 1h7m49s
#官方安装方式docker pull imagename从docker的索引中心下载,imagename是镜像名称,例如docker pull Ubuntu就是下载base ubuntu并且tag是latest。
我们还可以搜索基于 Fedora和 Ubuntu操作系统的容器。
[root@localhost~]# docker search ubuntu
[root@localhost~]# docker search fedora
查看docker镜像
[root@localhost~]# docker images centos
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos latest 34943839435d Less than a second ago 224 MB
运行docker运行shell
[root@localhost~]# docker run-i-t centos/bin/bash
[root@2ce733141ece/]#
[root@2ce733141ece/]#
[root@2ce733141ece/]#
[root@2ce733141ece/]#
停止容器
[root@localhost~]# docker stop《CONTAINER ID》
删除所有容器
docker rm$(docker ps-a-q)
查看docker的子命令,直接敲docker或完整的docker help就可以
常用命令
总结一下常用命令:
其中《》阔起来的参数为必选,[]阔起来为可选
docker version查看docker的版本号,包括客户端、服务端、依赖的Go等
docker info查看系统(docker)层面信息,包括管理的images, containers数等
docker search在docker index中搜索image
docker pull从docker registry server中下拉image
docker push推送一个image或repository到registry
docker push:TAG同上,指定tag
docker inspect查看image或container的底层信息
docker images TODO filter out the intermediate image layers(intermediate image layers是什么)
docker images-a列出所有的images
docker ps默认显示正在运行中的container
docker ps-l显示最后一次创建的container,包括未运行的
docker ps-a显示所有的container,包括未运行的
docker logs查看container的日志,也就是执行命令的一些输出
docker rm删除一个或多个container
docker rm `docker ps-a-q`删除所有的container
docker ps-a-q| xargs docker rm同上,删除所有的container
docker rmi删除一个或多个image
docker start/stop/restart开启/停止/重启container
docker start-i启动一个container并进入交互模式
docker attach attach一个运行中的container
docker run使用image创建container并执行相应命令,然后停止
docker run-i-t/bin/bash使用image创建container并进入交互模式, login shell是/bin/bash
docker run-i-t-p将container的端口映射到宿主机的端口
docker commit[repo:tag]将一个container固化为一个新的image,后面的repo:tag可选
docker build
寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image
docker build-t repo[:tag]同上,可以指定repo和可选的tag
docker build-使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image
docker port查看本地哪个端口映射到container的指定端口,其实用docker ps也可以看到。