Ubuntu go-consul集群搭建与服务注册

配置环境

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install consul
#查看是否安装成功
consul

其他环境
安装go
然后通过克隆,再生成两个Linux虚拟机,生成的Linux虚拟机需要更改hostname

$ sudo vi /etc/hostname
#修改完成后,查看三个虚拟机的主机名,确保不一样
$ hostname

另外,虚拟机的ip地址也需要不同。

集群搭建

consul角色

完成Consul的安装,必须运行agent,可以理解为每一个虚拟机都是一个agent,其中agent有两种角色,一是client,二是server。

  • client:客户端,是一个非常轻量级的进程,用于注册服务,进行健康检查和将HTTP和DNS接口请求发给局域网内的server服务器。
  • server:服务端,保存配置信息,用于处理请求,可以与局域网内的客户端进行通信或者广域网的其他数据中心进行通信,推荐3或者5个。一个数据中心至少要有一个server,但只部署一个会有很大的数据丢失风险。

启动server

第一个server

consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=192.168.20.128 -ui -config-dir /etc/consul.d -rejoin -join  192.168.20.128 -client 0.0.0.0
  • -server 运行在server模式
  • -bootstrap-expect 在一个数据中心中,期望提供服务的server的数量,只有server的数量到达这个数量,consul才会引导整个集群。不能和bootstrap共用。
  • -data-dir 提供一个目录用于保存agent状态,所有agent都需要该目录,而且系统重启后需要这个目录依然存在。
  • -node 节点在集群中的名称,必须唯一,默认主机名。
  • -bind 绑定IP地址,用于集群内部通讯,默认0.0.0.0
  • -ui 启动web界面
  • -config-dir 配置文件目录,json文件会被加载为配置文件。
  • rejoin 再次启动仍可加入集群
  • -client consul服务监听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1不对外提供服务,如果提供服务换成0.0.0.0,那么可以得出agent既可以当server,也可以当client。

在这里插入图片描述

第二个server

consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n2 -bind=192.168.20.129 -ui  -rejoin -join  192.168.20.128

在这里插入图片描述

client

consul agent -data-dir /tmp/consul -node=n3 -bind=192.168.20.130  -config-dir /etc/consul.d -rejoin -join  192.168.20.128

在这里插入图片描述

注册服务

为consul配置文件创建一个目录,consul会载入配置文件目录里的所有文件,通常.d结尾的目录表示整个路径包含一组配置文件。

mkdir /etc/consul.d

然后编写服务定义的配置文件,例如web.json

{
	"service":{
		"name": "web",
		"tags": ["master"],
		"address": "127.0.0.1",
		"port": 10000,
		"checks":[
			{
			"http": "http://localhost:10000/health",
			"interval": "10s"
			}
		]
	}
}

{
	"service":{ #服务
		"name": "web", 
		"tags": ["master"],
		"address": "127.0.0.1",   #ip
		"port": 10000,    #端口
		"checks":[
			{
			"http": "http://localhost:10000/health",  
			"interval": "10s"     #检查时间,每10s检查一次
			}
		]
	}
}

测试程序hello.go

package main
import (
	"fmt"
	"net/http"
)
//浏览器输入http://localhost:10000/调用这个方法
func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Println("hello web,this is n1 or n2")
	fmt.Fprintf(w, "hello web3,this is n1 or n2")
}
//浏览器输入http://localhost:10000/health调用这个方法
//每隔10s会自动调用
func healthHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Println("health check n1 or n2")
}

func main(){
	//绑定处理函数
	http.HandleFunc("/",handler)
	http.HandleFunc("/health",healthHandler)
	//监听端口10000
	http.ListenAndServe(":10000",nil)
	
}

测试程序在第一个server上运行起来

go run hello.go

成果展示

在浏览器输入localhost:8500/
在这里插入图片描述
浏览器输入localhost:10000/
在这里插入图片描述
hello.go控制台输出
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值