CentOS7下consul安装

**

CentOS7下consul安装

1,consul简介

Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。 Consul是分布式的、高可用的、可横向扩展的。它具备以下特性 :
1,service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
2,health checking:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
3,key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
4,multi-datacenter:无需复杂的配置,即可支持任意数量的区域。
-总结consul特性:

       通过DNS或者HTTP应用程序能找到它所依赖的服务,方便进行服务注册
       使用Key/Value方式进行数据存储
       支持开箱即用的多数据中心。用户不需要建立额外的抽象层来扩展业务
       对服务进行定时健康检查,判断依据为响应码是否为200

2,架构图:
CentOS7下consul安装_第1张图片

3,consul安装
官网:https://www.consul.io/
下载地址:https://releases.hashicorp.com/consul/1.10.1/consul_1.10.1_linux_amd64.zip

cd /usr/local/src
wget https://releases.hashicorp.com/consul/1.10.1/consul_1.10.1_linux_amd64.zip
unzip consul_1.10.1_linux_amd64.zip
mv consul /usr/local/bin/

准备三台机器,安装好consul

服务器 版本
192.168.1.244 CentOS Linux release 7.6.1810 (Core)
192.168.1.245 CentOS Linux release 7.6.1810 (Core)
192.168.1.246 CentOS Linux release 7.6.1810 (Core)

245和246作为server,244作为client

consul角色

client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群.
server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据 中心通讯. 每个数据中心的 server 数量推荐为 3 个或是 5 个。
(这里因为是测试搭建,所以只用了两台server)

consul是典型的 C/S架构,可以运行服务模式或客户模式。每一个数据中心必须有至少一个服务节点, 3到5个服)务节点最好。非 常不建议只运行一个服务节点,因为在节点失效的情况下数据有极大的丢失风险。

启动:

245:

consul agent -server -ui -bootstrap-expect=2 -data-dir=/data/consul -node=s1 -config-dir /etc/consul.d -advertise=192.168.1.245 -bind=0.0.0.0 -client=0.0.0.0

后台启动:
consul agent -server -ui -bootstrap-expect=2 -data-dir=/data/consul -node=s1 -config-dir /etc/consul.d -advertise=192.168.1.245 -bind=0.0.0.0 -client=0.0.0.0 >> /var/log/consul/consul.log 2>&1 

246:

consul agent -server -ui -bootstrap-expect=2 -data-dir=/data/consul -node=n2 -advertise=192.168.1.246 -bind=0.0.0.0 -client=0.0.0.0 -join 192.168.1.245

后台启动:
consul agent -server -ui -bootstrap-expect=2 -data-dir=/data/consul -node=n2 -advertise=192.168.1.246 -bind=0.0.0.0 -client=0.0.0.0 -join 192.168.1.245 >> /var/log/consul/consul.log 2>&1 

参数说明:
-server : 定义agent运行在server模式
-bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用
-data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-bind::指明节点的IP地址,一般是0.0.0.0或者云服务器内网地址,不能写阿里云外网地址。这是Consul侦听的地址,它必 须可以被集群中的所有其他节点访问。虽然绑定地址不是绝对必要的,但最好提供一个。
-ui: 启动web界面
-config-dir::配置文件目录,里面所有以.json结尾的文件都会被加载
-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
-join:需要加入的其它节点地址,可以多次使用,加入多个节点。

244:

consul agent -data-dir=/data/consul -node=c3 -advertise=192.168.1.244 -bind=0.0.0.0 -client=0.0.0.0 -join 192.168.1.245

consul agent -data-dir=/data/consul -node=c3 -advertise=192.168.1.244 -bind=0.0.0.0 -client=0.0.0.0 -join 192.168.1.245 >> /var/log/consul/consul.log 2>&1 

验证集群:

consul members
在这里插入图片描述
优雅的关闭结点:
consul leave
在这里插入图片描述
CentOS7下consul安装_第2张图片
WEB界面:
CentOS7下consul安装_第3张图片

python注册:

#!/usr/bin/python3
# -*- coding:utf-8 -*-
import consul

class Consul(object):
    def __init__(self, host, port):
        '''初始化,连接consul服务器'''
        self._consul = consul.Consul(host, port)

    def RegisterService(self, name, server_id, host, port, tags=None):
        
        tags = tags or []
        self._consul.agent.service.register(
            name,
            server_id,
            host,
            port,
            tags,
            # 健康检查ip端口,检查时间:5,超时时间:30,注销时间:30s
            check=consul.Check().tcp(host, port, "5s", "30s", "30s"))

    def GetService(self, name):
        services = self._consul.agent.services()
        service = services.get(name)
        if not service:
            return None, None
        addr = "{0}:{1}".format(service['Address'], service['Port'])
        return service, addr


if __name__ == '__main__':
    host="192.168.1.245" #consul服务器的ip
    port="8500" #consul服务器对外的端口
    consul_client=Consul(host,port)

    name="test1"
    host="192.168.1.188"
    port=8088
    server_id = 'test1'
    consul_client.RegisterService(name,server_id,host,port,tags=['tags1'])
    # 当有负载均衡时,保持name不变,多次执行RegisterService函数即可
    # name1="test2"
    # host="192.168.1.199"
    # port=8080
    # server_id = 'test2'
    # consul_client.RegisterService(name,server_id,host,port,tags=['test2'])
    
    
   

    check = consul.Check().tcp(host, port, "5s", "30s", "30s")
    print(check)
    result=consul_client.GetService("test-concul")
    print(result)

你可能感兴趣的:(运维,consul)