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也可以看到。

阅读剩余
THE END