精华内容
下载资源
问答
  • 微服务consul系列错误日志

    千次阅读 2019-10-23 15:27:19
    1. 【Mac-dashen:~ student11$ consul agent -dev -ui -client 0.0.0.0 】启动错误 ==> Error starting agent: Failed to start Consul server: Failed to start RPC layer: listen tcp 127.0.0.1:8300: bind: ...

    1. 【Mac-dashen:~ student11$ consul agent -dev -ui -client 0.0.0.0 】启动错误

    ==> Error starting agent: Failed to start Consul server: Failed to start RPC layer: listen tcp 127.0.0.1:8300: bind: address already in use
    这个地址已经在使用了,说明你已经启动了。

    1. 命令:ps -ef | grep consul 查看使用情况
      Mac-dashen:~ student11$ ps -ef | grep consul
      503 28703 1 0 4:33下午 ?? 13:19.55 consul agent -dev
      503 35119 34913 0 11:48上午 ttys002 0:00.01 grep consul

    2. 如果想要关闭,执行命令 kill consul_id 强制杀死;
      例如:Mac-dashen:~ student11$ kill 28703

    展开全文
  • Server配置Consul-Client配置Consul启动Unit配置(CentOS 7)Consul-Server配置Consul-Client配置Consul日志配置重定向到指定文件(不推荐)使用syslog保存日志使用自带-log-file选项保存日志(新版功能)Consul启动启动...

    生产环境Consul安装升级

    Consul目录规划

    • Consul安装目录/usr/local/consul-VERSION(VERSION为版本号),安装完成后软链接到/usr/local/consul
    • Consul二进制程序目录/usr/local/consul/bin
    • Consul配置文件目录为/usr/local/consul/consul.d
    • Consul数据目录为/usr/local/consul/data
    • Consul日志目录为/usr/local/consul/logs
    • Consul快照目录为/usr/local/consul/snapshot

    完整目录结构如下:

    ~]# tree -C -L 1 /usr/local/consul
    /usr/local/consul
    ├── bin
    ├── consul.d
    ├── data
    ├── logs
    └── snapshot
    

    Consul安装

    创建相应目录

    ~]# mkdir -p /usr/local/consul-1.5.1
    ~]# ln -s /usr/local/consul-1.5.1/ /usr/local/consul
    ~]# mkdir -p /usr/local/consul/{bin,consul.d,data,logs,snapshot}
    

    下载程序包并解压

    官网下载地址:https://releases.hashicorp.com/consul/

    下载软件包:

    ~]# wget https://releases.hashicorp.com/consul/1.5.1/consul_1.5.1_linux_amd64.zip
    

    解压

    ~]# unzip consul_1.5.1_linux_amd64.zip -d /usr/local/consul/bin/
    

    导出环境变量

    ~]# echo 'export PATH=$PATH:/usr/local/consul/bin' > /etc/profile.d/consul.sh
    ~]# source /etc/profile.d/consul.sh
    

    Consul配置

    Consul 可通过命令行指定具体启动参数或者指定配置文件目录启动为前台进程。我们可以通过nohup或者systemd等等启动为后台进程。这里我们通过systemd启动为后台进程。

    在生产环境中强烈推荐使用json或hcl格式的配置文件进行启动,配置文件提供了某些命令行无法提供的参数和功能,如开启prometheus监控等等。

    systemd通过指定全部命令行参数启动

    Consul启动参数配置

    Consul启动参数配置文件为/etc/sysconfig/consul。配置文件参数可酌情更改。

    Consul-Server配置
    ############ consul-1.5.1配置#############
    ~]# cat /etc/sysconfig/consul
    # Consul start options
    OPTIONS="\
    -server \
    -datacenter=dc1 \
    -node=consul-server-1 \
    -bind=10.114.0.59 \
    -client=0.0.0.0 \
    -config-dir=/usr/local/consul/consul.d/ \
    -data-dir=/usr/local/consul/data/ \
    -bootstrap-expect=3 \
    -join=10.114.0.59 \
    -rejoin \
    -ui \
    -pid-file=/run/consul-server.pid \
    -log-file=/usr/local/consul/logs/ \
    -log-level=info"
    
    
    Consul-Client配置
    ############ consul-1.5.1配置#############
    ~]# cat /etc/sysconfig/consul
    # Consul start options
    OPTIONS="\
    -datacenter=dc1 \
    -node=consul-client-1 \
    -bind=10.114.0.61 \
    -client=0.0.0.0 \
    -config-dir=/usr/local/consul/consul.d/ \
    -data-dir=/usr/local/consul/data/ \
    -join=10.114.0.59 \
    -ui \
    -pid-file=/run/consul-client.pid \
    -log-file=/usr/local/consul/logs/ \
    -log-level=info"
    

    Consul启动Unit配置(CentOS 7)

    Consul启动Unit配置文件为/usr/lib/systemd/system/consul.service 。配置文件参数可酌情更改。需配置server端和client端。

    ~]# cat /usr/lib/systemd/system/consul.service
    [Unit]
    Description="HashiCorp Consul - A service mesh solution"
    Documentation=https://www.consul.io
    Requires=network-online.target
    After=network-online.target
    ConditionFileNotEmpty=/etc/sysconfig/consul
    
    [Service]
    User=root
    Group=root
    EnvironmentFile=/etc/sysconfig/consul
    # set GOMAXPROCS to number of processors
    Environment=GOMAXPROCS=$(nproc)
    ExecStart=/usr/local/consul/bin/consul agent $OPTIONS
    ExecReload=/usr/local/consul/bin/consul reload
    KillMode=process
    Restart=on-failure
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target
    

    修改完Unit文件后需重新载入

    ~]# systemctl daemon-reload
    

    Consul启动

    启动Server端和Client端
    ~]# systemctl start consul
    ~]# systemctl enable consul
    

    systemd通过指定配置文件目录启动

    配置文件支持JSON和HCL格式

    配置文件模板

    ~]# cat config.example 
    # The configuration file must be in JSON or HCL format.
    
    # Consul server agents typically require a superset of configuration required by 
    # Consul client agents. We will specify common configuration used by all Consul agents 
    # in consul.hcl and server specific configuration in server.hcl.
    
    #####     JSON configuration settings    ####
    #############################################
    
    #####     General configuration         #####
    # Create a configuration file at /usr/local/consul/consul.d/consul.json
    # Add this configuration to the consul.json configuration file:
    {
        "datacenter": "dc1",
        "client_addr": "0.0.0.0",
        "bind_addr": "{{ GetInterfaceIP \"eth0\" }}",
        "data_dir": "/usr/local/consul/data",
        "retry_interval": "20s",
        "retry_join": ["10.114.0.59","10.114.0.60"],
        "enable_local_script_checks": true,
        "log_file": "/usr/local/consul/logs/",
        "log_level": "info",
        "pid_file": "/var/run/consul.pid",
        "performance": {
            "raft_multiplier": 1
        },
        "telemetry": {
            "prometheus_retention_time": "120s",
            "disable_hostname": true
        }
    }
    
    #####     Server configuration          #####
    # Create a configuration file at /usr/local/consul/consul.d/server.json.
    # Add this configuration to the server.json configuration file:
    {
        "node_name": "consul-server-1",
        "bootstrap_expect": 2,
        "server": true,
        "ui": true
    }
    
    #####   HCL configuration settings     ######
    #############################################
    # HCL Syntax: https://github.com/hashicorp/hcl#syntax
    #
    #####     General configuration         #####
    # Create a configuration file at /usr/local/consul/consul.d/consul.hcl
    # Add this configuration to the consul.hcl configuration file:
    datacenter = "dc1"
    bind_addr = "{{ GetInterfaceIP \"eth0\" }}"
    client_addr = "0.0.0.0"
    data_dir = "/usr/local/consul/data"
    retry_interval = "20s"
    retry_join = ["10.114.0.59","10.114.0.60"]
    enable_local_script_checks = true
    log_file = "/usr/local/consul/logs/"
    pid_file = "/var/run/consul.pid"
    log_level = "info"
    performance {
      raft_multiplier = 1
    }
    telemetry {
      prometheus_retention_time = "120s"
      disable_hostname = true
    }
    #####     Server configuration         #####
    
    # Create a configuration file at /usr/local/consul/consul.d/server.hcl.
    # Add this configuration to the server.hcl configuration file:
    node_name = "consul-server-1"
    bootstrap_expect = 2
    server = true
    ui = true
    

    Consul配置文件参数配置

    Consul-Server配置
    ]# cat consul.json
    {
        "datacenter": "dc1",
        "client_addr": "0.0.0.0",
        "bind_addr": "{{ GetInterfaceIP \"eth0\" }}",
        "data_dir": "/usr/local/consul/data",
        "retry_interval": "20s",
        "retry_join": ["10.111.67.1","10.111.67.2","10.111.67.3","10.111.67.4","10.111.67.5"],
        "enable_local_script_checks": true,
        "log_file": "/usr/local/consul/logs/",
        "log_level": "debug",
        "enable_debug": true,
        "pid_file": "/var/run/consul.pid",
        "performance": {
            "raft_multiplier": 1
        },
        "telemetry": {
            "prometheus_retention_time": "120s",
            "disable_hostname": true
        }
    }
    
    ]# cat server.json
    {
        "node_name": "consul-server-1",
        "bootstrap_expect": 3,
        "server": true,
        "ui": true
    }
    
    Consul-Client配置
    ]# cat consul.json
    {
        "datacenter": "dc1",
        "client_addr": "0.0.0.0",
        "bind_addr": "{{ GetInterfaceIP \"eth0\" }}",
        "data_dir": "/usr/local/consul/data",
        "retry_interval": "20s",
        "retry_join": ["10.111.67.1","10.111.67.2","10.111.67.3","10.111.67.4","10.111.67.5"],
        "enable_local_script_checks": true,
        "log_file": "/usr/local/consul/logs/",
        "log_level": "info",
        "pid_file": "/var/run/consul.pid",
        "performance": {
            "raft_multiplier": 1
        },
        "telemetry": {
            "prometheus_retention_time": "300s",
            "disable_hostname": true
        }
    }
    

    Consul启动Unit配置(CentOS 7)

    ]# cat /usr/lib/systemd/system/consul.service 
    [Unit]
    Description="HashiCorp Consul - A service mesh solution"
    Documentation=https://www.consul.io/
    Requires=network-online.target
    After=network-online.target
    ConditionFileNotEmpty=/usr/local/consul/consul.d/consul.json
    
    [Service]
    ExecStart=/usr/local/consul/bin/consul agent -config-dir=/usr/local/consul/consul.d/
    ExecReload=/usr/local/consul/bin/consul reload
    KillMode=process
    Restart=on-failure
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target
    

    修改完Unit文件后需重新载入

    ~]# systemctl daemon-reload
    

    Consul启动脚本(CentOS 6)

    ~]# cat /etc/init.d/consul 
    #!/bin/sh
    #
    # consul - this script starts and stops the consul daemon
    #
    # chkconfig:   - 86 16
    # description:  Consul is a distributed service mesh to connect, secure, \
    #               and configure services across any runtime platform and public or private cloud.
    # processname: consul
    # config:      /usr/local/consul/consul.d/consul.json
    # pidfile:     /var/run/consul.pid
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    # Source networking configuration.
    . /etc/sysconfig/network
    
    # Check that networking is up.
    [ "$NETWORKING" = "no" ] && exit 0
    
    consul="/usr/local/consul/bin/consul"
    prog=$(basename $consul)
    
    lockfile="/var/lock/subsys/${prog}"
    pidfile="/var/run/${prog}.pid"
    
    CONSUL_CONF_DIR="/usr/local/consul/consul.d"
    CONSUL_CONF_FILE="${CONSUL_CONF_DIR}/consul.json"
    
    start() {
        [ -x $consul ] || exit 4
        [ -f $CONSUL_CONF_FILE ] || exit 5
        echo -n $"Starting $prog: "
        nohup $consul agent -config-dir=$CONSUL_CONF_DIR &>/dev/null &
        retval=$?
        if [ $retval -eq 0 ];then
            echo_success
            echo
            touch $lockfile
        else
            echo_failure
            echo         
        fi
        return $retval
    }
    
    stop() {
        echo -n $"Stopping $prog: "
        killproc -p $pidfile $prog
        retval=$?
        echo
        [ $retval -eq 0 ] && rm -f $lockfile
        return $retval
    }
    
    restart() {
        stop
        start
    }
    
    reload() {
        echo -n $"Reloading $prog: "
        #killproc -p $pidfile $prog -HUP
        echo
        $consul reload &>/dev/null
    }
    
    configtest() {
        $consul validate $CONSUL_CONF_DIR
    }
    
    rh_status() {
        status $prog
    }
    
    case "$1" in
        start)
            rh_status && exit 0
            $1
            ;;
        stop)
            rh_status || exit 0
            $1
            ;;
        restart|configtest)
            $1
            ;;
        reload)
            rh_status || exit 7
            $1
            ;;
        status)
            rh_$1
            ;;
        *)
            echo $"Usage: $0 {start|stop|reload|configtest|status|restart}"
            exit 2
    esac
    

    Consul启动

    # Centos 7
    ~]# systemctl start consul
    ~]# systemctl enable consul
    # CentOS 6
    ~]# /etc/init.d/consul start
    ~]# chkconfig --add consul
    

    Consul启动

    systemctl start consul
    systemctl enable consul
    

    快照备份

    经常进行快照的备份,以防集群数据丢失时用快照数据进行还原。

    备份脚本

    ~]# cat /scripts/consul-backup.sh 
    #!/bin/bash
    
    # DATE
    DATE=`date +%F_%H`
    
    # Consul Home
    CONSUL_HOME="/usr/local/consul"
    CONSUL_BAK_DIR="$CONSUL_HOME/snapshot"
    
    [ -d $CONSUL_BAK_DIR ] || mkdir -p $CONSUL_BAK_DIR
    $CONSUL_HOME/bin/consul snapshot save $CONSUL_BAK_DIR/${DATE}.snap
    

    定时任务

    通过Linux定时任务定时执行

    ~]# crontab -l
    # Consul backup         Consul          henry             2019-05-14
    0 * * * * /bin/bash /scripts/consul-backup.sh >/dev/null 2>&1
    

    Consul升级

    Consul升级方案:

    由于Consul关系到整个系统的正常运作,所以升级的时候还是要很小心。最好在测试环境试验多几次,再到生产环境升级。升级的状况可以归纳为下面三种,需要对号入座之后再进行升级。

    ◆ 特殊版本的升级。在upgrade-specific页面查看当前升级的版本是否有特殊说明。比如:0.5.1之前的版本直接升级到0.6版本,要借助工具consul-migrate进行数据迁移。

    ◆ 不兼容的升级。使用consul -v查看新版的向后兼容协议版本号,当出现与当前版本不兼容时,需要分两步升级。先通过参数-protocal=旧的协议版本号,把整个集群升级一次,再把启动命令中的参数-protocal去掉来重启所有节点。

    ◆ 标准的升级。如果上面两种情况都不是,那么恭喜你,你需要做的只是简单的标准升级。即:停止旧版本的agent,然后启动新版本的agent。PS:其实大多数情况都是标准升级。

    升级节点的推荐顺序是,先升级Server的Follower节点,再升级Server的Leader节点,最后升级所有Client的节点。

    展开全文
  • Consul

    2020-01-06 11:02:42
    consul 简介 Consul是一个服务发现和注册的工具,其具有分布式、高扩展性能特点。 Consul主要包含如下功能: 服务发现: 支持 http 和 dns 两种协议的服务注册和发现方式。 监控检查: 支持多种方式的健康检查。 ...

    consul

    简介

    Consul是一个服务发现和注册的工具,其具有分布式、高扩展性能特点。
    在这里插入图片描述

    Consul主要包含如下功能:

    服务发现: 支持 http 和 dns 两种协议的服务注册和发现方式。
    监控检查: 支持多种方式的健康检查。
    Key/Value存储: 支持通过HTTP API实现分布式KV数据存储。
    多数据中心支持:支持任意数量数据中心。

    实验步骤

    先解压

    unzip consul_1.4.0_linux_amd64.zip -d /usr/bin
    

    查看版本

    consul -v 
    

    创建两个目录:
    存放consul持久化数据的目录:

    mkdir -p /opt/consul/data
    

    存放consul配置文件:

    mkdir -p /opt/consul/config
    

    以上步骤四台都是以一样的
    8500是consul的默认端口号

    下面每个主机写的要看清楚有所不同
    ClientA:

    consul agent -server -bootstrap-expect 2 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.57 -client 0.0.0.0 -enable-script-checks=true -node=consul1 -datacenter=kgc
    

    -server //表示一个服务端代理
    -bootstrap-expect 2 //表示数据中心期待的节点数量
    -data-dir //数据目录的位置
    -config-dir //配置文件目录
    -bind //当前这个bind绑定的ip地址
    -client //允许谁访问
    -enable-script-checks=true //启用心跳检查
    -node //当前节点的名字
    -datacenter=kgc

    ClientB:

    consul agent -server -node=consul2 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.3 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.43.57
    

    ClientC:

    consul agent -server -node=consul3 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.254 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.43.57
    

    ClientD:
    加了ui代表能打开图形界面

    consul agent -ui -node=client1 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.205 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.43.57
    

    第四台打了ui所以能打开web界面
    在这里插入图片描述

    查看集群所有成员:
    consul members //在任意一台上面都可以

    在这里插入图片描述
    查看consul的详细信息:
    consul info
    查看consul的集群群主:

    curl http://127.0.0.1:8500/v1/status/leader
    

    查看consul的成员:

    curl http://127.0.0.1:8500/v1/status/peers
    

    查看注册到consul上的所有服务:

    curl http://127.0.0.1:8500/v1/catalog/services
    

    查看注册到consul上的服务的信息:

    curl http://127.0.0.1:8500/v1/catalog/service/nginx
    

    查看consul集群节点的详细信息
    pretty 加?pretty是美化输出

    curl http://127.0.0.1:8500/v1/catalog/nodes?
    

    consul命令行中对键值对的操作(kv=key/value)
    1、创建或者更新键值对----->put

    consul kv put redis/config/connection  5   #有值是修改,没有是创建
    
                  键                  值
    

    2、获取键值–get

    consul kv get redis
    

    在这里插入图片描述
    3、查询详情–detailed

    consul kv get -detailed redis
    

    在这里插入图片描述
    4、删除一个键–delete

    consul kv delete  redis
    

    5、递归删除–recurse

    consul kv delete -recurse  redis/
    

    6、导出键值–export

     consul kv export redis/   #就相当于查看一样
    

    7、列出指定前缀的键–keys

    consul kv get -keys redis/
    

    在这里插入图片描述
    8、分隔符–separator —默认情况下是/

    consul kv get -keys -separator="" redis
    

    在这里插入图片描述
    9、列出所有的键

    consul kv get -keys -separator="" 
    

    在这里插入图片描述
    10、导入键值对(从.json文件中导入键值对)
    第一种:consul kv import @value.json
    第二种:cat @value.json | consul lv import -

    把第四台停掉

    rm -rf /opt/consul/data/*
    
    rm -rf /opt/consul/config/*
    

    四台都要清空

    其他两台清空之后然后在打命令
    把第三台和第四台都稍微的小改一下
    ClientC:

    consul agent  -node=client1 -ui  -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.3 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.43.57
    

    ClientD:

    consul agent -server -ui -node=consul3   -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.43.205 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.43.57
    

    在随便下载git
    然后把代码仓库文件复制到其他

    yum  -y install git 
    
    git clone http://github.com/luojunyong/spring-cloud-examples.git   #克隆代码仓库到本地
    
    scp -r spring-cloud-examples 192.168.43.3:/root/      #记得要加 -r 因为有目录
    
    scp -r spring-cloud-examples 192.168.43.205:/root/ 
    
    scp -r spring-cloud-examples 192.168.43.254:/root/ 
    
    consul结合nginx实现微服务动态联动

    只保留前面三台的consul,停掉两台生产者和消费者,第四台的consul
    将前面三台consul的/opt/consul/data 目录清空,重新启动

    第四台

    tar -zxvf consul-template_0.19.5_linux_amd64.tgz 
    
    mv consul-template /usr/bin
    
    mkdir -p /opt/consul/logs 
    
    mkdir -p /usr/local/nginx/conf/vhost
    
    vim /opt/consul/config/nginx-consul-web1.ctml
    
    upstream web1 {
            ip_hash;       //调度算法
    {{range service "service-producer"}} //抓取微服务的范围为名字中带有“service-producer”
            server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=30s;
            {{end}}
    }
     
    server {
            listen 80;
            server_name www.kgc.cn;
            location / {
              proxy_connect_timeout  300s;    //连接超时时间
              proxy_send_timeout     900s;    //发送超时时间
              proxy_read_timeout     900s;    //发送读取时间
              proxy_buffer_size       32k;     //代理缓冲区的大小
              proxy_buffers         4 32k;     //代理缓冲区的个数和单个的大小
              proxy_busy_buffers_size 64k;     // 代理缓冲区单个最大的大小
              proxy_redirect          off;     // 禁止该功能
              proxy_set_header Host $host;
              proxy_set_header Referer $http_referer;
              proxy_set_header X-Real-IP  $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_pass http://web1;
             }
    }
    

    proxy_redirect 指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值

    在第一台

    cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-producer
    
    vim src/main/resources/application.properties
    

    在这里插入图片描述

    mvn  spring-boot:run
    
    spring.cloud.consul.discovery.preferIpAddress=true
    

    确保consul注册中心能够获取到生产者的IP地址

    第二台

    cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-producer-2
    
    vim src/main/resources/application.properties
    

    在这里插入图片描述

    第三台

    cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-consumer/
    
    vim src/main/resources/application.properties
    

    在这里插入图片描述

    访问第三台上的8500端口
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    第四台

    vim /usr/local/nginx/conf/nginx.conf
    

    在server部分前

    include /usr/local/nginx/conf/vhost/*.conf;
    
    consul-template --consul-addr 192.168.50.105:8500 -template /opt/consul/config/nginx-consul-web1.ctml:/usr/local/nginx/conf/vhost/web1.conf:"/usr/local/nginx/sbin/nginx -s reload" -dry
    

    -consul-addr 指定你当前的注册中心
    -template 指定你生产的配置文件是根据哪个模板生产
    -dry 仅运行此命令而不生成配置文件

    在这里插入图片描述

    nohup consul-template --consul-addr 192.168.50.105:8500 -template /opt/consul/config/nginx-consul-web1.ctml:/usr/local/nginx/conf/vhost/web1.conf:"/usr/local/nginx/sbin/nginx -s reload" --log-level=info > /opt/consul/logs/consul-template.log 2>&1 & 2>&1  #不管是正确输出还是错误输出都转化成标准输出
    

    生成的日志的级别为info
    在这里插入图片描述

    因为consul的配置文件里指定为ip_hash的调度算法,所以这里不再轮询

    在这里插入图片描述

    在第四台监控consul日志文件,并停止第一台或者第二台任意一个生产者

    tailf /opt/consul/logs/consul-template.log
    

    在这里插入图片描述
    再访问一次就可以看到
    在这里插入图片描述

    四台主机都是服务端
    在这里插入图片描述

    然后前三台安装maven
    然后

    yum -y install git 
    
    git clone https://github.com/luojunyong/spring-cloud-examples.git
    

    三台相同操作

    cd spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-producer
    
    vim src/main/resources/application.properties
    

    在这里插入图片描述

    展开全文
  • consul

    2021-01-24 11:58:36
    consul概念: consul是用来做注册中心的 他和eureka是一样的 注册中心一般都是集群的形式存在 保证高可用 consul像是一个nosql 存储着键值对 可以做存储 consul是c/s架构的 其客户端负责和用户进行通讯 没有实际的...

    consul概念:

    consul是用来做注册中心的 他和eureka是一样的 注册中心一般都是集群的形式存在
    保证高可用 consul像是一个nosql 存储着键值对 可以做存储
    consul是c/s架构的 其客户端负责和用户进行通讯 没有实际的意义 真正工作的是后端的服务端 存储数据也是在服务端存储

    环境:

    主机ip
    consul-1192.168.10.20
    consul-2192.168.10.30
    consul-3192.168.10.40
    client客户端192.168.10.10

    在第一、二台consul主机和第四台client主机上安装jdk和maven环境
    安装jdk

    [root@localhost ~]# java -version
    openjdk version "1.8.0_102"
    OpenJDK Runtime Environment (build 1.8.0_102-b14)
    OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
    [root@localhost ~]# rm -rf /usr/bin/java #删除原本主机上的Java程序
    [root@localhost ~]# java -version
    -bash: /usr/bin/java: 没有那个文件或目录
    [root@localhost ~]# tar -zxf jdk-8u201-linux-x64.tar.gz 
    [root@localhost ~]# mv jdk1.8.0_201/ /usr/local/java
    

    添加环境变量(通常情况我们使用第二种方法)

    [root@localhost bin]# vim /etc/profile
    #末尾添加
    export JAVA_HOME=/usr/local/java
    export JRE_HOME=/usr/local/java/jre
    export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
    export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    [root@localhost bin]# source /etc/profile
    [root@localhost bin]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java/jre/bin
    [root@localhost bin]# java -version
    java version "1.8.0_201"
    Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
    

    安装maven

    [root@localhost ~]# tar -zxf apache-maven-3.6.0-bin.tar.gz 
    [root@localhost ~]# mv apache-maven-3.6.0 /usr/local/maven
    [root@localhost ~]# vim /etc/profile
    export PATH=$PATH:/usr/local/maven/bin
    [root@localhost ~]# source /etc/profile
    [root@localhost ~]# mvn -v
    Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
    Maven home: /usr/local/maven
    Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: /usr/local/java/jre
    Default locale: zh_CN, platform encoding: UTF-8
    OS name: "linux", version: "3.10.0-514.el7.x86_64", arch: "amd64", family: "unix"
    

    安装consul服务(四台都要安)

    [root@localhost ~]# unzip consul_1.4.0_linux_amd64.zip -d /usr/bin/
    Archive:  consul_1.4.0_linux_amd64.zip
      inflating: /usr/bin/consul         
    [root@localhost ~]# mkdir -p /opt/consul/{data,config,logs}
    

    参数释义:
    data:存放数据的目录
    config:存放配置信息的目录
    logs:存放日志

    consul没有配置文件,所以直接通过启动命令来配置称为集群

    consul-1

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# consul agent -server -node=consul1 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.10.20 -client 0.0.0.0 -enable-script-checks=true  -datacenter=kgc -bootstrap-expect=2
    

    参数释义:
    consul 命令
    agent 启动一个代理
    -server 以服务端启动
    -node=consul1 当前节点在集群中名称
    -data-dir /opt/consul/data/ 数据文件的目录
    -config-dir /opt/consul/config/ 配置文件的目录
    -bind 192.168.2.10 监听的ip
    -client 0.0.0.0 指定的客户端 代表所有的客户端
    -enable-script-checks=true 开启心跳连接
    -datacenter=kgc 数据中心的名称
    -bootstrap-expect=2 至少两个节点形成集群

    consul-2

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# consul agent -server -ui -node=consul2 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.10.30 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.10.20
    

    参数释义:
    -ui :图形化界面
    -join:加入集群

    consul-3

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# consul agent -server -ui -node=consul3 -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.10.40 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.10.20
    

    client客户端

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# consul agent  -node=client -data-dir /opt/consul/data/ -config-dir /opt/consul/config/ -bind 192.168.10.10 -client 0.0.0.0 -enable-script-checks=true -datacenter=kgc -join 192.168.10.20
    

    执行完后所有的主机都会阻塞终端,可以在第一台consul主机上另开一个终端去查看一下集群是否构建成功

    [root@localhost ~]# consul members
    Node     Address             Status  Type    Build  Protocol  DC   Segment
    consul1  192.168.10.20:8301  alive   server  1.4.0  2         kgc  <all>
    consul2  192.168.10.30:8301  alive   server  1.4.0  2         kgc  <all>
    consul3  192.168.10.40:8301  alive   server  1.4.0  2         kgc  <all>
    client   192.168.10.10:8301  alive   client  1.4.0  2         kgc  <default>
    
    [root@localhost ~]# curl http://192.168.10.20:8500/v1/status/leader
    "192.168.10.20:8300"
    [root@localhost ~]# curl http://192.168.10.20:8500/v1/status/peers
    ["192.168.10.20:8300","192.168.10.30:8300","192.168.10.40:8300"]
    
    [root@localhost ~]# consul info #查看集群的信息
    agent:
    	check_monitors = 0
    	check_ttls = 0
    	checks = 0
    	services = 0
    build:
    	prerelease = 
    	revision = 0bddfa23
    	version = 1.4.0
    consul:
    	acl = disabled
    	bootstrap = false
    	known_datacenters = 1
    	leader = true
    	leader_addr = 192.168.10.20:8300
    	server = true
    ……………………
    
    [root@localhost ~]# curl http://192.168.10.20:8500/v1/catalog/nodes?pretty #查看所有的节点,并且转换为json格式
    [
        {
            "ID": "e280d23d-58b1-72b4-1c93-5a240f0ee1cd",
            "Node": "client",
            "Address": "192.168.10.10",
            "Datacenter": "kgc",
            "TaggedAddresses": {
                "lan": "192.168.10.10",
                "wan": "192.168.10.10"
            },
            "Meta": {
                "consul-network-segment": ""
            },
            "CreateIndex": 23,
            "ModifyIndex": 24
        },
    ………………
    

    访问第二台consul-2的ip和端口(因为第一台是没有图形化界面的,只有第二台和第三台有,所以这儿我们可以去访问验证查看一下)
    在这里插入图片描述

    consul的基础命令

    nosql 存储数据 添加数据

    1、创建或者更新数据

    [root@localhost ~]# consul kv put redis/config/one 1 #添加数据到集群
    Success! Data written to: redis/config/one
    [root@localhost ~]# consul kv get redis/config/one  #查看
    1
    

    2、获取值

    [root@localhost ~]# consul kv get -detailed redis/config/one
    CreateIndex      379
    Flags            0
    Key              redis/config/one
    LockIndex        0
    ModifyIndex      379
    Session          -
    Value            1
    

    在这里插入图片描述
    3、查看详情

    [root@localhost ~]# consul kv get -detailed redis/config/one
    CreateIndex      379
    Flags            0
    Key              redis/config/one
    LockIndex        0
    ModifyIndex      379
    Session          -
    Value            1
    
    

    4、删除

    [root@localhost ~]# consul kv delete redis/config/one #删除
    Success! Deleted key: redis/config/one
    [root@localhost ~]# consul kv get redis/config/one
    Error! No key exists at: redis/config/one
    

    5、递归删除

    [root@localhost ~]# consul kv put redis/config/one 1
    Success! Data written to: redis/config/one
    [root@localhost ~]# consul kv put redis/config/two 2
    Success! Data written to: redis/config/two
    [root@localhost ~]# consul kv delete -recurse redis  
    Success! Deleted keys with prefix: redis
    [root@localhost ~]# consul kv get redis/two
    Error! No key exists at: redis/two
    

    6、列出指定前缀的内容

    [root@localhost ~]# consul kv put redis/config/one 1
    Success! Data written to: redis/config/one
    [root@localhost ~]# consul kv put redis/config/two 2
    Success! Data written to: redis/config/two
    [root@localhost ~]# consul kv get -keys redis/config/
    redis/config/one
    redis/config/two
    
    

    7、列出所有的键

    [root@localhost ~]# consul kv get -keys
    redis/
    

    consul作为注册中心的功能

    在这里插入图片描述

    consul-1、consul-2、client客户端
    注:另开终端执行

    root@localhost ~]# git clone https://github.com/luojunyong/spring-cloud-examples.git
    正克隆到 'spring-cloud-examples'...
    remote: Enumerating objects: 700, done.
    remote: Total 700 (delta 0), reused 0 (delta 0), pack-reused 700
    接收对象中: 100% (700/700), 66.07 KiB | 0 bytes/s, done.
    处理 delta 中: 100% (216/216), done.
    

    consul-1 生产者

    [root@localhost ~]# cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-producer
    [root@localhost spring-cloud-consul-producer]# vim src/main/resources/application.properties
     3 spring.cloud.consul.host=192.168.10.40 #这儿写的是第三台consul-3的ip(也就是没有安装maven的那台主机)
    [root@localhost spring-cloud-consul-producer]# source /etc/profile
    [root@localhost spring-cloud-consul-producer]# mvn spring-boot:run
    

    consul-2 生产者

    [root@localhost ~]# cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-producer-2/
    [root@localhost spring-cloud-consul-producer-2]# vim src/main/resources/application.properties
    3 spring.cloud.consul.host=192.168.10.40
    [root@localhost spring-cloud-consul-producer-2]# source /etc/profile
    [root@localhost spring-cloud-consul-producer-2]# mvn spring-boot:run
    

    client 消费者

    [root@localhost ~]# cd /root/spring-cloud-examples/spring-cloud-consul/spring-cloud-consul-consumer/
    [root@localhost spring-cloud-consul-consumer]# vim src/main/resources/application.properties 
    spring.cloud.consul.host=192.168.10.40
    [root@localhost spring-cloud-consul-consumer]# source /etc/profile
    [root@localhost spring-cloud-consul-consumer]# mvn spring-boot:run
    

    第四台client另开一个终端去访问

    [root@localhost ~]# curl 192.168.10.10:8503/call
    helle consul
    [root@localhost ~]# curl 192.168.10.10:8503/call
    helle consul two 
    

    再次去图形化界面查看验证
    在这里插入图片描述

    Consul和nginx结合 实现动态代理微服务

    在这里插入图片描述

    client客户端的consumer停止:
    安装nginx

    [root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel pcre
    [root@localhost ~]# tar -zxf nginx-1.6.2.tar.gz -C /usr/src/
    [root@localhost ~]# useradd -M -s /sbin/nologin nginx
    [root@localhost ~]# cd /usr/src/nginx-1.6.2/
    [root@localhost nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre && make && make install
    [root@localhost nginx-1.6.2]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
    
    [root@localhost ~]# tar -zxf consul-template_0.19.5_linux_amd64.tgz -C /usr/src/
    [root@localhost ~]# mkdir /usr/local/nginx/conf/vhost
    [root@localhost ~]# vim /opt/consul/config/nginx-consul.ctmpl
    upstream web1 {
            ip_hash;
            {{ range service "service-producer"}}
            server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=20s;
            {{end}}
    }
    
    server {
            listen 80;
            server_name web1.nginx.com;
    
            location / {
                    proxy_send_timeout 900s;
                    proxy_read_timeout 900s;
                    proxy_connect_timeout 900s;
                    proxy_buffer_size 32k;
                    proxy_buffers  4  32k;
                    proxy_busy_buffers_size 64k;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header Referer $http_referer;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_pass http://web1;
            }
    }
    #参数释义
    ip_hash;   调度算法
    {{ range service "service-producer"}}   注册中心的名字
    proxy_send_timeout 900s;  代理服务器连接后端服务器的超时时间
    proxy_read_timeout 900s;  代理服务器发送到后端服务器的超时时间
    proxy_connect_timeout 900s;  后端服务器读取的超时时间
    proxy_buffer_size 32k;   指定缓存区的大小
    proxy_buffers  4  32k;  指定缓存区的个数和大小
    proxy_busy_buffers_size 64k;   指定缓存区返还给客户端数据最大的大小
    proxy_set_header Host $host;   客户端请求的houst
    proxy_set_header X-Real-IP $remote_addr;   记录此次请求是从哪个连接访问过来的
    proxy_set_header Referer $http_referer;   
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://web1;
    
    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    #添加
    34     include /usr/local/nginx/conf/vhost/*.conf;
    [root@localhost ~]# nginx 
    [root@localhost ~]# nohup consul-template --consul-addr=192.168.10.40:8500 -template /opt/consul/config/nginx-consul.ctmpl:/usr/local/nginx/conf/vhost/web.conf:"/usr/local/nginx/sbin/nginx -s reload" --log-level=info > /opt/consul/logs/nginx-consul.log 2>&1 &
    [1] 57413
    [root@localhost ~]# ps -elf | grep consul | grep -v grep
    [root@localhost ~]# cd /usr/local/nginx/conf/vhost/
    [root@localhost vhost]# cat web.conf 
    upstream web1 {
    	ip_hash;       
            server 192.168.10.10:8501 max_fails=3 fail_timeout=20s;        
            server 192.168.10.20:8502 max_fails=3 fail_timeout=20s;        
    }
    

    停止一个produce

    [root@localhost vhost]# cat web.conf 
    upstream web1 {
    	ip_hash;       
            server 192.168.10.20:8502 max_fails=3 fail_timeout=20s;        
    }
    [root@localhost vhost]# curl 192.168.10.30:80/hello
    helle consul two
    [root@localhost vhost]# curl 192.168.10.30:80/hello
    
    展开全文
  • 这里写自定义目录标题docker logs提示:chown: /consul/data: Permission denied解决办法 (启动时获取宿主机root权限) docker logs提示:chown: /consul/data: Permission denied 字面意思:权限被拒绝 解决办法 ...
  • Docker-compose-consul部署Ningx+Tomcat+ELK分析Nginx访问日志一、Docker-compose部署Tomcat1. 安装compose2. 编写Dockerfile文件3. 编写dockers-compose.yml文件4. 执行yml文件创建容器二、配置consul自动同步1. ...
  • ConsulCONSUL调研

    千次阅读 2016-08-18 18:31:53
    Consul是一个服务管理软件: 1. 支持多数据中心下,分布式高可用的,服务发现和配置共享。 2. consul支持健康检查,允许存储键值对。 3. 一致性协议采用 Raft 算法,用来保证服务的高可用。 4. 成员管理和消息广播 ...
  • consul简介

    千次阅读 2018-10-12 21:54:42
    Consul 简介 Consul 的使用场景 Consul 的优势 Consul 的角色 consul cluster集群架构图 Consul常用命令 consul agent 命令的常用选项   Spring Cloud Consul 项目是针对Consul的服务治理实现。Consul是一...
  • ConsulCONSUL环境部署

    千次阅读 2016-08-18 18:33:23
    Consul是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由HashiCorp公司用Go语言开发,基于Mozilla Public License 2.0的协议进行开源。Consul支持健康检查,并允许HTTP和DNS协议调用 API 存储...
  • consul学习

    2021-04-20 20:48:31
    consul学习 一、consul服务架构和核心概念 在官方提供的图中SERVER是consul服务端高可用集群,CLIENT是consul客户端。 图中存在两个数据中心:DATACENTER1、DATACENTER2。每个数据中心有3-5台server(该数量使得在...
  • docker consul

    2021-08-03 17:45:17
    安装Consul2.查看集群信息3.通过httpd api获取集群信息四、安装registratorregistrator作用1.容器服务自动加入nginx集群2.测试发现功能是否正常3.验证http和nginx服务是否注册到consul五、安装docker templatedocker...
  • Consul入门手册

    2019-11-20 22:46:49
    文章目录Consul是什么?基本架构安装Consul运行Agent启动Agent集群成员停止Agent注册服务定义一个服务查询服务DNS APIHTTP API更新服务 Consul是什么? Consul是一个服务发现和配置工具,它是分布式和高可用的,而且...
  • 之前有几篇博客介绍了consul和springboot1.x,对于consul的下载,安装配置不懂的可以看看 地址: Consul1-window安装consul Consul2-使用consul作为服务注册和发现中心 Consul3-使用consul作为配置中心 Consul4...
  • Consul部署

    2021-03-29 16:23:12
    文章目录部署consul步骤 部署consul步骤 关闭防火墙 systemctl stop firewalld setenforce 0 mkdir consul cd consul #将consul.0.9.2_linux_amd64.zip上传到consul unzip consul_0.9.2_linux_amd64.zip # 解压 ...
  • ConsulConsul实践指导-Agent

    千次阅读 2016-08-19 23:51:40
    ConsulAgent是Consul的核心进程,Agent的工作是维护成员关系信息、注册服务、健康检查、响应查询等等。Consul集群的每一个节点都必须运行agent进程。
  • Docker Consul

    2021-03-28 21:34:43
    Docker Consul一、Consul介绍1、关键功能2、特点二、Consul的基本概念1、Client2、Server3、Server-leader4、Agent三、Counsul的原理1、服务发现及注册2、服务调用3、Consul通信接口4、Consul端口说明四、配置Consul...
  • 学习Spring Cloud Consul第一步:运行Consul服务
  • Consul 使用

    万次阅读 2017-06-29 09:46:13
    官网Document https://www.consul.io/docs/index.html ...Consul有很多组件,但总的来说,它主要用来...(1)服务发现:Consul的客户端可以“provide”一个service,例如api或mysql,其他客户端可以使用Consul
  • Consul文档

    千次阅读 2018-01-03 08:21:00
    一、安装 Consul Consul 的安装很简单,安装 Consul 有以下两种方式: - 使用预编译的二进制文件 - 使用源代码安装  下载一个预编译的二进制文件是最简单的,我们通过TLS和SHA256总和提供下载来验证二进制文件...
  • consul部署

    千次阅读 2018-08-24 16:25:18
    1.https://www.consul.io/downloads.html下载linux64位的 ...2.运行consul ./consul agent -dev -client 192.168.p.p(服务器的ip) 出现下面结果即启动成功 3.访问http://192.168.236.10:8500 ...
  • consul原理介绍

    2020-08-21 19:07:58
    主要用于内部通讯Gossip/日志分发/选主等 1.2 HTTP API 服务发现/健康检查/KV存储等几乎所有功能 默认端口为8500 1.3 Consul Commands (CLI) consul命令行工具可以与consul agent进行连接,提供一部分consul的功能。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,412
精华内容 4,164
关键字:

consul的日志