说明
- docker版本:18.06.1-ce
- consul 版本:v1.2.3
- 系统:ubuntu18
本文将介绍在一台机器上搭建三个server节点 1个Client节点的consul集群。
docker安装
1.卸载老版本
sudo apt-get remove docker \
docker-engine \
docker.io
2 . 添加下载源:
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
3.为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
4.ubuntu 可使用脚本安装
wget -qO- https://get.docker.com/ | sh
成功会提示如下:
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker runoob
Remember that you will have to log out and back in for this to take effect!
5.建立 docker 用户组
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
建立 docker 组 我本机安装完后已经自动创建:
将当前用户加入 docker 组:
$ sudo usermod -aG docker $USER
退出当前终端并重新登录,进行如下测试。
6.配置国内image 下载源
vi /etc/docker/daemon.json
添加如下内容:
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。
之后重新启动服务。
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
注意:如果您之前查看旧教程,修改了 docker.service 文件内容,请去掉您添加的内容(--registry-mirror=https://registry.docker-cn.com),这里不再赘述。
docker consul 镜像下载
执行下面命令下载镜像
sudo docker pull consul
下载完成后可以通过下面命令查看
sudo docker image ls
consul 集群搭建
因为我们需要搭建3个server节点 和1个client节点,所以我们先需要配置下4个docker容器节点的网络。
配置docker 网络
因为docker 默认的 docker0 虚拟网卡是不支持直接设置静态ip的。所以我们先创建一个自己的虚拟网络。
sudo docker network create --subnet=172.18.0.0/24 staticnet
执行完可以通过 下面了命令查看
sudo docker network
PS:
私有网络ip选取小知识:
这三个地址段分别位于A、B、C三类地址内:
A类地址:10.0.0.0--10.255.255.255
B类地址:172.16.0.0--172.31.255.255
C类地址:192.168.0.0--192.168.255.255
启动三个 server节点
我们将要创建的三个server节点命名 为 s1,s2, s3。
下面先创建好 配置文件,我在 /opt/config/consul/consul_server_config 目录添加三个配置文件。
basic_config_1.json basic_config_2.json basic_config_3.json
其中basic_config_1.json 的内容如下:
{
"datacenter": "dc1",
"log_level": "INFO",
"node_name": "s_1",
"server": true,
"bootstrap_expect": 2,
"bind_addr": "0.0.0.0",
"client_addr": "0.0.0.0",
"ui": true,
"ports": {
"dns": 8600,
"http": 8500,
"https": -1,
"server": 8300,
"serf_lan": 8301,
"serf_wan": 8302
},
"rejoin_after_leave": true,
"retry_join": [
"172.18.0.2",
"172.18.0.3",
"172.18.0.4"
],
"retry_interval": "30s",
"reconnect_timeout": "72h"
}
另外两个配置基本一样只用更改 node_name 为 s_2 和 s_3 即可。
依次执行启动命令如下,比如 s1节点 我执行:
sudo docker run -d --name consul_s1 --net staticnet --ip 172.18.0.2 -v /opt/config/consul/consul_server_config/basic_config_1.json:/consul/config/basic_config_1.json consul agent -config-dir /consul/config
s2 和s3 只用改为 上面 --ip 和-v 配置即可。
启动完成后 可以,通过 ui控制台看到节点信息。
http://172.18.0.2:8500/ui/dc1/services/consul 截图如下:
启动三个 client节点
将客户端节点命名为c1,配置如下:
{
"datacenter": "dc1",
"log_level": "INFO",
"node_name": "c1",
"server": false,
"bind_addr": "0.0.0.0",
"client_addr": "0.0.0.0",
"ui": false,
"ports": {
"dns": 8600,
"http": 8500,
"https": -1,
"server": 8300,
"serf_lan": 8301,
"serf_wan": 8302
},
"rejoin_after_leave": true,
"retry_join": [
"172.18.0.2",
"172.18.0.3",
"172.18.0.4"
],
"retry_interval": "30s",
"reconnect_timeout": "72h"
}
启动命令:
sudo docker run -d --name consul_c1 --net staticnet --ip 172.18.0.5 -v /opt/config/consul/consul_client_config/basic_config_1.json:/consul/config/basic_config.json consul agent -config-dir /consul/config
到此,一个基于docker的集群 就搭建完成。
#参考文章