Docker 启动新的Eureka,EUREKA_SERVER指定新旧所有Eureka 路径,提前替换好IP和EUREKA_SERVER=http://192.168.1.1:8761/eureka/,http://192.168.1.2:8761/eureka/,http://192.168.2.1:8520/eureka,http://192.168.2.2:8520/eureka
此处不在指定旧Eureka的SPRING_APPLICATION_NAME192.168.1.1:8761
docker run -d -p 8761:8761 --name eureka \ -e "IP=192.168.2.1" \ -e "HOST_NAME=host1" \ -e "APP_PORT=8761" \ -e "APP_VERSION=" \ -e "JAVA_OPTS=JAVA_OPTS=-Xms4096m -Xmx4096m -XX:CICompilerCount=8 -XX:ActiveProcessorCount=2 -XX:+UseG1GC -XX:+UseFastAccessorMethods -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+OptimizeStringConcat" -e "EUREKA_SERVER=http://192.168.2.1:8761/eureka/,http://192.168.2.2:8761/eureka/,http://192.168.1.1:8520/eureka/,http://192.168.1.2:8520/eureka/" \ -e "EUREKA_INSTANCE_HOSTNAME=192.168.2.1" \ -e "EUREKA_SERVER_ENABLESELFPRESERVATION=false" \ -e "EUREKA_SERVER_USE-READ-ONLY-RESPONSE-CACHE=false" \ -e "EUREKA_SERVER_RESPONSE-CACHE-UPDATE-INTERVAL-MS=5000" \ -e "EUREKA_SERVER_EVICTIONINTERVALTIMERINMS=5000" \ -e "EUREKA_INSTANCE_LEASERENEWALINTERVALINSECONDS=5" \ -e "EUREKA_INSTANCE_LEASEEXPIRATIONDURATIONINSECONDS=10" \ -e "EUREKA_SERVER_PEER-NODE-READ-TIMEOUT-MS=2000" \ -e "EUREKA_INSTANCE_IP-ADDRESS=192.168.2.1" \ --label "appname=eureka" freemanliu/eureka:v1.0.0;
Jvm 内存配置:
-Xmx在这里会替代掉-XX的三个参数,确认选择-Xmx还是
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-XX:MaxRAMFraction=2-Xms4096m
-Xmx4096m -XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-XX:MaxRAMFraction=2
如果仍旧采用上面的配置:
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-XX:MaxRAMFraction=2 这里的XX:MaxRAMFraction=2有些浪费。需要调整为:
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-XX:MaxRAMPercentage=80.0 //这里采用百分比使用浮点数,不可用整数。
直接采用:采用-Xms4096m -Xmx4096m
-XX:CICompilerCount: 设置的相对较大可以一定程度提升JIT编译的速度,默认为2(编译用的)
-XX:ActiveProcessorCount: 设置容器处理器数量
-XX:+UseG1GC: G1GC(它会从内存中删除垃圾对象)
-XX:+UseStringDeduplication :字符串重复数据消除通过利用许多字符串对象相同的事实来减少Java堆上String对象的内存占用,代替每个String对象指向其自己的字符数组, 相同的String对象可以指向并共享同一字符数组。
-XX:+UseCompressedOops: 普通对象指针压缩。
-XX:+OptimizeStringConcat: 把相邻的(中间没隔着控制语句) StringBuilder合成一个,也会努力的猜长度。
-XX:+AggressiveOpts: 启用这个参数,则每当 JDK 版本升级时,你的 JVM 都会使用最新加入的优化技术(如果有的话)。
-XX:+UseFastAccessorMethods get,set 方法转成本地代码(对于jvm来说是冗余代码,jvm将进行优化)
GC配置:
将旧的Apollo数据库 apolloconfigdb中serverconfig表eureka.service.url字段的Value中添加新的Eureka 地址
几分钟后,验证新/旧Eureka中服务注册数量是否一致,数据是否完全同步此时eureka 集群状态为unavailable-replicas
修改服务apollo配置,验证apollo 配置是否保存到config service
验证集群节点配置eureka.service.url是否一致
将服务的第二批次节点从旧eureka集群下线时,此时服务的eureka将会从旧的eureka集群切换为新的eureka集群,服务是否可以很快切换到新的 eureka集群,是否会对服务发现造成影响服务