1 )下载
2 )部署: server端与搭建集群
服务器 启动
consul agent -server -bootstrap-expect 3 -node=server_1 -bind=192.168.1.10 -ui -data-dir=/root/consul_dir/data -client 0.0.0.0
-server
表示启动的是服务端-bootstrap-expect 3
表示待启动的服务数量-node
指定节点的名称-bind
指定绑定的当前的ip地址-ui
表示可以在web中访问-data-dir
指定的存储目录-client 0.0.0.0
表示所有客户端都可加入consul agent -server -bootstrap-expect 3 -node=server_2 -bind=192.168.1.11 -ui -data-dir=/root/consul_dir/data -client 0.0.0.0
consul agent -server -bootstrap-expect 3 -node=server_3 -bind=192.168.1.12 -ui -data-dir=/root/consul_dir/data -client 0.0.0.0
服务器 加入
server_2
consul join 192.168.1.10
server_3
consul join 192.168.1.10
基于以上server端对应的集群搭建好了
3 )部署: client端与加入搭建集群
客户端 启动
consul agent -data-dir=/root/consul_dir/data -node=client_1 -bind=192.168.1.13 -ui -client 0.0.0.0
客户端 加入
consul join 192.168.1.10
和 Linux 里面的部署流程,基本一致
1 )文档
2 )下载镜像
docker pull consul
3 )部署
3.1 启动创建第一个节点 consul1容器
docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect=3 -ui -bind=0.0.0.0 -client=0.0.0.0
docker run --name consul1 -d -p 8500:8500 consul agent -server -bootstrap-expect=3 -ui -bind=0.0.0.0 -client=0.0.0.0
3.2 启动第二个容器前需要找到 consul1容器的ip地址
docker network ls
找到网络列表docker inspect NETWORKID
一般是 bridge 的网络docker inspect --format='{{.NetworkSettings.IPAddress}}' consul1
3.3 启动第二个节点(端口8501), 加入到 consul1
docker run --name consul2 -d -p 8501:8500 consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 192.168.1.10
3.4 启动第三个节点(端口8502), 加入到 consul1
docker run --name consul2 -d -p 8502:8500 consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 192.168.1.10
3.5 启动一个consul客户端(端口8503), 加入到 consul1
docker run --name consul_client1 -d -p 8503:8500 consul agent -ui -bind=0.0.0.0 -client=0.0.0.0 -join 192.168.1.10
4 )验证
docker ps
docker exec -it consul1 consul members
1 )直接在 linux 服务器上运行 consul
2 )仍旧选择 docker 平台
-join
时,涉及到不同主机的通信,需要借助物理的ip--net=host
参数,例如docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.10 --name consul1 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.10 -client=0.0.0.0
docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.11 --name consul2 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.11 -client=0.0.0.0 -join 192.168.1.10
docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.12 --name consul3 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.12 -client=0.0.0.0 -join 192.168.1.10
nohup + 上面命令 + &
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.10 --name consul1 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.10 -client=0.0.0.0 &
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.11 --name consul2 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.11 -client=0.0.0.0 -join 192.168.1.10 &
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.12 --name consul3 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.12 -client=0.0.0.0 -join 192.168.1.10 &
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.13 --name consul4 consul agent -bind=192.168.1.13 -client=0.0.0.0 -join 192.168.1.10 &
关于整体架构分层
A. 各个客户端 访问nginx
B. nginx 服务器,用于总体转发服务
C. API服务网关集群
D. 微服务集群: 各类应用程序微服务
E. consul服务注册集群
F. 数据库集群
以下步骤是大体步骤,比较粗略,忽略一些细节赘述,仅供参考
1 )将各个微服务项目打包,比如goWeb应用, 这个步骤是前置任务
set CGO_ENABLED=0
set GOOS=linux
set GOARCH=amd64
go build -o filename main.go
chmod -R 777 目录
nohup ./filename &
2 )准备mysql以及redis数据库等环境
docker run --name ityingMysql -p 3306:3306 -v /root/mysql/conf.d:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker run -p 6379:6379 --name redis -v /docker/redis/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data --restart=always -d redis redis-server /etc/redis/redis.conf
3 )整理微服务应用
3.1 microA程序的 A微服务
配置dockerfile,简单示例仅供参考 micro_a_Dockerfile
FROM centos
ADD /wwwroot/micro_a.tar.gz /root
WORKDIR /root
RUN chmod -R 777 micro_a
WORKDIR /root/micro_a
ENTRYPOINT ["./micro_a"]
3.2 microB程序 B微服务
配置dockerfile,简单示例仅供参考 micro_b_Dockerfile
FROM centos
ADD /wwwroot/micro_b.tar.gz /root
WORKDIR /root
RUN chmod -R 777 micro_b
WORKDIR /root/micro_b
ENTRYPOINT ["./micro_b"]
3.3 microC程序 C微服务
配置dockerfile,简单示例仅供参考 micro_c_Dockerfile
FROM centos
ADD /wwwroot/micro_c.tar.gz /root
WORKDIR /root
RUN chmod -R 777 micro_c
WORKDIR /root/micro_c
ENTRYPOINT ["./micro_c"]
4 )对微服务进行 镜像build
docker build -f micro_a_Dockerfile -t micro_a_img:latest .
docker build -f micro_b_Dockerfile -t micro_b_img:latest .
docker build -f micro_c_Dockerfile -t micro_c_img:latest .
5 )配置微服务 docker-compose.yml
version: "3"
services:
# 配置 redis 数据库
redis:
image: redis
restart: always
deploy:
replicas: 1 #副本数量
# 配置 a 微服务
micro_a:
image: micro_a_img
restart: always
deploy:
replicas: 6 # 副本数量
resources: # 资源
limits: #配置cpu
cpus: "0.3" # 设置该容器最多只能使用 30% 的 CPU
memory: 500M # 设置该容器最多只能使用 500M内存
restart_policy: #定义容器重启策略, 用于代替 restart 参数
condition: on-failure #只有当容器内部应用程序出现问题才会重启
# 配置 b 微服务
micro_b:
image: micro_b_img
restart: always
deploy:
replicas: 6 #副本数量
resources: #资源
limits: #配置cpu
cpus: "0.3" # 设置该容器最多只能使用 30% 的 CPU
memory: 500M # 设置该容器最多只能使用 500M内存
restart_policy: #定义容器重启策略, 用于代替 restart 参数
condition: on-failure #只有当容器内部应用程序出现问题才会重启
depends_on:
- captcha_micro
# 配置 c 微服务
micro_c:
image: micro_c_img
restart: always
ports:
- 8080:8080
deploy:
replicas: 6 #副本数量
resources: #资源
limits: #配置cpu
cpus: "0.3" # 设置该容器最多只能使用 30% 的 CPU
memory: 500M # 设置该容器最多只能使用 500M内存
restart_policy: #定义容器重启策略, 用于代替 restart 参数
condition: on-failure #只有当容器内部应用程序出现问题才会重启
depends_on:
- micro_b # 依赖b微服务
6 )创建集群
docker swarm init --advertise-addr 192.168.1.10
docker swarm join-token worker
docker swarm join-token manager
7 )部署项目
docker stack deploy --compose-file docker-compose.yml microSwarm
8 )调用测试
9 )注意事项