网易蜂巢使用云主机并搭建docker环境配置负载均衡

创建云主机

网易蜂巢提供2种方式管理服务,一种是控制台方式,一种是API接口,本文主要以控制台方式讲解。

基本的配置

首先,打开网易蜂巢的控制台,点击右侧的云主机-创建云主机,我们需要创建一个 Linux 操作系统,具体参数如下:

类别 参数
计费方式 按量付费
可用区 A区
镜像 Centos7
规格 CPU:2核;内存:2G;系统盘,40G
云主机名称 docker-tomcat

配置SSH 密钥

出于安全方面考虑,蜂巢不提供直接密码登录服务器的方式,但是提供 SSH 密钥的方式,您可以在创建云主机的时候选择:

  • 创建一对新的密钥。
  • 导入已有的本地公钥文件。

这里我们选择导入本地密钥,本地创建一对 SSH 密钥,我这里使用的是 MAC OS ,打开终端,执行:

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/wenjun/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/wenjun/.ssh/id_rsa.
Your public key has been saved in /Users/wenjun/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wRIFAVPln+10aJmEcVNSh5nM1tbOF1TVsdh0rbEwWLI [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|    oo==o oo==+O%|
|     . +  .*oo%oO|
|      . + E .= X.|
|       . o + +o +|
|        S o B . .|
|           + .   |
|            .    |
|                 |
|                 |
+----[SHA256]-----+

根据提示创建一对RSA算法的不带密码的密钥,其路径在家目录的 .ssh 目录下,其中 id_rsa 是私钥文件,id_rsa.pub 是公钥文件,我们需要把公钥文件内容添加到平台,执行:

$cat ~/.ssh/id_rsa.pub

查看密钥内容,然后复制粘贴到控制台。

然后勾选刚才创建的 SSH 密钥,最后点击立即创建。

此时,我们就创建好了一台云主机,可以在云主机列表中查看。

远程连接

默认情况下创建的主机是不提供外网 IP 地址的,蜂巢提供2种管理远程主机的方式,第一种是通过 OpenVPN 的方式,可以在控制台找到账户安全,下载OpenVPN的配置文件连接,具体使用方法参考[文档](http://support.c.163.com/md.html#!计算服务/容器服务/使用技巧/如何使用蜂巢 OpenVPN.md)。

然后下载应用程序,MAC 下拖拽配置文件到程序中,然后连接即可

当连接成功后,即可远程连接

➜  .ssh ssh [email protected]
The authenticity of host '10.173.32.11 (10.173.32.11)' can't be established.
ECDSA key fingerprint is SHA256:VQrvXo6fRvi+QFuqEG+onn2neeTvKjtbRJ6QqYDG5OA.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.173.32.11' (ECDSA) to the list of known hosts.
Last login: Tue Aug  8 14:02:21 2017 from 115.192.184.186

另外一种方式就是绑定弹性公网 IP 的方式来远程,具体操作如下,点击控制台左侧的弹性公网 IP,创建弹性公网 IP。

创建完成之后会在列表中看到创建的 IP 地址。

下面我们要将 IP 绑定到云主机,点击左侧云主机,如何绑定,请参考[文档](http://support.c.163.com/md.html#!平台服务/弹性公网 IP/使用指南/绑定公网IP/公网IP绑定云主机.md)进行绑定。

绑定完成之后,我们就可以远程连接了。

ssh [email protected]
The authenticity of host '59.111.96.110 (59.111.96.110)' can't be established.
ECDSA key fingerprint is SHA256:VQrvXo6fRvi+QFuqEG+onn2neeTvKjtbRJ6QqYDG5OA.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '59.111.96.110' (ECDSA) to the list of known hosts.
[root@docker-tomcat ~]#

当然,如果对于服务器的安全性要求较高,还是建议使用vpn的方式登录。

更新系统

# yum -y update    

安装 Docker

我们选择的操作系统是 Centos7.2,可以使用如下命令安装 Docker:

# yum -y install docker

安装完毕后 可以查看docker的版本

# docker version
Client:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
 Go version:      go1.7.4
 Git commit:      88a4867/1.12.6
 Built:           Mon Jul  3 16:02:02 2017
 OS/Arch:         linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

启动docker

# systemctl enable docker # 设置为开机自启动
# systemctl status docker # 开启docker

如果启动出现问题,可以参考文档解决。

安装镜像

打开蜂巢镜像中心,可以找到 tomcat,在云主机执行

# docker pull hub.c.163.com/public/tomcat:7.0.28

安装 tomcat 镜像,安装完毕可以查看镜像

[root@docker-tomcat /]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
hub.c.163.com/public/tomcat   7.0.28              1d333f1d42a5        17 months ago       266.9 MB

后台运行容器

# docker run -d 1d333f1d42a5 /bin/bash
1d65cec7f0f6347e879cc7a11aa2d45b2b530f56ec46be551940885a0fc9a801

导出本地容器

[root@docker-tomcat /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
98a7fb3b27de        1d333f1d42a5        "/bin/sh -c '/etc/ini"   57 seconds ago      Up 57 seconds       22/tcp, 8080/tcp    prickly_varahamihira
[root@docker-tomcat /]# docker export 98a7 > tomcat0808.tar

本地镜像上传到蜂巢

该部分内容参考文档

1.登录

[root@docker-tomcat /]# docker login -u [email protected] -p password hub.c.163.com
Login Succeeded

2.标记本地镜像

[root@docker-tomcat /]# docker tag 1d333f1d42a5 hub.c.163.com/fangwenjun/tomcat

3.推送镜像

[root@docker-tomcat /]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
hub.c.163.com/public/tomcat   7.0.28              1d333f1d42a5        17 months ago       266.9 MB
[root@docker-tomcat /]# docker tag 1d333f1d42a5 hub.c.163.com/fangwenjun/tomcat
[root@docker-tomcat /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
98a7fb3b27de        1d333f1d42a5        "/bin/sh -c '/etc/ini"   6 minutes ago       Up 6 minutes        22/tcp, 8080/tcp    prickly_varahamihira

 [root@docker-tomcat /]# docker push hub.c.163.com/fangwenjun/tomcat
The push refers to a repository [hub.c.163.com/fangwenjun/tomcat]
5f70bf18a086: Pushed
04ec86136189: Pushed
41eaba0ec3cd: Pushed
bcaa3b393a28: Pushed
f8cfb55c251b: Pushed
2712458540cb: Pushed
59dbd0a38594: Pushed
bae03cbf1131: Pushed
84cf9f092c7a: Pushed
2ffc517b9e28: Pushed
fb0c06d8457d: Pushed
9ef641aa2eea: Pushed
8730a9c82887: Pushed
72b520f75c37: Pushed
c81b5c199370: Pushed
ff07b305fdfa: Pushed
a0f9bae65944: Pushed
latest: digest: sha256:e245417df37590ec1e4d2eb543c23171e956dafc15a4263f1a10025d41bf8634 size: 14015

然后在后台镜像仓库可以看到

使用私人镜像

在镜像仓库中点击刚才创建的镜像,可以在页面种看到下载地址

执行

docker pull hub.c.163.com/fangwenjun/tomcat:latest

然后查看会发现私人仓库的镜像也出现在了镜像列表中

[root@docker-tomcat /]# docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
hub.c.163.com/fangwenjun/tomcat   latest              1d333f1d42a5        17 months ago       266.9 MB
hub.c.163.com/public/tomcat       7.0.28              1d333f1d42a5        17 months ago       266.9 MB

负载均衡配置

要配置负载均衡,我们需要在主机内创建2个容器并进行响应的数据卷和端口的映射。

注意:容器内的webapps目录在/var/lib/tomcat7/下,我们需要创建一个外部的卷来将其挂载到容器内使用,因此这里我们在服务器的/opt/目录下创建一个目录data和data1目录。

创建第一个容器

查看本地镜像

[root@docker-tomcat data]# docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
hub.c.163.com/fangwenjun/tomcat   latest              1d333f1d42a5        17 months ago       266.9 MB
hub.c.163.com/public/tomcat       7.0.28              1d333f1d42a5        17 months ago       266.9 MB
[root@docker-tomcat data]#

然后执行

[root@docker-tomcat data]# docker run -d -P --name web -v /opt/data/:/var/lib/tomcat7/webapps/ROOT/ -p 8080:8080  1d33
80fded28b17a58097f5c54361e9d161c5c97167aa2290a01989dbe2430989c55

分配其数据卷为web;/opt/data/ 指向容器的webapps目录;本地端口8080映射到容器8080

查看端口映射

[root@docker-tomcat data]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                           NAMES
80fded28b17a        1d33                "/bin/sh -c '/etc/ini"   40 seconds ago      Up 39 seconds       0.0.0.0:8080->8080/tcp, 0.0.0.0:32769->22/tcp   web
[root@docker-tomcat data]# docker port 80f
22/tcp -> 0.0.0.0:32769
8080/tcp -> 0.0.0.0:8080

在本地的data目录写入一个文件

[root@docker-tomcat data]# cat index.html
this is test page

然后访问,发现是可以通过公网IP 访问8080端口的,此时访问的就容器中的8080端口对应的tomcat资源

创建第二个容器

分配其数据卷为web1;/opt/data1/ 指向容器的webapps目录;本地端口8081映射到容器8080

 [root@docker-tomcat opt]# docker run -d -P --name web1 -v /opt/data1/:/var/lib/tomcat7/webapps/ROOT/ -p 8081:8080  1d33
9073cf3aeedbb155c74748a46f254f03bc71857d538b8f5480fd4711f9fa3b14

查看端口映射

[root@docker-tomcat data1]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                           NAMES
9073cf3aeedb        1d33                "/bin/sh -c '/etc/ini"   2 minutes ago       Up 2 minutes        0.0.0.0:32770->22/tcp, 0.0.0.0:8081->8080/tcp   web1
80fded28b17a        1d33                "/bin/sh -c '/etc/ini"   9 minutes ago       Up 9 minutes        0.0.0.0:8080->8080/tcp, 0.0.0.0:32769->22/tcp   web
[root@docker-tomcat data1]# docker port 80f
22/tcp -> 0.0.0.0:32769
8080/tcp -> 0.0.0.0:8080

然后在/opt/data1目录写入一个html文件

[root@docker-tomcat data1]# echo docker2 >> index.html

访问 发现可以访问到docker2的内容

创建负载均衡

打开蜂巢后台,点击左侧的负载均衡

创建一个负载均衡,选择面向范围为-面向主机,然后输入一个名称,这里叫tomcat

然后切换到目标组

创建一个目标组,填写目标组名称,这里叫tomcat,后端组选择云主机,然后取消掉所有云主机使用相同端口的复选框,分别填写8080和8081两个端口,对应主机中的两个容器服务,确认无误后点击提交。

然后点击创建监听

填写监听名称,这里叫http,选择监听的协议,可以选择HTTP、HTTPS和TCP协议,填写监听端口,比如这里填80端口,转发规则就使用默认的规则,后端服务就选择我们刚才创建的tomcat组,会话保持,我们这里不启用,确认无误后创建。

此时我们拿负载均衡的IP地址去访问,可以看到是能够正常访问到后端的8080端口对应的容器服务的。

那么我们强制刷新几次浏览器,发现切换到后端的8081端口对应的服务了。说明负载均衡配置成功。