西安网站外包平邑的网站都是谁做的
关于 Consul 服务
- Consul是Go语言写的开源的服务发现软件
 - Consul具有服务发现、健康检查、 服务治理、微服务熔断处理等功能
 
Consul 部署方式1: 直接在linux 上面部署 consul 集群
1 )下载
- 在各个服务器上 下载 consul 后解压并将其目录配置到环境变量中,方便调用 consul 命令
 
2 )部署: server端与搭建集群
- 准备3台服务器
 
服务器 启动
- server_1 
- $ 
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表示所有客户端都可加入
 
 - $ 
 - server_2 
- $ 
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- 可以继续在后面追加 -join 参数来追加到集群
 - 目前不这么做,参考下面拆解
 
 
 - $ 
 - server_3 
- $ 
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端与加入搭建集群
- 准备1台客户端
 
客户端 启动
- client_1 
- $ 
consul agent -data-dir=/root/consul_dir/data -node=client_1 -bind=192.168.1.13 -ui -client 0.0.0.0 
 - $ 
 
客户端 加入
- client-01: 
- $ 
consul join 192.168.1.10 
 - $ 
 
Consul 部署方式2: Docker 上面部署 consul 集群
和 Linux 里面的部署流程,基本一致
1 )文档
- https://hub.docker.com/_/consul
 
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地址
- 方法1 
- $ 
docker network ls找到网络列表 - $ 
docker inspect NETWORKID一般是 bridge 的网络 
 - $ 
 - 方法2 
- $ 
docker inspect --format='{{.NetworkSettings.IPAddress}}' consul1 - 推荐
 
 - $ 
 - 假设找到的 ip 是: 192.168.1.10
 
 - 方法1 
 -  
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 )验证
- 目前3个服务端和1个服务器端都做好了,验证一下 
- $ 
docker ps 
 - $ 
 - 进入一个consul中查看 
- $ 
docker exec -it consul1 consul members - 可查看到集群的信息
 
 - $ 
 - 访问 
- xxx.xxx.xxx.xxx:xxxx 
- 上面任意一台机器ip和端口都可访问
 
 
 - xxx.xxx.xxx.xxx:xxxx 
 - 如果里面用到了微服务,并发量不大的情况下,可以把多个consul服务端放在一台机器上 
- 如果并发量比较大,就需要把consul部署在多台服务器上
 - 部署到一台服务器的好处是,容器之间通信比较方便,默认是通过 bridge 网络桥接
 
 
在多台服务器搭建consul集群
1 )直接在 linux 服务器上运行 consul
- 同上方式,不再复述
 
2 )仍旧选择 docker 平台
- 注意,在 
-join时,涉及到不同主机的通信,需要借助物理的ip - 可以把docker容器直接映射在当前物理机上,使用 
--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.0docker 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.10docker 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 & - 相当于在物理机上运行consul, 注意上述ip可替换成hostname, 需要配置hostname, 因为ip可能会变化
 - 以上consul集群部署好之后,就可以准备微服务集群和API网管集群了
 
Consule集群结合Swarm集群部署微服务项目
关于整体架构分层
-  
A. 各个客户端 访问nginx
 -  
B. nginx 服务器,用于总体转发服务
 -  
C. API服务网关集群
- API服务网关可以配置到微服务集群中,这样就可以减少通信相关配置,具体看当时网络环境
 - 需要注册到 consul
 
 -  
D. 微服务集群: 各类应用程序微服务
- 每个微服务需要注册到consul
 
 -  
E. consul服务注册集群
- 用于服务发现管理
 
 -  
F. 数据库集群
- 目前数据库没有做集群处理
 
 -  
以下步骤是大体步骤,比较粗略,忽略一些细节赘述,仅供参考
 
1 )将各个微服务项目打包,比如goWeb应用, 这个步骤是前置任务
- 检查各个服务提供连接的配置信息,检查部署环境对应的配置信息是否正确
 - 如果微服务镜像中配置了支持打包, 比如 Dockerfile中, 则忽略此步骤
 
- 如果在windows下开发,需要打包成linux程序 
- filename : 文件名
set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 go build -o filename main.go 
 - filename : 文件名
 - 将文件上传,如果不是docker部署,需要将服务器的目录设置为可执行 
- $ 
chmod -R 777 目录 
 - $ 
 - 执行项目 $ 
nohup ./filename & - 验证可正常运行
 
2 )准备mysql以及redis数据库等环境
- 启动 mysql 
- $ 
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 
 - $ 
 - 启动 redis 
- $ 
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: redisrestart: alwaysdeploy:replicas: 1 #副本数量# 配置 a 微服务micro_a:image: micro_a_imgrestart: alwaysdeploy:replicas: 6 # 副本数量resources: # 资源limits: #配置cpucpus: "0.3" # 设置该容器最多只能使用 30% 的 CPUmemory: 500M # 设置该容器最多只能使用 500M内存restart_policy: #定义容器重启策略, 用于代替 restart 参数condition: on-failure #只有当容器内部应用程序出现问题才会重启# 配置 b 微服务micro_b:image: micro_b_imgrestart: alwaysdeploy:replicas: 6 #副本数量resources: #资源limits: #配置cpucpus: "0.3" # 设置该容器最多只能使用 30% 的 CPUmemory: 500M # 设置该容器最多只能使用 500M内存restart_policy: #定义容器重启策略, 用于代替 restart 参数condition: on-failure #只有当容器内部应用程序出现问题才会重启depends_on:- captcha_micro# 配置 c 微服务micro_c:image: micro_c_imgrestart: alwaysports:- 8080:8080deploy:replicas: 6 #副本数量resources: #资源limits: #配置cpucpus: "0.3" # 设置该容器最多只能使用 30% 的 CPUmemory: 500M # 设置该容器最多只能使用 500M内存restart_policy: #定义容器重启策略, 用于代替 restart 参数condition: on-failure #只有当容器内部应用程序出现问题才会重启depends_on:- micro_b # 依赖b微服务
 
- 注: 上面用到了redis数据库, 但不是集群,当前只是一个简单的服务
 
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- microSwarm 是你给这套微服务集群起的响亮亮的名字
 
 - 进行各个服务的启动后的验证,不再赘述
 
8 )调用测试
- 客户端连接 consul 服务器实现调试, 不再赘述
 
9 )注意事项
- 如果是前后端分离的项目 
- 先集成运维环境,并测试, 这里一般包含集群
 - 再部署后端服务,并测试服务的连通性
 - 再部署前端服务,并测试接口服务的正常
 
 - 如果,微服务环境运维环境复杂 
- 还要检查微服务的版本迭代是否正常,否则上线可能会遇到问题
 
 
