测试结论
- 性能对比:
物理机 : MacVlan : Iptables = 100 : 90 : 60
mcrouter
性能不理想或待调优(本章配角、不讨论)。
物理机
- 采用Docker镜像里相同配置
/etc/memcached.conf
:
-d
logfile /var/log/memcached.log
-m 64
-p 11211
-u memcache
-l 0.0.0.0
- 使用 memtier-benchmark 压测:
memtier-benchmark -s 192.168.11.164 -p 11211 -P memcache_text -c 100 -t 10
- 测试结果
497965 ops/sec
。
iptables
创建 Memcached 集群
docker pull docker-reg.higkoo.com/memcached
docker run --name memcached1 -d -p 10001:11211 docker-reg.higkoo.com/memcached:latest
docker inspect -f "{{.NetworkSettings.IPAddress}}" memcached1
docker run --name memcached2 -d -p 10002:11211 docker-reg.higkoo.com/memcached:latest
docker inspect -f "{{.NetworkSettings.IPAddress}}" memcached2
docker run --name mcrouter1 -d -p 10000:5000 docker-reg.higkoo.com/mcrouter:latest mcrouter --config-str='{"pools":{"A":{"servers":["10.10.2.1:11211","10.10.2.2:11211"]}},"route":"PoolRoute|A"}' -p 5000 --num-proxies=16
docker run docker-reg.higkoo.com/mcrouter:latest mcrouter --help
iptables -t nat -nL
查看防火墙规则
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.10.2.0/24 0.0.0.0/0
MASQUERADE tcp -- 10.10.2.1 10.10.2.1 tcp dpt:11211
MASQUERADE tcp -- 10.10.2.2 10.10.2.2 tcp dpt:11211
MASQUERADE tcp -- 10.10.2.3 10.10.2.3 tcp dpt:5000
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10001 to:10.10.2.1:11211
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10002 to:10.10.2.2:11211
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10000 to:10.10.2.3:5000
测试各组件性能
memtier-benchmark -s 192.168.22.33 -p 10001 -P memcache_text -c 100 -t 10
memcached1 = 277007 ops/sec
memcached2 = 296154 ops/sec
mcrouter1 = 308023 ops/sec
macvlan
创建 Memcached 集群
docker network create -d macvlan --subnet 192.168.33.0/24 --gateway 172.19.22.1 -o parent=br1033 docker-mac
docker run -d --net=docker-mac --ip=192.168.33.231 --name memcache3 docker-reg.higkoo.com/memcached
docker run -d --net=docker-mac --ip=192.168.33.232 --name memcache4 docker-reg.higkoo.com/memcached
docker run -d --net=docker-mac --ip=192.168.33.230 --name mcrouter2 docker-reg.higkoo.com/mcrouter:latest mcrouter --config-str='{"pools":{"A":{"servers":["192.138.33.231:11211","192.168.33.232:11211"]}},"route":"PoolRoute|A"}' -p 10003 --num-proxies=16
测试各组件性能
memtier-benchmark -s 192.168.33.230 -p 10003 -P memcache_text -c 100 -t 10
memcached1 = 464670 ops/sec
memcached2 = 429096 ops/sec
mcrouter1 = 393486 ops/sec
host
方式不仅性能接近物理机,易管理性也类似物理机 ;>overlay
功能非常强大、性能弱到掉渣,本轮测试没用它。因为之前测试时,加压能把物理机打挂(内存耗尽)。macvlan
是性能和易用性折衷的不错选择,推荐!
测试环境
- 测试机和服务器同配置,在相同的万兆交换下。
- 系统信息:
Linux docker-svr-01 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u3 (2015-08-04) x86_64 GNU/Linux
Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz * 2
MemTotal: 32966476 kB
System Information
Manufacturer: Dell Inc.
Product Name: PowerEdge M620
Version: Not Specified
Serial Number: 2L82233
UUID: 1C2C3C4C-223C-3818-8658-B2C04F422233
Wake-up Type: Power Switch
SKU Number: SKU=NotProvided;ModelName=PowerEdge M620
Family: Not Specified
- 本次测试过程中
iptables
简单调优如下:
ipt_hsize=$(grep 'MemTotal' /proc/meminfo | awk '{printf("%d",$2/16)}')
echo "${ipt_hsize}" > /sys/module/nf_conntrack/parameters/hashsize
echo "${ipt_hsize}" > /sys/module/nf_conntrack_ipv4/parameters/hashsize
echo "options nf_conntrack hashsize=${ipt_hsize}" > ${ipt_mod_conf} # /sys/module/nf_conntrack/parameters/hashsize
sysctl -e -w net.nf_conntrack_max=4194304
sysctl -e -w net.ipv4.netfilter.ip_conntrack_max=4194304
sysctl -e -w net.netfilter.nf_conntrack_max=4194304
sysctl -e -w net.netfilter.nf_conntrack_tcp_timeout_established=1200
sysctl -e -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
sysctl -e -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120
sysctl -e -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=120