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);

  

posted @ 2020-06-24 11:45  迷失海洋  阅读(441)  评论(0编辑  收藏  举报