服務注冊、發現是微服務架構的關鍵原理之一,由於微服務架構是由一系列職責單一的細粒度服務構成的網狀結構,服務之間通過輕量機制進行通信,這就必然引入一個服務注冊發現的問題,也就是說服務提供方要注冊報告服務地址,服務調用方要能發現目標服務。在我們的微服務架構中我們采用了Eureka來完成微服務的注冊與發現。微服務通過Eureka進行注冊,服務調用方通過Eureka找到目標服務。由於服務提供方以集群方式提供服務,Eureka也采用集群的方式來提供服務的注冊與發現,集群中的Eureka實例之間可以進行數據同步,所有Eureka實例中的服務注冊信息都是同步的。那么問題來了,Eureka集群中的實例怎么知道其他實例的存在呢,怎么來發現其他的實例呢?通常的做法是通過DNS,因此我們需要搭建DNS服務器。下面來介紹Euraka集群的搭建過程。
一、搭建DNS服務器(Linux環境下)
1、安裝DNS服務器組件,這里我們用的是bind
命令:yum install -y bind bind-chroot bind-utils
2、編輯配置DNS主配置文件
命令:vi /etc/named.conf
3、修改named.rfc1912.zones文件
命令: vi /etc/named.rfc1912.zones
添加所需要的zone
4、添加設置DNS正向解析
修改zone配置文件,正向解析
命令:cd /var/named/
cp named.localhost eureka.com.zone
vi eureka.com.zone
注意:要和主配置文件[/etc/named.rfc1912.zones]里面定義的zone文件名一致
5、啟動DNS服務器
命令:service named start
6、測試檢測域信息是否正常
檢查之前先看下配置文件有沒有讀取權限
命令:ll /var/named
如果沒有讀取權限,用chmod +r /var/named/* 命令添加即可
7、重新啟動DNS服務器
命令:service named restart
8、DNS服務器地址配置
第一種方式:此方式是暫時修改dns地址,當網絡重啟之后,則自動清除。
命令:vi /etc/resolv.conf
第二種方式:此方式是永久修改dns地址,當網絡重啟之后,不會清除。
命令:vi /etc/sysconfig/network-scripts/ifcfg-enp0s25
二、將eureka的dns配置放在jar包外面啟動微服務
docker 命令:docker run –e eurekaServerDNSName=域名 鏡像
三、EUREKA集群配置
編寫Eureka 配置文件(application.yml)
其中 eureka 的配置分為client 端和server 端:
Eureka client配置中,eurekaServerURLContext: eureka 表示eureka注冊中心的路徑,默認為http://x.x.x.x:x/eureka/,在eureka的配置文件中加入此配置表
示eureka作為客戶端向注冊中心注冊,從而構成eureka集群。
Eureka server 配置中,enableSelfPreservation: false表示在此eureka服務器中關閉自我保護模式,所謂自我保護模式是指,出現網絡分區、eureka在短時間內丟失過
多客戶端時,會進入自我保護模式,即一個服務長時間沒有發送心跳,eureka也不會將其刪除。默認為true:
自我保護模式默認為開啟,這就涉及到閾值因子,默認為0.85,這些在eureka主界面上可以看出:
閾值不能大於最小值,否則將會進入自我保護模式。
以上是eureka集群的搭建過程,在搭建的過程中踩過很多坑,也有很多收獲,eureka相關的一些配置項就不在這里贅述了,內容比較多,有必要的話我再另外單獨介紹這部分內容。