虚拟网卡性能压测

    本文主要介绍多种场景下,虚拟机网卡的压测及性能对比,根据openstack实际的部署方式,虚拟机网卡压测场景包括 SRIOV(passthrough)、SRIOV+Macvtap(passthrough)、Vlan+Linux bridge、OVS+Linux Bridge,分别从协议类型(TCP/UDP)、Message Size方向压测虚拟机网卡的时延、发包率、吞吐量。

压测环境

host1:  服务器型号:IBM x3550m2

              CPU型号:Intel(R) Xeon(R) CPU*8,每个CPU有4核,共32核

              内存大小:32GB

              硬盘大小:SAS 500G*2

              网卡:Intel 82576 Gigabit (Driver:igb)

 

host2:  服务器型号:IBM x3550m2

              CPU型号:Intel(R) Xeon(R) CPU*8,每个CPU有4核,共32核

              内存大小:32GB

              硬盘大小:SAS 500G*2

              网卡:Intel 82576 Gigabit (Drvier:igb)

 

vm1:   vcpu:1

             内存大小:1GB

             硬盘大小:sda : 40GB

             IP:  192.168.20.101/24 (Driver:igbvf/virtio_net)

虚拟机网卡压测

在开发环境下压测虚拟机网卡,连接宿主机的端口设置成Trunk,仅允许指定Vlan的数据通过,以至无法直接压测宿主机的物理网卡。为了保证压测正常进行,进出宿主机物理网卡的数据都打上tag(SRIOV指定VF的vlan,Linux bridge连接vlan子接口,OVS设置port的tag)。本次使用netperf工具压测,宿主机host1内创建虚拟机vm1,宿主机host2与vm1互发送数据进行压测,运行python脚本使虚拟机vm1的CPU状态接近饱满, 同时关闭host1、host2、vm1的iptables。

延时

虚机CPU处于非饱满状态下压测网卡延时,host1使用netperf 向 vm1发送数据(TCP/UDP),netperf 命令行:netperf -H 192.168.20.101 -t omni -- -d rr -T UDP -O "THROUGHPUT, THROUGHPUT_UNITS, MIN_LATENCY, MAX_LATENCY, MEAN_LATENCY"  ,如下图所示

压测结果发现同场景下虚拟网卡对不同Message Size的延时差别并不大(可能是因为宿主机直接连到同一台switch), 汇总多次延时的压测结果如下:

发包率

虚机CPU处于非饱满状态下压测网卡延时,host1启动150个netserver, vm1同时启动150个netperf进程向host1发数据,直达vm1的CPU饱满状态。运行netperf命令行:netperf -t TCP_RR  -H 192.168.20.101 -l 60 -p 12856 -- -r 64 64 (请求/应答报文为64Bytes), 汇总多次延时的压测结果如下:

 

吞吐量

原计划用工具netio压测吞吐量,netio压测吞吐量时vm1的CPU处于非饱满状态,最后选择netperf以多线程脚本向vm1打数据(发包率基础上计算对应Message size的吞吐量)。

 

注:

1.压测的虚机网卡driver是 virtio_net,与openstack创建的虚机保持一致,virtio_net的性能远高于配默认的8139cp。

2.pktgen工具不能压测SRIOV(ptkgen发包时不能绑定到VF,因为pktgen是从内核直接发包,会造成dst_mac的最后一个字节与VF生成的网卡关联,如VF对应eth5则dst_mac则会变为xx:xx:xx:xx:xx:e5)。

3.引起延时的因素比较多:本地主机与服务器路由跳数,网络带宽,处理带宽。netperf测延时的结果明显比ping的延时低。

 

 
后记

从上面的压测数据得出:

1.SRIOV性能高于其它场景

2.SRIOV+Macvtap性能高于Vlan+Linux bridge、OVS+Linux bridge

3.Vlan+Linux bridge性能高于OVS+Linux bridge

但是SRIOV也有局限性如特定型号网卡支持、千兆网卡只支持7个VF、不支持迁移。SRIOV+Macvtap可解决热迁移的问题,相对于Vlan+Linux bridge和OVS+Linux bridge有性能有提升,openstack用SRIOV+Macvtap解决SRIOV热迁移的BP还没有实现,Vlan+Linux bridge性能稍高于OVS+Linux bridge。对虚拟机网卡的性能要求特别高同时不考虑迁移,用SRIOV比较合适。对网络管理要求比较高(gre,vxlan),只能用OVS+Linux bridge。

压测工具

本次压测尝试了多个压测工具netperf、iperf、netio、pktgen,它们对比情况如下表:

 

参考链接:

    http://filwmm1314.blog.163.com/blog/static/2182591920130309833682/

    http://blog.163.com/hlz_2599/blog/static/142378474201341341339314/

    http://blog.youkuaiyun.com/kozazyh/article/details/4939694

    https://www.kernel.org/doc/Documentation/networking/pktgen.txt

    http://mp.weixin.qq.com/s?__biz=MzAxOTAzMDEwMA==&mid=402362721&idx=1&sn=4b729bd3678af519aeb174571bdc2d8e&scene=23&srcid=1202K1QgMANMuRjQLwqvZOoV#rd

 

转载于:https://www.cnblogs.com/gaozhengwei/p/7101269.html

<think>好的,我现在需要帮助用户解决在VMware中使用CentOS系统安装Redis 5.0版本,并分别以单例模式和集群模式启动的问题。首先,我需要回顾之前的对话历史,看看用户之前的问题是什么,以及之前的解答内容,以便更好地理解当前问题的上下文。 用户之前的问题是关于VMware中CentOS系统的网络连接问题,具体是VMnet1和VMnet8显示与主无连接,且客户的网络适配器不显示。之前的解答详细分析了可能的原因,并提供了解决方案步骤,包括检查服务、重置网络配置、启用虚拟网卡等。这说明用户在使用VMware和CentOS时遇到了网络配置的问题,现在用户可能已经解决了网络问题,转而进行Redis的安装和配置。 现在用户的问题转向在CentOS上安装Redis 5.0,并分别以单例和集群模式启动。用户可能是在搭建开发或试环境,需要Redis的不同运行模式。我需要确保提供的步骤准确且适合CentOS环境,特别是考虑到用户可能使用的是较旧的Redis版本(5.0),需要注意依赖和配置的兼容性。 首先,我需要确定Redis 5.0的安装方法。通常,安装Redis可以通过源码编译安装,因为CentOS的默认仓库可能不提供特定版本的Redis。用户可能需要从Redis官网下载源码,进行编译安装。需要确保系统安装了必要的构建工具,如gcc、make等,并且处理可能的依赖问题,比如可能需要的tcl包用于试。 接下来是单例模式的启动,这相对简单,安装后直接启动服务即可,但需要确保配置文件正确,比如绑定地址、守护进程模式等。然后是集群模式的配置,这需要更多的步骤,比如修改配置文件以启用集群,创建多个实例,以及使用redis-cli工具创建集群。需要注意的是,Redis 5.0的集群创建命令可能与新版本有所不同,需要确认正确的命令格式。 此外,用户是在环境中操作,可能需要考虑网络配置是否正确,确保集群节点之间可以互相通信。之前的网络问题是否会影响当前的集群配置?如果用户之前按照步骤解决了网络问题,现在应该没有问题,但可能需要确认防火墙设置,开放相应的端口(如6379和16379)。 另外,用户可能需要了解如何设置开自启动,以及如何管理服务,这部分可以通过创建systemd服务单元来实现,但需要根据CentOS的版本进行调整,比如CentOS 7及以上使用systemd,而旧版本可能使用init.d脚本。 在提供步骤时,需要详细说明每个命令的作用,避免用户执行时出现困惑。例如,在编译安装时,可能会遇到依赖缺失的问题,需要提示用户安装开发工具组。在配置集群时,需要生成多个配置文件,并启动多个实例,然后使用redis-cli的--cluster create命令,同时指定每个节点的IP和端口。 还需要注意权限问题,比如Redis默认以redis用户运行,需要创建该用户并设置目录权限。此外,SELinux和防火墙可能会阻止节点间的通信,需要指导用户如何临时关闭或配置规则。 最后,验证步骤也很重要,用户需要知道如何检查单例模式是否运行正常,以及集群是否成功建立,比如使用redis-cli连接并执行集群信息命令。 总结一下,我需要分步骤详细说明安装Redis 5.0的源码编译过程,单例模式的配置和启动,然后是如何配置集群模式,包括多实例的设置和集群的创建。同时,需要提示可能遇到的问题和解决方法,如依赖安装、防火墙设置、权限配置等,确保用户能够顺利执行所有步骤。---</think> ### **1. 准备工作** #### **1.1 安装依赖** ```bash # 更新系统并安装编译工具 sudo yum update -y sudo yum install -y gcc make tcl ``` #### **1.2 下载 Redis 5.0 源码** ```bash wget http://download.redis.io/releases/redis-5.0.14.tar.gz tar -zxvf redis-5.0.14.tar.gz cd redis-5.0.14 ``` --- ### **2. 单例模式安装与启动** #### **2.1 编译安装** ```bash # 编译源码(若报错需解决依赖,如升级 gcc) make sudo make install PREFIX=/usr/local/redis ``` #### **2.2 配置单例模式** ```bash # 创建配置目录和数据目录 sudo mkdir -p /etc/redis /var/lib/redis # 复制配置文件 sudo cp redis.conf /etc/redis/redis-single.conf # 修改配置文件 sudo vi /etc/redis/redis-single.conf ``` **关键配置项**: ```ini bind 0.0.0.0 # 允许远程访问 daemonize yes # 后台运行 dir /var/lib/redis # 数据存储目录 logfile "/var/log/redis.log" # 日志文件路径 ``` #### **2.3 启动单例 Redis** ```bash # 启动服务 redis-server /etc/redis/redis-single.conf # 验证是否运行 redis-cli ping # 返回 PONG 表示成功 ``` #### **2.4 设置开自启(可选)** ```bash # 创建 systemd 服务文件 sudo vi /etc/systemd/system/redis-single.service ``` **内容**: ```ini [Unit] Description=Redis Single Instance After=network.target [Service] Type=forking ExecStart=/usr/local/bin/redis-server /etc/redis/redis-single.conf ExecStop=/usr/local/bin/redis-cli shutdown Restart=always [Install] WantedBy=multi-user.target ``` ```bash # 启用服务 sudo systemctl daemon-reload sudo systemctl start redis-single sudo systemctl enable redis-single ``` --- ### **3. 集群模式安装与启动** #### **3.1 配置多个 Redis 实例** ```bash # 创建 3 主 3 从集群(需至少 6 个节点) for port in 7001 7002 7003 7004 7005 7006; do sudo mkdir -p /etc/redis/${port} sudo cp redis.conf /etc/redis/${port}/redis-${port}.conf done ``` **修改每个节点的配置文件**(以 7001 为例): ```ini bind 0.0.0.0 port 7001 daemonize yes cluster-enabled yes cluster-config-file nodes-7001.conf cluster-node-timeout 5000 dir /var/lib/redis/7001 logfile "/var/log/redis-7001.log" ``` #### **3.2 启动所有节点** ```bash for port in 7001 7002 7003 7004 7005 7006; do redis-server /etc/redis/${port}/redis-${port}.conf done ``` #### **3.3 创建 Redis 集群** ```bash # 使用 redis-cli 自动分配主从节点 redis-cli --cluster create \ 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 \ 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 \ --cluster-replicas 1 ``` - 输入 `yes` 确认节点分配。 #### **3.4 验证集群状态** ```bash # 连接任意节点 redis-cli -c -p 7001 # 查看集群信息 cluster info # 查看节点列表 cluster nodes ``` --- ### **4. 关键区别与注意事项** | **项目** | **单例模式** | **集群模式** | |---------| | **配置文件** | 单份配置文件(如 `redis-single.conf`) | 每个节点独立配置文件(如 `redis-7001.conf`) | | **数据分片** | 无 | 数据分片存储,自动分配槽位(16384 slots) | | **高可用性** | 单点故障 | 主从复制 + 故障自动切换 | | **性能** | 适合小规模场景 | 支持高并发、大数据量 | | **端口占用** | 默认 6379 | 每个节点独立端口(如 7001~7006) | #### **常见问题解决** 1. **集群节点无法通信**: - 检查防火墙是否开放端口(`7001-7006` 和 `17001-17006`)。 ```bash sudo firewall-cmd --permanent --add-port={7001-7006}/tcp sudo firewall-cmd --permanent --add-port={17001-17006}/tcp sudo firewall-cmd --reload ``` 2. **编译时报错**: - 升级 GCC 版本: ```bash sudo yum install -y centos-release-scl sudo yum install -y devtoolset-9-gcc scl enable devtoolset-9 bash ``` 3. **集群节点加入失败**: - 删除旧的集群配置文件和数据目录后重试: ```bash rm -rf /var/lib/redis/*/nodes*.conf ``` --- ### **5. 性能优化建议** 1. **单例模式**: - 启用持久化(`save` 或 `appendonly yes`)。 - 调整 `maxmemory` 限制内存使用。 2. **集群模式**: - 确保主从节点分布在不同的物理。 - 使用 `redis-benchmark` 调整 `cluster-node-timeout`。 --- ### **附:操作流程图** ``` 安装 Redis 5.0 ├─ 单例模式 │ ├─ 编译安装 → 配置 → 启动 → 验证 │ └─ 可选:systemd 管理 └─ 集群模式 ├─ 配置多节点 → 启动 → 创建集群 └─ 验证分片与高可用 ``` 按照以上步骤,即可在 CentOS 中部署 Redis 5.0 的单例和集群模式。若需外网访问集群,需确保网络设置为 **桥接模式** 或 **NAT 端口转发**。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值