启用Docker Engine API的远程访问端口

作者:Rui 发布时间:July 1, 2017 分类:Docker,CLOUD 浏览:1,527 No Comments

在Linux下安装的Docker,默认会将Docker Engine的服务绑定到Unix Sock(unix:///var/run/docker.sock),这种方式,只支持通过本地访问的形式,访问服务API,我们使用docker命令默认也是连接的本地Unix Sock。Docker也支持将服务绑定到TCP端口上,这样,就可以轻松通过远程访问的形式管理Docker。

切记: 如果开启面向公网的TCP端口时,一定要加密码认证,不然会有很多比特币病毒,利用该端口创建挖矿服务。说多了都是泪!

Ubuntu下Docker启动服务的方式
在Ubuntu下安装Docker,会在/lib/systemd/system/目录下生成docker service,编辑docker.service文件,我们就可以看到Docker Daemon启动的过程

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service
Wants=network-online.target
Requires=docker.socket

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

从该配置中,可以看到ExecStart=/usr/bin/dockerd -H fd:// ,Docker使用dockerd启动,并默认绑定到fd://,具体可参考官方文档:
https://docs.docker.com/engine/reference/commandline/dockerd/#examples
我们可以直接在该文件中修改启动参数,使其绑定tcp socket。具体配置如下:

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376

修改完后,我们就可以直接重启docker服务即可生效

阅读剩余部分...

使用科大镜像加速Docker和Docker Hub

作者:Rui 发布时间:April 4, 2017 分类:Linux,Docker,CLOUD 浏览:868 No Comments

国内直接使用docker官方的repository,下载安装特别慢,中国很多大学都提供了镜像服务,例如:科大,清华大学等

使用科大Linux Repository 安装Docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
   "deb [arch=amd64] http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt-get update
sudo apt-get install docker-ce

使用科大Docker Hub镜像库加速
在配置文件 /etc/docker/daemon.json 中加入:

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

重新启动dockerd:

sudo service docker restart

相关资料:

科大镜像站:http://mirrors.ustc.edu.cn/
科大镜像站文档: http://mirrors.ustc.edu.cn/help/index.html

为开启安全认证的Service Fabric设置自定义域名

作者:Rui 发布时间:March 1, 2017 分类:Azure,CLOUD 浏览:682 No Comments

一般情况下,如果我们没有为Azure Service Fabric开启群集安全证书功能,我们只需要将域名的DNS解析绑定到Service Fabric群集使用的负载均衡器对应的公网IP上即可。但对于开启了安全证书功能的群集,我们需要将证书和域名进行绑定,相对要麻烦一些。

生成证书
我们可以在CA申请自定义域名的可信证书,也可以使用自签名证书,无论哪种证书,我们都需要将证书使用者的名称和自定义域名保持一致。以下是使用Github上提供的PowerShell模块,可以借此快速生成证书,并上传至Key Vault。下载Github 代码后,将其解压,并执行以下命令导入PowerShell模块

 Import-Module "C:\..\ServiceFabricRPHelpers\ServiceFabricRPHelpers.psm1"

此模块中提供Invoke-AddCertTokeyVault命令自动将证书的私钥格式设置为JSON字符串,并将它上传到密钥保管库,参考以下脚本。

$ResouceGroup = "kevin-group"
$VName = "kevinsfvault"
$SubID = "e0fbea86-6cf2-4b2d-81e2-9c59f4f96bcb"
$locationRegion = "chinanorth"
$newCertName = "aruicert"
$dnsName = "test.arui.me"
$localCertPath = "C:\"

Invoke-AddCertToKeyVault -SubscriptionId $SubID -ResourceGroupName $ResouceGroup -Location $locationRegion -VaultName $VName -CertificateName $newCertName -CreateSelfSignedCertificate -DnsName $dnsName -OutputPath $localCertPath

其中dnsName 必须和我们的自定义域名一致。

阅读剩余部分...

Redis Psync scheduled to be closed ASAP for overcoming of output buffer limits.

作者:Rui 发布时间:December 23, 2016 分类:Redis 浏览:1,948 1 Comment

在做Redis HA的时候,会遇到一直同步失败的问题。并且在server的log中,发现如下异常信息

[12:54:10.7788397] [960] 09 Dec 12:54:10.783 # Client id=5252201 addr=10.207.180.15:42489 fd=119 
name= age=16 idle=0 flags=SP db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=198 oll=113
omem=274319752 ow=0 owmem=0 events=rw cmd=psync scheduled to be closed ASAP for overcoming of output buffer limits.

这是因为在主从同步过程中,master向slave发送数据时,写入缓冲区的数据超出了限制,导致连接中断。

阅读剩余部分...

Redis High ServerLoad and CPU Troubleshooting

作者:Rui 发布时间:December 23, 2016 分类:Redis 浏览:2,193 1 Comment

问题现象

最近工作中,遇到Redis serverload和CPU一直保持过高的问题,导致程序中很多redis的请求出现Timeout现象。当时的RPS远没有达到我们部署的redis的限制,但serverload和CPU就一直维持在90%以上,严重影响了redis的响应时间。之前我们做过基准测试,我们部署的redis可以存储54G数据,RPS可以达到25W/s,但事故时,却只有5W RPS,内存也只占用了24G左右。

有可能引起该问题的原因

  1. 资源受限,网络带宽,CPU性能,机器性能
  2. large request/response size(large object), 存储过大的数据。因为redis是单线程的,在处理请求时,如果某个请求处理的慢,就会堵塞后续的命令执行,独占资源,
  3. 执行过于复杂的LUA 脚本

阅读剩余部分...