概要描述
双网卡bond配置会在主备网卡做切换时,导致serverkey的变化,进而导致hdfs,hyperbase,inceptor等多项服务不可用的问题。本文描述基于这个场景下的解决方案。
详细描述
1 初始serverkey以及网卡切换后的变化记录
初始serverkey
A7s/zEf0o8yfrsFgojoCaPf88/P8,ABzeCef7UPtBxlXNl34e6Pv719f7,BwQQWBZDU1YpaAJ4mWZT9EQSSEgS
主备网卡分别切换后的serverkey变动如下所示

2 准备需要替换的sk包
下载地址为:
http://172.16.1.168:8081/artifactory/libs-release-local/sk/sk/1.0.0/sk-1.0.0.jar
MD5: 24c819eededa0b82224ad733c8e07574
3 Manager Master节点执行
mkdir -p /home/transwarp/replace-sk/rp_manager_sk/
touch /home/transwarp/replace-sk/rp_manager_sk/change_manager_sk_record.txt
chmod 777 /home/transwarp/replace-sk/rp_manager_sk/change_manager_sk_record.txt
find / -name 'sk-0.0.1.jar' | grep -v overlay | grep -v mnt > /home/transwarp/manager_sk_jar_dir.txt

备份sdk包
cp head -n1 /home/transwarp/manager_sk_jar_dir.txt /home/transwarp/replace-sk/rp_manager_sk
替换新的sdk包,上传jar包到目录
mkdir -p /home/transwarp/ServerKey/
cat /home/transwarp/manager_sk_jar_dir.txt | while read LINE
do
sudo echo "cp /home/transwarp/ServerKey/sk-1.0.0.jar ${LINE%/*}" >> /home/transwarp/replace-sk/rp_manager_sk/change_manager_sk_record.txt
sudo cp /home/transwarp/ServerKey/sk-1.0.0.jar ${LINE%/*}
sudo echo "rm -f $LINE" >> /home/transwarp/replace-sk/rp_manager_sk/change_manager_sk_record.txt
sudo rm -f $LINE
done


4 其他所有节点执行Agent自适配Linux机器UUID文件权限设置
备份transwarp-manager-agent脚本
cp /etc/init.d/transwarp-manager-agent /etc/init.d/transwarp-manager-agent.bak
添加“sudo chmod a+r /sys/class/dmi/id/product_uuid”到transwarp-manager-agent脚本的start()部分下的第一行
vim /etc/init.d/transwarp-manager-agent

各个节点重启agent服务
/etc/init.d/transwarp-manager-agent restart
manager节点重启manager服务
/etc/init.d/transwarp-manager restart
5 其他Agent节点替换sk包
mkdir -p /home/transwarp/replace-sk/rp_manager_sk
备份原sk包
cp /usr/lib/transwarp-manager/common/lib/sk-0.0.1.jar /home/transwarp/replace-sk/rp_manager_sk
替换新的sdk包
rm -rf /usr/lib/transwarp-manager/common/lib/sk-0.0.1.jar
cp /home/transwarp/ServerKey/sk-1.0.0.jar /usr/lib/transwarp-manager/common/lib
注意权限是755
6 镜像部分
获取镜像仓库头部信息
image_repository_head=$(kubectl -n kube-system get pod -owide | grep registry | head -n1 | awk '{print $7}'):5000
从镜像仓库获取镜像信息
curl https://${image_repository_head}/v2/_catalog | jq '.repositories[]' | xargs -I {} curl https://${image_repository_head}/v2/{}/tags/list > /mnt/disk1/registry_image-info.txt

筛选镜像信息
cat /mnt/disk1/registry_image-info.txt | awk -F ":" '{print $2 $3}' | awk -F "tags" '{print $1 $2}' | awk -F "[" '{print $1 $2}' | tr -d '"' | tr -d ']}' > /mnt/disk1/images-tags.txt

拆分并重组镜像名
cd /mnt/disk1/
FILENAME=images-tags.txt
image_repository_head=$(kubectl -n kube-system get pod -owide | grep registry | head -n1 | awk '{print $7}'):5000
cat $FILENAME | while read LINE
do
#拆分字符串到数组
str=$image_repository_head/$LINE
OLD_IFS="$IFS"
IFS=","
arr=($str)
IFS="$OLD_IFS"
j=${#arr[*]}
for ((i=1; i> registry_images_name.txt
done
done

根据镜像名拉取镜像
cat registry_images_name.txt | while read LINE
do
echo "docker pull $LINE"
docker pull $LINE >> pull_images_from_registry.log
done

批量备份镜像
cat registry_images_name.txt | while read LINE
do
suffix=date "+%Y%m%d%H%M%S"
docker tag $LINE $LINE-backup-${suffix}
done

扫描sk包文件路径列表
可以去掉registry_images_name.txt里的dbaservice的image 再进行操作
cat registry_images_name.txt | while read LINE
do
echo "docker run $LINE find /usr/lib -name 'sk-*.jar'">> find_images_sk_jar.txt
docker run $LINE find /usr/lib -name 'sk-*.jar' >> find_images_sk_jar.txt
done

结束后,查看文件,总结一下,大概是以下几个组件需要换包:
apacheds
guardian
hbase
hdfs
httpfs
inceptor
inceptor-gateway
kms
search
yarn
7 编写DockerFile替换相应镜像
据替换的文件列表构建Dockerfile:
FROM tdh-test1:5000/transwarp/inceptor:transwarp-6.2.2-final
#拷贝新版本sk包到对应服务文件路径
COPY sk-1.0.0.jar /usr/lib/inceptor/lib
COPY sk-1.0.0.jar /usr/lib/hbase/lib
COPY sk-1.0.0.jar /usr/lib/hadoop-mapreduce
COPY sk-1.0.0.jar /usr/lib/hadoop/lib
#移动旧版本sk包到/tmp目录(相当于备份操作)
RUN cp /usr/lib/inceptor/lib/sk-0.0.1.jar /tmp
#清理旧版本sk包
rm –f /usr/lib/inceptor/lib/sk-0.0.1.jar
rm -f /usr/lib/hbase/lib/sk-0.0.1.jar
rm -f /usr/lib/hadoop-mapreduce/sk-0.0.1.jar
rm -f /usr/lib/hadoop/lib/sk-0.0.1.jar
docker build -t tdh-test1:5000/transwarp/:transwarp-6.2.2-final .
docker push tdh-test1:5000/transwarp/:transwarp-6.2.2-final
8 根据最新的serverkey更换许可证
联系星环项申请适配新Server Key的许可证,参考《TDH安装手册》10.2.许可证激活和使用 章节将申请到的新许可证激活。
9 Manager页面重启所有服务



注意
1 如果是集群安装后,自带的licence,没有上传过,那么默认会使用试用版licence,此时,三个月内,无论serverkey怎么变动,集群都可以用试用版licence正常启动。
2 此JAR包目前不会打进Manager安装包,需要手动提供给特许客户。 原因是: 由于该jar包 升级前后 会导致serverkey变动,如果manager全局替换的话,届时TDH或ArgoDB升级时 会导致大部分正常的集群的Serverkey都会变更,需要重新申请License,且还需要 hdfs一起升级,运维成本较高,不会主动打入安装包。 所以仅用于特需客户尝试使用。
3 此JAR包现在并不能保证100%不会发生变更。目前的逻辑获取某特殊硬件信息,若获取不到,还是会回退到获取网卡的方式,总体来说,会大大降低 serverkey变更的概率,但是由于操作系统实现的不同,还不能从理论上保证绝对防止,若出现问题,及时反馈相关信息。