您的位置:首页 > 编程语言 > Java开发

Spring Cloud 服务注册和服务发现-Eureka 的服务认证和集群

2017-08-25 00:00 801 查看

一、 Eureka 的服务认证

1、 服务端添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2、 服务端添加配置
# 服务认证
security.basic.enabled=true
security.user.name=hlian
security.user.password=123456
3、 修改服务端和客户端的配置
eureka.client.serviceUrl.defaultZone=http://hlian:123456@localhost:8761/eureka/
建议:
能在内网的,尽量在内网,这样既可以保障安全,也能降低复杂度。


二、 Eureka 的集群



说明:启动3 个注册中心,我们将eureka1、eureka2、eureka3各自都将serviceUrl 指向另外两个
节点,即是eureka1、eureka2、eureka3 是两两互相注册的。

CentOS 步骤:

1、设置hosts:

vi /etc/hosts

192.168.1.160 eureka0
192.168.1.161 eureka1
192.168.1.162 eureka2

vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=eureka1

1、发布应用包:

/opt/eureka/

[root@eureka1 eureka]# ls
hlian-spring-cloud-service-05-0.0.1-SNAPSHOT.jar running.sh
执行脚本: running.sh

#!/bin/sh

## chang here
SERVICE_DIR=/opt/eureka
SERVICE_NAME=hlian-spring-cloud-service-05-0.0.1-SNAPSHOT
SPRING_PROFILES_ACTIVE=prd

## java env
export JAVA_HOME=/opt/jre/jre1.8.0_144
export JRE_HOME=${JAVA_HOME}

case "$1" in
start)
procedure=`ps -ef | grep -w "${SERVICE_NAME}" |grep -w "java"| grep -v "grep" | awk '{print $2}'`
if [ "${procedure}" = "" ];
then
echo "start ..."
if [ "$2" == "0" ];
then
exec nohup ${JRE_HOME}/bin/java -Xms128m -Xmx512m -jar ${SERVICE_DIR}/${SERVICE_NAME}.jar --spring.profiles.active=prd   --server.port=8761  --server.hostname=eureka0  --server.hostname1=eureka1 --server.hostname2=eureka2   >/dev/null 2>&1 &
echo "start success"
fi

if [ "$2" == "1" ];
then
exec nohup ${JRE_HOME}/bin/java -Xms128m -Xmx512m -jar ${SERVICE_DIR}/${SERVICE_NAME}.jar --spring.profiles.active=prd   --server.port=8761  --server.hostname=eureka1  --server.hostname1=eureka0 --server.hostname2=eureka2  >/dev/null 2>&1 &
echo "start success"
fi

if [ "$2" == "2" ];
then
exec nohup ${JRE_HOME}/bin/java -Xms128m -Xmx512m -jar ${SERVICE_DIR}/${SERVICE_NAME}.jar --spring.profiles.active=prd   --server.port=8761  --server.hostname=eureka2  --server.hostname1=eureka1 --server.hostname2=eureka0  >/dev/null 2>&1 &
echo "start success"
fi
else
echo "${SERVICE_NAME} is start"
fi
;;

stop)
procedure=`ps -ef | grep -w "${SERVICE_NAME}" |grep -w "java"| grep -v "grep" | awk '{print $2}'`
if [ "${procedure}" = "" ];
then
echo "${SERVICE_NAME} is stop"
else
kill ${procedure}
sleep 1
argprocedure=`ps -ef | grep -w "${SERVICE_NAME}" |grep -w "java"| grep -v "grep" | awk '{print $2}'`
if [ "${argprocedure}" = "" ];
then
echo "${SERVICE_NAME} stop success"
else
kill -9 ${argprocedure}
echo "${SERVICE_NAME} stop error"
fi
fi
;;

restart)
$0 stop
sleep 1
$0 start $2
;;

*)
echo "usage: $0 [start|stop|restart] [0|1|2]"
;;
esac


3、启动

分别在主机: eureka0、eureka1、eureka2 启动应用

running.sh start 0

running.sh start 1

running.sh start 2

4、打开防火墙

vi /etc/sysconfig/iptables

service iptables restart

[root@eureka1 eureka]# cat /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8761 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT


Windows 步骤:

1、 设置hosts:C:\Windows\System32\drivers\etc\hosts;
# Cluster hosts
127.0.0.1 eureka1
127.0.0.1 eureka2
127.0.0.1 eureka3
2、 修改配置
每个服务都需要相应的修改,服务-01
spring.application.name=spring-cloud-server-01
eureka.instance.hostname=eureka1
eureka.client.serviceUrl.defaultZone=http://hlian:123456@eureka2:8762/eureka/,http://
hlian:123456@eureka3:8763/eureka/
同理:服务-02,服务-03 都做相对应的修改
3、 配置修改
#这里是为了测试,生产应该保持默认值:30s
eureka.instance.lease-renewal-interval-in-seconds=5
#剔除失效服务的检测时间,默认值:60000,即60s
eureka.server.eviction-interval-timer-in-ms=5000

三、 Eureka 常用配置


a) Eureka 的服务监控

添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
注意:服务端已经存在该依赖,可以不用添加。

# 状态页面自定义访问链接
eureka.instance.status-page-url-path=/info

# info 自定义
info.build.name=@project.name@
info.build.description=@project.description@
info.build.groupId=@project.groupId@
info.build.artifact=@project.artifactId@
info.build.version=@project.version@

注意:
1、 服务监控依赖于 spring-boot-starter-actuator 这个jar
2、 注意 management.context-path 的定义
3、 注意 server.servlet-path 的定义
4、 可以直接定义 eureka.instance.status-page-url=http://www.baidu.com,这个优先级高

b) Eureka 客户端的常用配置

1、 自定义实例 ID
eureka.instance.instanceId=${spring.application.name}:${random.value}
说明:random.value 是随机值,可以确保唯一性。Spring Cloud 里面要求实例 ID 是唯一的

2、 显示 IP 地址
eureka.instance.prefer-ip-address=true

3、 设置拉取服务注册信息时间,默认 60s
eureka.client.registry-fetch-interval-seconds=30
说明:如果要迅速获取服务注册状态,可以缩小该值。比如:网关接口启动需要马上调用

4、 指定续约更新频率,默认是 30s
eureka.instance.lease-renewal-interval-in-seconds=15
说明:可以解决 Eureka 注册服务慢的问题,注意:在生产中,最好坚持使用默认值,因为在服务器内部有一些计算,他们对续约做出假设。

6、设置过期剔除时间,默认 90s
eureka.instance.lease-expiration-duration-in-seconds=45
说明:表示 eureka server 至上一次收到 client 的心跳之后,等待下一次心跳的超时时间。
如果该值太大,则很可能将流量转发过去的时候,该 instance 已经不存活了。
如果该值设置太小了,则 instance 则很可能因为临时的网络抖动而被摘除掉。
该值至少应该大于 leaseRenewalIntervalInSeconds。

c) Eureka 服务端的配置

1、 指定环境
eureka.environment=dev
2、 指定数据中心
eureka.datacenter=roncoo
说明:如果配置-Deureka.datacenter=cloud,eureka 会知道是在 AWS 云上
3、关闭自我保护模式
eureka.server.enable-self-preservation=false
说明:关闭了面板会出现提示。
4、设置清理无效节点的时间间隔,默认 60000,即是 60s
eureka.server.eviction-interval-timer-in-ms=30000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring Cloud