zoukankan      html  css  js  c++  java
  • SpringCloud consul安装和使用,Windows Consul安装和使用,Java consul服务中心安装和使用


    SpringCloud consul安装和使用,Windows Consul安装和使用,Java consul服务中心安装和使用

    ================================

    ©Copyright 蕃薯耀 2021-03-05

    https://www.cnblogs.com/fanshuyao/

    一、Consul下载地址:

    https://www.consul.io/downloads

    Windows:consul_1.9.3_windows_amd64.zip
    Linux:consul_1.9.3_linux_amd64.zip

    二、Windows Consul安装和使用
    1、以windows为例,解压 consul_1.9.3_windows_amd64.zip 到 D:softconsul_1.9.3_windows_amd64,文件夹有一个exe文件(consul.exe)
    2、配置环境变量,将Consul的路径:D:softconsul_1.9.3_windows_amd64配置到系统PATH路径中
    3、打开cmd命令窗口,在窗口输入:consul -v或者consul --version查看版本

    consul -v

    C:Usersxxx> consul -v
    Consul v1.9.3
    Revision f55da9306
    Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

    4、打开cmd命令窗口,在窗口输入:consul agent -dev启动consul(开发模式)

    consul agent -dev

    5、consul的默认端口是8500,通过浏览器打开:http://localhost:8500访问Consul管理后台

    http://localhost:8500


    6、通过cmd命令窗口查看members

    consul members

    C:Usersliqiongy>consul members
    Node Address Status Type Build Protocol DC Segment
    xxx-xxxxx-10 127.0.0.1:8301 alive server 1.9.3 2 dc1 <all>

    7、关闭Consul命令:

    consul leave

    8、重载Consul命令:

    consul reload


    三、Consul在微服务项目中使用
    1、在pom文件中引入Consul依赖(服务提供者和消费者都需要引入)

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    <version>2.2.6.RELEASE</version>
    </dependency>

    2、服务提供者,在application.properties文件配置Consul

    server.port=8631
    spring.application.name=SPRINGCLOUD-CONSUL-CLIENT-SERVICE
    
    #consul服务访问的地址:127.0.0.1或者localhost
    spring.cloud.consul.host=127.0.0.1
    #consul服务访问的端口,默认端口就是8500
    spring.cloud.consul.port=8500
    spring.cloud.consul.discovery.service-name=${spring.application.name}
    #设置实例id,默认是项目的名称
    spring.cloud.consul.discovery.instance-id=consul-8631
    #显示客户端的ip地址
    spring.cloud.consul.discovery.prefer-ip-address=true

    3、服务提供者,服务请求

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class ConsulClientController {
    
    @Value("${server.port}")
    private String serverPort;
    
    @RequestMapping("/consul")
    public Result consul() {
    return Result.ok("consul端口:" + serverPort);
    }
    
    }

    4、服务消费者,在application.properties文件配置Consul

    server.port=8632
    
    spring.application.name=SPRINGCLOUD-CONSUL-WEB
    #consul服务访问的地址
    spring.cloud.consul.host=127.0.0.1
    #consul服务访问的端口
    spring.cloud.consul.port=8500
    spring.cloud.consul.discovery.service-name=${spring.application.name}

    5、服务消费者,服务请求

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    public class ConsulController {
    //服务提供者的服务地址
    private String serviceUrl = "http://SPRINGCLOUD-CONSUL-CLIENT-SERVICE";
    
    @Autowired
    private RestTemplate restTemplate;
    
    @RequestMapping(value="/getConsul", produces = MediaType.APPLICATION_JSON_VALUE)
    public Result getConsul() {
    Result result = restTemplate.getForObject(serviceUrl + "/consul", Result.class);
    return result;
    }
    }

    6、RestTemplate配置(服务消费者端)

    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    @Configuration
    public class RestConfig {
    
    //@LoadBalanced注解实现负载均衡
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
    return new RestTemplate();
    }
    }
    
    四、测试服务消费者请求服务提供者的服务
    浏览器打开服务消费的请求地址:
    http://127.0.0.1:8632/getConsul
    
    请求返回的结果:
    
    {
    "result": true,
    "timestamp": "2021-03-04 15:14:17",
    "msg": "操作成功。",
    "datas": "consul端口:8631"
    }


    五、Linux yum安装Consul,Linux yum安装consul
    1、安装yum-utils

    yum install -y yum-utils

    2、配置consul的下载仓库:

    yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

    必须要有此步,不然直接安装会因为在默认仓库找不到,导致安装失败:
    [root@host-14 bin]# yum -y install consul
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
    * base: mirrors.aliyun.com
    * extras: mirrors.aliyun.com
    * updates: mirrors.aliyun.com
    没有可用软件包 consul。
    错误:无须任何处理

    3、Linux yum安装consul(consul-1.9.3-1.x86_64.rpm),106M,下载很慢

    sudo yum -y install consul

    安装成功:
    Running transaction
    正在安装 : consul-1.9.3-1.x86_64
    验证中 : consul-1.9.3-1.x86_64
    已安装:
    consul.x86_64 0:1.9.3-1
    完毕!


    4、安装完成后,consul检查版本号

    consul -v


    [root@host-14 bin]# consul -v
    Consul v1.9.3
    Revision f55da9306
    Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

    5、Linux启动consul:
    最简单的启动(后台管理不能访问,没启动ui):

    consul agent -dev

    启动2(建议使用这个启动。0.0.0.0表示不绑定客户端IP地址,不然只能使用特定的IP访问):

    consul agent -dev -ui -node=consul-dev-14 -client=0.0.0.0

    启动3:绑定client地址(Linux不能使用consul kv put my/aa aa命令插入数据,因为127.0.0.1访问不了)

    mkdir -p /java/data/consul
    consul agent -dev -ui -data-dir=/java/data/consul -node=consul-dev-14 -client=192.168.170.14

    consul绑定client地址后出错:dial tcp 127.0.0.1:8500: connect: connection refused
    [root@host-14 ~]# consul kv put xxx/config/num 1
    Error! Failed writing data: Put "http://127.0.0.1:8500/v1/kv/xxx/config/num": dial tcp 127.0.0.1:8500: connect: connection refused

    常用参数:

    -http-port 默认是8500
    -client:客户端模式,http dns,默认127.0.0.1,回环令牌网址
    -data-dir:状态数据存储文件夹,所有的节点都需要。文件夹位置需要不收consul节点重启影响,必须能够使用操作系统文件锁,unix-based系统下,文件夹文件权限为0600,注意做好账户权限控制,
    -dev:开发模式,去掉所有持久化选项,内存服务器模式。
    -ui:内置web ui界面。
    -bind:绑定的内部通讯地址,默认0.0.0.0,即,所有的本地地址,会将第一个可用的ip地址散播到集群中,如果有多个可用的ipv4,则consul启动报错。[::]ipv6,TCP UDP协议,相同的端口。防火墙配置。
    -bootstrap:启动模式,此模式下,节点可以选举自己为leader,一个数据中心只能有一个此模式启动的节点。机群启动后,新启动的节点不建议使用这种模式。
    -bootstrap-expect:设定一个数据中心需要的服务节点数,可以不设置,设置的数字必须和实际的服务节点数匹配。consul会等待直到数据中心下的服务节点满足设定才会启动集群服务。初始化leader选举,不能和bootstr- ap混用。必须配合-server配置。

    6、测试consul启动,打开Linux新窗口,输入请求命令

    curl localhost:8500/v1/catalog/nodes

    或者浏览器打开(注意:后台管理不兼容IE浏览器,请使用Chrome浏览器打开):

    http://192.168.170.14:8500/

    或者查看进程:

    ps -ef | grep consul

    返回结果:
    [root@host-14 ~]# curl localhost:8500/v1/catalog/nodes
    [
    {
    "ID": "914be537-f613-27a4-497a-2e7f9706f50c",
    "Node": "host-14",
    "Address": "127.0.0.1",
    "Datacenter": "dc1",
    "TaggedAddresses": {
    "lan": "127.0.0.1",
    "lan_ipv4": "127.0.0.1",
    "wan": "127.0.0.1",
    "wan_ipv4": "127.0.0.1"
    },
    "Meta": {
    "consul-network-segment": ""
    },
    "CreateIndex": 11,
    "ModifyIndex": 13
    }
    ]

    7、关闭Consul

    consul leave

    或者

    kill -9 PID(Consul进程ID)

    成功关闭结果:

    [root@host-14 ~]# consul leave
    Graceful leave complete


    六、Consul使用KV命令
    1、增加数据

    consul kv put xxx/config/num 1

    响应结果:
    Success! Data written to: xxx/config/num

    curl 192.168.170.14:8500/v1/kv/xxx/aa

    覆盖之前的键增加(即修改):

    consul kv put xxx/config/num 20

    增加字符串数据

    consul kv put xxx/config/str thisIsString

    2、查询数据

    consul kv get xxx/config/num

    查询数据(详情)

    consul kv get -detailed xxx/config/num

    查询所有键数据

    consul kv get -recurse

    3、删除数据

    consul kv delete xxx/config/str

    删除所有以xxx开头的键数据:

    consul kv delete -recurse xxx

    4、修改已经存在的数据,就是使用新数据覆盖之前的键

    consul kv put xxx/config/num 30

    七、Consul常用option选项命令

    -bootstrap:启动模式,此模式下,节点可以选举自己为leader,一个数据中心只能有一个此模式启动的节点。机群启动后,新启动的节点不建议使用这种模式。
    -bootstrap-expect:设定一个数据中心需要的服务节点数,可以不设置,设置的数字必须和实际的服务节点数匹配。consul会等待直到数据中心下的服务节点满足设定才会启动集群服务。初始化leader选举,不能和bootstr- ap混用。必须配合-server配置。
    -bind:绑定的内部通讯地址,默认0.0.0.0,即,所有的本地地址,会将第一个可用的ip地址散播到集群中,如果有多个可用的ipv4,则consul启动报错。[::]ipv6,TCP UDP协议,相同的端口。防火墙配置。
    -client:客户端模式,http dns,默认127.0.0.1,回环令牌网址
    -config-file:配置文件位置
    -config-dir:配置文件所在文件夹,会加载其下所有配置文件,.json或者.hcl文件,加载顺序为字母表顺序;可用配置多个此配置,从而加载多个文件夹,子文件夹的配置不会被加载。
    -config-format:配置文件格式,配置了,则加载相应个是的文件。不配置,则consul自动识别。
    -data-dir:状态数据存储文件夹,所有的节点都需要。文件夹位置需要不收consul节点重启影响,必须能够使用操作系统文件锁,unix-based系统下,文件夹文件权限为0600,注意做好账户权限控制,
    -datacenter:数据中心名称,默认dc1,一个数据中心的所有节点都必须在一个LAN中。
    -dev:开发模式,去掉所有持久化选项,内存服务器模式。
    -disable-host-node-id:不使用host信息生成node ID,适用于同一台服务器部署多个实例用于测试的情况。随机生成nodeID
    -dns-port:v7.0以后,自定义dns 端口,覆盖默认8600
    -enable-script-checks:是否允许使用脚本进行健康检查,默认false,最好配置enable acl
    -encrypt:consul网络通讯加密key,base64加密,16比特;consul keygen产生。集群中的每个实例必须提供相同的,只需提供一次,然后会保存到数据文件。重启自动加载。consul节点启动后提供,会被忽略。
    -hcl:添加hcl格式配置,和已有的配置合并。可以使用多个此配置。
    -http-port:http api端口,覆盖默认的8500。适用于云环境指定。
    -log-file:日志记录文件,如果没有提供文件名,则默认Consul-时间戳.log
    -log-level:日志级别,默认info,包含:trace,debug,info,warn,err;consul monitor监控
    -log-rotate-bytes:新日志文件生成大小阈值。
    -log-rotate-rotation:新日志生成时间阈值
    -join:需要加入的其它节点地址,可以多次使用,加入多个节点。
    -retry-join:会进行加入重试,适用于认定加入节点最终会正常的情况。ipv4,ipv6,dns
    -retry-interval:上述,重试间隔,默认30s
    -retry-max:重试次数,默认0,无限次重试
    -join-wan, -retry-join-wan, -retry-interval-wan, -retry-max-wan
    -node:节点名称,默认主机名
    -node-id:节点ID,
    -pid-file:consul 存储 pid 的文件位置,用于主动发信号。如停止节点,重载配置等。
    -protocol:使用的协议,升级时使用。consul -v查看协议版本
    -raft-protocol:使用raft协议版本,默认3
    -raft-snapshot-threshold:raft执行快照,提交次数阈值。一般不需要设置,io密集型应用可以调高。避免所有的节点同一时间快照。此值过大,会造成相应日志文件变大,节点重启恢复会耗费更长时间。1.1.0后,默认1- 6384,之前8192.
    -raft-snapshot-interval:执行快照间隔,影响类似上个配置,1.1.0后默认30s,之前5s。
    -rejoin:节点会尝试重新加入集群。
    -server:服务端节点模式。
    -server-port:服务端RPC端口,v1.2.2后提供。
    -non-voting-server:服务节点不参与选举,接受日志复制,用于横向扩展,服务查询请求。(类比zookeeper 观察者节点)
    -syslog:linux OSX系统,配置日志输出到系统日志。
    -ui:内置web ui界面。
    -ui-dir:web ui 资源文件夹,使用此配置,则不需也不能使用再-ui配置

    (时间宝贵,分享不易,捐赠回馈,^_^)

    ================================

    ©Copyright 蕃薯耀 2021-03-05

    https://www.cnblogs.com/fanshuyao/

    今天越懒,明天要做的事越多。
  • 相关阅读:
    EF多个上下文迁移
    Ruby知识点三:运算符
    Ruby知识点二:类
    不用搭环境的10分钟AngularJS指令简易入门01(含例子)
    JavaScript DOM编程艺术第二版学习(1/4)
    VisualStudio2013&VS2015内置SQLServer入门 (三)
    VisualStudio2015内置LocalDB
    VisualStudio2013内置SQLServer入门
    Java反射学习(java reflect)(三)
    Java反射学习(java reflect)(二)
  • 原文地址:https://www.cnblogs.com/fanshuyao/p/14486205.html
Copyright © 2011-2022 走看看