Nacos-1.4.6升级2.3.2

一、nacos-2.3.2部署(非升级测试步骤)

1、使用nginx进行代理
# nginx-1.25.5
docker run -d --name nginx-nacos --network nacos --privileged=true -v /data/nacos/nginx.conf:/etc/nginx/conf.d/default.conf -p 8848:8848 nginx:latest
2、创建nacos服务
# nacos-2.3.2
docker run --name nacos-1 --network nacos --ip 172.21.0.3 -d --privileged=true -e NACOS_SERVERS="172.21.0.3:8848 172.21.0.4:8848 172.21.0.5:8848" -v /data/nacos/application.properties:/home/nacos/conf/application.properties -v /data/nacos/cluster.conf:/home/nacos/conf/cluster.conf nacos-server:2.3.2
docker run --name nacos-2 --network nacos --ip 172.21.0.4 -d --privileged=true -e NACOS_SERVERS="172.21.0.3:8848 172.21.0.4:8848 172.21.0.5:8848" -v /data/nacos/application.properties:/home/nacos/conf/application.properties -v /data/nacos/cluster.conf:/home/nacos/conf/cluster.conf nacos-server:2.3.2
docker run --name nacos-3 --network nacos --ip 172.21.0.5 -d --privileged=true -e NACOS_SERVERS="172.21.0.3:8848 172.21.0.4:8848 172.21.0.5:8848" -v /data/nacos/application.properties:/home/nacos/conf/application.properties -v /data/nacos/cluster.conf:/home/nacos/conf/cluster.conf nacos-server:2.3.2
3、数据库使用
# mysql-5.7
docker run -it  -p 0.0.0.0:3306:3306 -e MYSQL_ROOT_PASSWORD="root" -d mysql:5.7 --name mysql-5.7
# 数据库信息
主机IP:10.128.12.38
数据库名称:nacos_config_erbao_test
用户:root
密码:root

二、nacos-1.4.6部署

1、创建数据库
# mysql-5.7
# 数据库信息
## 数据库-1
主机IP:10.128.12.38
数据库名称:nacos_config_1.0_test
用户:root
密码:root
## 数据库-2(暂无用到)
主机IP:10.128.12.38
数据库名称:nacos_config_2.0_test
用户:root
密码:root
2、创建nacos服务
# nacos-1.4.6
docker run --name nacos-11 --network nacos --ip 172.21.0.11 -d --privileged=true -e NACOS_SERVERS="172.21.0.11:8848 172.21.0.12:8848 172.21.0.13:8848" -v /data/nacos-1.4.6/nacos-11/bin/:/home/nacos/bin/ -v /data/nacos-1.4.6/nacos-11/conf/:/home/nacos/conf/ -v /data/nacos-1.4.6/nacos-11/target/:/home/nacos/target/ nacos/nacos-server-new:v1.4.6

docker run --name nacos-12 --network nacos --ip 172.21.0.12 -d --privileged=true -e NACOS_SERVERS="172.21.0.11:8848 172.21.0.12:8848 172.21.0.13:8848" -v /data/nacos-1.4.6/nacos-12/bin/:/home/nacos/bin/ -v /data/nacos-1.4.6/nacos-12/conf/:/home/nacos/conf/ -v /data/nacos-1.4.6/nacos-12/target/:/home/nacos/target/ nacos/nacos-server-new:v1.4.6

docker run --name nacos-13 --network nacos --ip 172.21.0.13 -d --privileged=true -e NACOS_SERVERS="172.21.0.11:8848 172.21.0.12:8848 172.21.0.13:8848" -v /data/nacos-1.4.6/nacos-13/bin/:/home/nacos/bin/ -v /data/nacos-1.4.6/nacos-13/conf/:/home/nacos/conf/ -v /data/nacos-1.4.6/nacos-13/target/:/home/nacos/target/ nacos/nacos-server-new:v1.4.6
3、使用nginx进行代理
# nginx-1.25.5
docker run -d --name nginx-nacos-1.x --network nacos --privileged=true -v /data/nacos-1.4.6/nginx.conf:/etc/nginx/conf.d/default.conf -p 8848:8848 nginx:1.21.5

三、nacos升级至2.0.2

1、备份旧版本应用及数据库
# nacos-11\nacos-12\nacos-13应用配置及文件一致
cp /data/nacos-1.4.6/nacos-11 /data/nacos-1.4.6/nacos-bak
# 数据库可用Navicat备份
2、使用nacos-server-2.0.2配置覆盖1.4.6配置、启动脚本和应用程序
# 升级nacos集群需要每次升级一个服务nacos-11-->nacos-12-->nacos-13
# 覆盖bin、conf、target三个文件夹中文件
# 修改conf文件夹下的application.properties文件,数据库使用同一个数据库,修改鉴权开启
# nacos-1.x升级nacos-2.x需要开启双写,在新的application.properties文件添加nacos.core.support.upgrade.from.1x=true
# 依次升级nacos-11、nacos-12、nacos-13

# 鉴权开启使用
nacos.core.auth.enabled=true
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
# 默认值
nacos.core.auth.server.identity.key=serverIdentity
# 默认值
nacos.core.auth.server.identity.value=security
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
# 默认值
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
3、升级注意事项
# 每次操作完成后,可查看naming-server.log文件,可以看到有upgrade check result false 以及 Check whether close double write等日志信息。
# 所有节点升级完成后,可以从logs/naming-server.log日志中观察到upgrade check result true及Upgrade to 2.0.X。

4、关闭双写
# 集群升级完成后,无报错或无其他问题后可以关闭双写功能
# 获取accessToken
curl -X POST '172.21.0.11:8848/nacos/v1/auth/login' -d 'username=nacos&password=Secu!Js@L#20200202'
# 关闭双写
curl -X PUT '172.21.0.11:8848/nacos/v1/ns/operator/switches?entry=doubleWriteEnabled&value=false&accessToken=eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTczMDMxODgxNH0.dmgNBX4-rxC9X4eZtrdGDLJdof8LRFYEmaGw2-pXluhI8tMRMLmt2RBEiphS17Gt'
# 成功关闭后,可以从logs/naming-server.log日志中观察到Disable Double write, stop and clean v1.x cache and features字样,说明关闭双写。

四、nacos-2.0.2升级至2.3.2

1、修改token过期时间(根据实际情况配置)
# 修改token.secret.key并重启Nacos Server端后,来自Nacos Client的请求将会因无效token被拒绝。
# 直到客户端到达旧token的TTL时间后,才会重新去获取新token。
# 需要将token过期时间缩短,并等待原来的token过期。
nacos.core.auth.plugin.nacos.token.expire.seconds=5
# 等待原有token过期时间,再改回18000秒
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
2、备份
# 备份旧的nacos
tar zcf nacos-1.4.6-2.0.2.tar.gz nacos-11
3、修改数据库
# nacos版本升级之后,mysql数据架构发生改变,需要添加数据结构
ALTER TABLE config_info ADD encrypted_data_key TEXT NOT NULL COMMENT '秘钥';
ALTER TABLE config_info_beta ADD encrypted_data_key TEXT NOT NULL COMMENT '秘钥';
ALTER TABLE his_config_info ADD encrypted_data_key TEXT NOT NULL COMMENT '秘钥';
4、更替应用软件
# 停止服务
docker stop nacos-11 nacos-12 nacos-13
# 使用nacos-server-2.3.2版本
cp /data/nacos-1.4.6/nacos-2.3.2/target/nacos-server.jar /data/nacos-1.4.6/nacos-11/target/nacos-server.jar
cp /data/nacos-1.4.6/nacos-2.3.2/target/nacos-server.jar /data/nacos-1.4.6/nacos-12/target/nacos-server.jar
cp /data/nacos-1.4.6/nacos-2.3.2/target/nacos-server.jar /data/nacos-1.4.6/nacos-13/target/nacos-server.jar
cp /data/nacos-1.4.6/nacos-2.3.2/bin/startup.sh /data/nacos-1.4.6/nacos-11/bin/startup.sh
cp /data/nacos-1.4.6/nacos-2.3.2/bin/startup.sh /data/nacos-1.4.6/nacos-12/bin/startup.sh
cp /data/nacos-1.4.6/nacos-2.3.2/bin/startup.sh /data/nacos-1.4.6/nacos-13/bin/startup.sh
# 修改配置文件
# application.properties
sed -i 's/spring.datasource.platform/# spring.datasource.platform/g' /data/nacos-1.4.6/nacos-11/conf/application.properties
echo "server.tomcat.accesslog.rotate=true" >> /data/nacos-1.4.6/nacos-11/conf/application.properties
echo "nacos.config.push.maxRetryTime=50" >> /data/nacos-1.4.6/nacos-11/conf/application.properties
echo "server.tomcat.accesslog.file-date-format=.yyyy-MM-dd-HH" >> /data/nacos-1.4.6/nacos-11/conf/application.properties
echo "nacos.core.auth.plugin.nacos.token.cache.enable=false" >> /data/nacos-1.4.6/nacos-11/conf/application.properties
echo "spring.sql.init.platform=mysql" >> /data/nacos-1.4.6/nacos-11/conf/application.properties
# 同步集群内其他机器
cp /data/nacos-1.4.6/nacos-11/conf/application.properties /data/nacos-1.4.6/nacos-12/conf/application.properties
cp /data/nacos-1.4.6/nacos-11/conf/application.properties /data/nacos-1.4.6/nacos-13/conf/application.properties
5、服务启动
docker start nacos-11 nacos-12 nacos-13
6、注意事项
# 1、服务重启之后,浏览器访问需要清除缓存之后进行访问,否则会出现以下报错
## org.springframework.web.bind.UnsatisfiedServletRequestParameterException: Parameter conditions "search=accurate" OR "search=blur" not met for actual request parameters
# 2、控制台集群节点出现errMsg错误,代码1014,原因是集群节点同步问题,需要删除有问题节点的data/protocol内文件,手动删除后,该节点会从leader上再取数据,删除后重启服务
## "errMsg":"Error [type=ERROR_TYPE_LOG, status=Status[EIO<1014>: Failed operation in LogStorage]]"

附录一

nacos镜像创建
Dockerfile
FROM jdk:1.8.0_201

# 设置环境变量
ENV MODE="cluster" \
    PREFER_HOST_MODE="ip"\
    BASE_DIR="/home/nacos" \
    CLASSPATH=".:/home/nacos/conf:$CLASSPATH" \
    CLUSTER_CONF="/home/nacos/conf/cluster.conf" \
    FUNCTION_MODE="all" \
    JAVA_HOME="/usr/local/jdk1.8.0_201/" \
    NACOS_USER="nacos" \
    JAVA="/usr/local/jdk1.8.0_201/bin/java" \
    JVM_XMS="1g" \
    JVM_XMX="1g" \
    JVM_XMN="512m" \
    JVM_MS="128m" \
    JVM_MMS="320m" \
    NACOS_DEBUG="n" \
    TOMCAT_ACCESSLOG_ENABLED="false" \
    TIME_ZONE="Asia/Shanghai"

ARG NACOS_VERSION=1.4.6
ARG HOT_FIX_FLAG=""

ADD nacos-server-1.4.6.tar.gz /home/

WORKDIR $BASE_DIR

ADD docker-startup.sh bin/docker-startup.sh


# 设置启动日志目录
RUN mkdir -p logs \
	&& touch logs/start.out \
	&& ln -sf /dev/stdout logs/start.out \
	&& ln -sf /dev/stderr logs/start.out \
    && chmod +x bin/docker-startup.sh

EXPOSE 8848
ENTRYPOINT ["sh","bin/docker-startup.sh"]
docker-startup.sh
#!/bin/bash
# Copyright 1999-2018 Alibaba Group Holding Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -x
export CUSTOM_SEARCH_NAMES="application"
export CUSTOM_SEARCH_LOCATIONS=file:${BASE_DIR}/conf/
export MEMBER_LIST=""
PLUGINS_DIR="/home/nacos/plugins/peer-finder"
function print_servers() {
   if [[ ! -d "${PLUGINS_DIR}" ]]; then
    echo "" >"$CLUSTER_CONF"
    for server in ${NACOS_SERVERS}; do
      echo "$server" >>"$CLUSTER_CONF"
    done
  else
    bash $PLUGINS_DIR/plugin.sh
    sleep 30
  fi
}
#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 "
if [[ "${MODE}" == "standalone" ]]; then
  JAVA_OPT="${JAVA_OPT} -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xmn${JVM_XMN}"
  JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
  if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
    JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
  fi
  JAVA_OPT="${JAVA_OPT} -server -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xmn${JVM_XMN} -XX:MetaspaceSize=${JVM_MS} -XX:MaxMetaspaceSize=${JVM_MMS}"
  if [[ "${NACOS_DEBUG}" == "y" ]]; then
    JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
  fi
  JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
  JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
  print_servers
fi

#===========================================================================================
# Setting system properties
#===========================================================================================
# set  mode that Nacos Server function of split
if [[ "${FUNCTION_MODE}" == "config" ]]; then
  JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=config"
elif [[ "${FUNCTION_MODE}" == "naming" ]]; then
  JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=naming"
fi
# set nacos server ip
if [[ ! -z "${NACOS_SERVER_IP}" ]]; then
  JAVA_OPT="${JAVA_OPT} -Dnacos.server.ip=${NACOS_SERVER_IP}"
fi

if [[ ! -z "${USE_ONLY_SITE_INTERFACES}" ]]; then
  JAVA_OPT="${JAVA_OPT} -Dnacos.inetutils.use-only-site-local-interfaces=${USE_ONLY_SITE_INTERFACES}"
fi

if [[ ! -z "${PREFERRED_NETWORKS}" ]]; then
  JAVA_OPT="${JAVA_OPT} -Dnacos.inetutils.preferred-networks=${PREFERRED_NETWORKS}"
fi

if [[ ! -z "${IGNORED_INTERFACES}" ]]; then
  JAVA_OPT="${JAVA_OPT} -Dnacos.inetutils.ignored-interfaces=${IGNORED_INTERFACES}"
fi

### If turn on auth system:
if [[ ! -z "${NACOS_AUTH_ENABLE}" ]]; then
  JAVA_OPT="${JAVA_OPT} -Dnacos.core.auth.enabled=${NACOS_AUTH_ENABLE}"
fi

if [[ "${PREFER_HOST_MODE}" == "hostname" ]]; then
  JAVA_OPT="${JAVA_OPT} -Dnacos.preferHostnameOverIp=true"
fi
JAVA_OPT="${JAVA_OPT} -Dnacos.member.list=${MEMBER_LIST}"

JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')
if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]]; then
  JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400"
else
  JAVA_OPT_EXT_FIX="-Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"
  JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
fi

JAVA_OPT="${JAVA_OPT} -Dloader.path=${BASE_DIR}/plugins,${BASE_DIR}/plugins/health,${BASE_DIR}/plugins/cmdb,${BASE_DIR}/plugins/selector"
JAVA_OPT="${JAVA_OPT} -Dnacos.home=${BASE_DIR}"
JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/target/nacos-server.jar"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} --spring.config.additional-location=${CUSTOM_SEARCH_LOCATIONS}"
JAVA_OPT="${JAVA_OPT} --spring.config.name=${CUSTOM_SEARCH_NAMES}"
JAVA_OPT="${JAVA_OPT} --logging.config=${BASE_DIR}/conf/nacos-logback.xml"
JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288"

echo "Nacos is starting, you can docker logs your container"
exec $JAVA ${JAVA_OPT}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值