consul集群部署-01

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了consul集群部署-01相关的知识,希望对你有一定的参考价值。

#####参考文章(https://blog.51cto.com/412166174/1975822)

consul介绍

Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:
服务发现 Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
健康检查 Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.
Key/Value存储 应用程序可用根据自己的需要使用Consul的层级的Key/Value存储.比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用.
多数据中心 Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域.
Consul面向DevOps和应用开发者友好.是他适合现代的弹性的基础设施.

基础架构

Consul是一个分布式高可用的系统. 这节将包含一些基础,我们忽略掉一些细节这样你可以快速了解Consul是如何工作的.如果要了解更多细节,请参考深入的架构描述.

每个提供服务给Consul的阶段都运行了一个Consul agent . 发现服务或者设置和获取 key/value存储的数据不是必须运行agent.这个agent是负责对节点自身和节点上的服务进行健康检查的.

Agent与一个和多个Consul Server 进行交互.Consul Server 用于存放和复制数据.server自行选举一个领袖.虽然Consul可以运行在一台server , 但是建议使用3到5台来避免失败情况下数据的丢失.每个数据中心建议配置一个server集群.

你基础设施中需要发现其他服务的组件可以查询任何一个Consul 的server或者 agent.Agent会自动转发请求到server .

每个数据中运行了一个Consul server集群.当一个跨数据中心的服务发现和配置请求创建时.本地Consul Server转发请求到远程的数据中心并返回结果.

consul集群规划

192.168.31.178 192.168.31.179 192.168.31.178
Server Client Client

192.168.31.178 server2
192.168.31.179 server3
192.168.31.178 server4

consul部署

下载consul1.6.2 也可以下载最新的1.7.3版本的

[root@server2 etc]# cd /data/soft/
[root@server2 soft]# wget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zip    
[root@server2 soft]# unzip consul_1.6.2_linux_amd64.zip
[root@server2 soft]# mv  consul  /usr/local/bin/consul
[root@server2 soft]# scp /usr/local/bin/consul  server3:/usr/local/bin/
[root@server2 soft]# scp /usr/local/bin/consul  server4:/usr/local/bin/
[root@server2 soft]# ansible all -m shell -a " mkdir -p /data/consul /etc/consul.d"

配置client-server

server2 192.168.31.78(server主机)
      [root@server2 soft]# cat /etc/consul.d/consul_config.json
      {
          "advertise_addr": "192.168.31.178",
          "bind_addr": "192.168.31.178",
          "client_addr": "192.168.31.178",
          "ui": true,
          "log_level": "INFO",
          "domain": "consul",
          "node_name": "server2",
          "bootstrap_expect": 1,
          "server": true,
          "datacenter": "consul-cluster",
          "data_dir": "/data/consul/",
          "enable_syslog": true,
          "performance": {
            "raft_multiplier": 1
          },
          "dns_config": {
              "allow_stale": true,
              "max_stale": "15s"
          },
          "retry_join": [
              "192.168.31.178"
          ],
          "retry_interval": "10s",
          "skip_leave_on_interrupt": true,
          "leave_on_terminate": false,
          "ports": {
              "dns": 53,
              "http": 80
          },
          "recursors": [
              "114.114.114.114"
          ],
          "rejoin_after_leave": true,
          "addresses": {
              "http": "0.0.0.0",
              "dns": "0.0.0.0"
          }
     }
server3 192.168.31.79(client主机)
   [root@server3 consul.d]# cat /etc/consul.d/consul_config.json 
   {
       "bind_addr": "192.168.31.179",
       "datacenter": "consul-cluster",
       "data_dir": "/data/consul/",
       "enable_script_checks": true,
       "node_name": "server3",
       "retry_join": ["192.168.31.178"],
       "start_join": ["192.168.31.178"],
       "rejoin_after_leave": true,
       "retry_interval": "15s"
   }
server4 192.168.31.180(client主机)
  [root@server4 consul.d]# cat /etc/consul.d/consul_config.json 
  {
      "bind_addr": "192.168.31.180",
      "datacenter": "consul-cluster",
      "data_dir": "/data/consul/",
      "enable_script_checks": true,
      "node_name": "server4",
      "retry_join": ["192.168.31.178"],
      "start_join": ["192.168.31.178"],
      "rejoin_after_leave": true,
      "retry_interval": "15s"
  }

启动各节点

 主节点先启动:再启动client节点
   nohup consul agent -config-dir=/etc/consul.d > /data/consul/consul.log &

查看节点情况

consul  members --http-addr 192.168.31.178

技术图片

然后在各节点添加域名解析服务 注意要把主节点nameserver放在第一位 否则无法dig检测

技术图片

dig检测

技术图片
技术图片

ping检测

技术图片

部署完毕 也可以部署 三server节点需要修改为

  {
      "advertise_addr": "192.168.31.178",  #修改对应主机ip  
      "bind_addr": "192.168.31.178",    #修改对应主机ip
      "client_addr": "192.168.31.178",   #修改对应主机ip
      "ui": true,
      "log_level": "INFO",
      "domain": "consul",
      "node_name": "server2",
      "bootstrap_expect": 3,   #节点个数 3,5 单数
      "server": true,
      "datacenter": "consul-cluster",
      "data_dir": "/data/consul/",
      "enable_syslog": true,
      "performance": {
        "raft_multiplier": 1
      },
      "dns_config": {
          "allow_stale": true,
          "max_stale": "15s"
      },
      "retry_join": [
          "192.168.31.178",
          "192.168.31.179",
          "192.168.31.180"
      ],
      "retry_interval": "10s",
      "skip_leave_on_interrupt": true,
      "leave_on_terminate": false,
      "ports": {
          "dns": 53,
          "http": 80
      },
      "recursors": [
          "114.114.114.114"
      ],
      "rejoin_after_leave": true,
      "addresses": {
          "http": "0.0.0.0",
          "dns": "0.0.0.0"
      }
  }

常用命令

 agent  运行一个consul agent    consul agent -dev
 join   将agent加入到consul集群   consul join IP
 members    列出consul cluster集群中的members     consul members
 leave  将节点移除所在集群   consul leave

配置介绍

 acl_datacenter:只用于server,指定的datacenter的权威ACL信息,所有的servers和datacenter必须同意ACL datacenter
 acl_default_policy:默认是allow
 acl_down_policy:
 acl_master_token:
 acl_token:agent会使用这个token和consul server进行请求
 acl_ttl:控制TTL的cache,默认是30s
 addresses:一个嵌套对象,可以设置以下key:dns、http、rpc
 advertise_addr:等同于-advertise
 bootstrap:等同于-bootstrap
 bootstrap_expect:等同于-bootstrap-expect
 bind_addr:等同于-bind
 ca_file:提供CA文件路径,用来检查客户端或者服务端的链接
 cert_file:必须和key_file一起
 check_update_interval:
 client_addr:等同于-client
 datacenter:等同于-dc
 data_dir:等同于-data-dir
 disable_anonymous_signature:在进行更新检查时禁止匿名签名
 disable_remote_exec:禁止支持远程执行,设置为true,agent会忽视所有进入的远程执行请求
 disable_update_check:禁止自动检查安全公告和新版本信息
 dns_config:是一个嵌套对象,可以设置以下参数:allow_stale、max_stale、node_ttl 、service_ttl、enable_truncate
 domain:默认情况下consul在进行DNS查询时,查询的是consul域,可以通过该参数进行修改
 enable_debug:开启debug模式
 enable_syslog:等同于-syslog
 encrypt:等同于-encrypt
 key_file:提供私钥的路径
 leave_on_terminate:默认是false,如果为true,当agent收到一个TERM信号的时候,它会发送leave信息到集群中的其他节点上。
 log_level:等同于-log-level
 node_name:等同于-node
 ports:这是一个嵌套对象,可以设置以下key:dns(dns地址:8600)、http(http api地址:8500)、rpc(rpc:8400)、serf_lan(lan port:8301)、serf_wan(wan port:8302)、server(server rpc:8300)
 protocol:等同于-protocol
 recursor:
 rejoin_after_leave:等同于-rejoin
 retry_join:等同于-retry-join
 retry_interval:等同于-retry-interval
 server:等同于-server
 server_name:会覆盖TLS CA的node_name,可以用来确认CA name和hostname相匹配
 skip_leave_on_interrupt:和leave_on_terminate比较类似,不过只影响当前句柄
 start_join:一个字符数组提供的节点地址会在启动时被加入
 statsd_addr:
 statsite_addr:
 syslog_facility:当enable_syslog被提供后,该参数控制哪个级别的信息被发送,默认Local0
 ui_dir:等同于-ui-dir
 verify_incoming:默认false,如果为true,则所有进入链接都需要使用TLS,需要客户端使用ca_file提供ca文件,只用于consul server端,因为client从来没有进入的链接
 verify_outgoing:默认false,如果为true,则所有出去链接都需要使用TLS,需要服务端使用ca_file提供ca文件,consul server和client都需要使用,因为两者都有出去的链接
 watches:watch一个详细名单

注意多个数据中心的访问需要根据对应的 datacenter 来访问

技术图片
技术图片
技术图片

以上是关于consul集群部署-01的主要内容,如果未能解决你的问题,请参考以下文章

consul集群部署-01

Docker - 容器部署 Consul 集群

部署Consul建立Docker集群

部署Consul建立Docker集群

Docker------Docker Consul集群部署

Docker------Docker Consul集群部署