consul搭建服务注册和
docker搭建consul单集群
1.拉取镜像
docker pull consul
2.在/home/docker/comsul 创建映射文件夹
consulserver1data consulserver1conf consulserver2data consulserver2conf consulserver3conf consulserver3data consulclientdata consulclientconf
3.在 consulserver1conf 中添加配置文件
{
"datacenter": "DC1",
"data_dir": "/consul/data",
"log_level": "INFO",
"node_name": "consulserver1",
"server": true,
"bootstrap_expect": 1,
"retry_join": ["172.18.0.6","172.18.0.7","172.18.0.8"],
"retry_interval": "3s",
"enable_debug": false,
"rejoin_after_leave": true,
"enable_syslog": false
}
4.在 consulserver2conf 中添加配置文件
{
"datacenter": "DC1",
"data_dir": "/consul/data",
"log_level": "INFO",
"node_name": "consulserver2",
"server": true,
"bootstrap_expect": 2,
"retry_join": ["172.18.0.6","172.18.0.7","172.18.0.8"],
"retry_interval": "3s",
"enable_debug": false,
"rejoin_after_leave": true,
"enable_syslog": false
}
5.在 consulserver3conf 中添加配置文件
{
"datacenter": "DC1",
"data_dir": "/consul/data",
"log_level": "INFO",
"node_name": "consulserver3",
"server": true,
"bootstrap_expect": 3,
"retry_join": ["172.18.0.6","172.18.0.7","172.18.0.8"],
"retry_interval": "3s",
"enable_debug": false,
"rejoin_after_leave": true,
"enable_syslog": false
}
6.在 consulclientconf中添加配置文件
{ "datacenter": "DC1", "data_dir": "/consul/data", "log_level": "INFO", "node_name": "consulclient", "server": false, "ui": true, "bootstrap_expect": 0, "bind_addr": "172.17.16.4", "client_addr": "0.0.0.0", "retry_join": ["172.18.0.6","172.18.0.7","172.18.0.8"], "retry_interval": "3s", "enable_debug": false, "rejoin_after_leave": true, "enable_syslog": false }
7.创建服务容器
docker run -d --name consulserver1 --restart=always -v /home/docker/consul/consulserver1data:/consul/data -v /home/docker/consul/consulserver1conf:/consul/config consul agent -data-dir /consul/data -config-dir /consul/config docker run -d --name consulserver2 --restart=always -v /home/docker/consul/consulserver2data:/consul/data -v /home/docker/consul/consulserver2conf:/consul/config consul agent -data-dir /consul/data -config-dir /consul/config docker run -d --name consulserver3 --restart=always -v /home/docker/consul/consulserver3data:/consul/data -v /home/docker/consul/consulserver3conf:/consul/config consul agent -data-dir /consul/data -config-dir /consul/config docker run -d --net=host --name consul-client --restart=always -p 8400:8400 -p 8500:8500 -p 8600:53/udp -v /home/docker/consul/consulclientdata:/consul/data -v /home/docker/consul/consulclientconf:/consul/config consul agent -data-dir /consul/data -config-dir /consul/config
8.查看consul服务IP地址
docker inspect -f '{{.NetworkSettings.IPAddress}}' $(docker ps -q)
9.修改配置文件的服务器IP地址
10.重启4个容器
11.进入服务容器查看节点信息
docker exec -it consulserver1 /bin/sh consul members consul operator raft list-peers
consul在core的使用
1.添加Consul nuget包

2.添加consul服务注册中间件
/// <summary>
/// consul服务注册中间件
/// </summary>
public static class ConsulBuilderExtensions
{
public static IApplicationBuilder UserConsul(this IApplicationBuilder builder, IHostApplicationLifetime lifetime, IConfiguration configuration)
{
ConsulOption consulOption = new ConsulOption();
configuration.Bind("Consul", consulOption);
var consulClient = new ConsulClient(c =>
{
c.Address = new Uri(consulOption.Address);
});
var registration = new AgentServiceRegistration()
{
ID = $"{consulOption.ServiceName}_{consulOption.ServiceIP}_{consulOption.ServicePort}",
Name = consulOption.ServiceName,
Port = consulOption.ServicePort,
Tags = new string[] { "FindFresh" },
Check = new AgentServiceCheck()
{
DeregisterCriticalServiceAfter = TimeSpan.FromMinutes(1),//失败后多级移除
Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔
HTTP = consulOption.ServiceHealthCheck,//健康检查地址
Timeout = TimeSpan.FromSeconds(10),//检查间隔
},
};
consulClient.Agent.ServiceRegister(registration).Wait();//服务注册
lifetime.ApplicationStopped.Register(() =>
{
consulClient.Agent.ServiceDeregister(registration.ID).Wait();
});
return builder;
}
}
public class ConsulOption
{
/// <summary>
/// consul地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 服务名称
/// </summary>
public string ServiceName { get; set; }
/// <summary>
/// 服务IP
/// </summary>
public string ServiceIP { get; set; }
/// <summary>
/// 端口
/// </summary>
public int ServicePort { get; set; }
/// <summary>
/// 健康检查地址
/// </summary>
public string ServiceHealthCheck { get; set; }
}
3.配置json信息
"Consul": { //Consul配置
"ServiceName": "FindFreshCmsService",
"ServiceIP": "111.231.113.223",
"ServicePort": 8202,
"ServiceHealthCheck": "http://111.231.113.223:8202/api/system/health",
"Address": "http://111.231.113.223:8500" //ConsulAddress
}
4.在Startup的Configure中添加
app.UserConsul(lifetime, Configuration);

浙公网安备 33010602011771号