GBase 8a
适配迁移
文章
GBase8a 集群 V953 版本修改IP地址脚本。
发表于2024-02-27 17:10:46192次浏览0个评论
1、本脚本适用于V953集群修改IP地址,本来用于ZH项目集群搬迁。
ZH项目计划采用移动硬盘方式进行集群搬迁,即将原集群数据备份至移动硬盘,在新的集群节点进行恢复,随后修改IP恢复集群服务。
故此脚本依赖集群列表配置文件(server_restore.lst),该文件记录个节点的角色(coor、data 或 所属vc),节点编号、以及新旧节点对应关系。
该脚本也可独立运行,可手工编写该配置文件,配置文件格式参考如下:
#cluster_name node_type sync_type node_no old_ip source_path target_path new_ip
kane coor local c1 192.168.59.41 data /opt 192.168.59.141
kane coor local c2 192.168.59.42 data /opt 192.168.59.142
kane coor local c3 192.168.59.43 data /opt 192.168.59.143
kane vc1 local d1 192.168.59.43 data /opt 192.168.59.143
kane vc1 local d2 192.168.59.53 data1 /opt 192.168.59.153
kane vc1 local d3 192.168.59.44 data /opt 192.168.59.144
kane vc1 local d4 192.168.59.54 data1 /opt 192.168.59.154
kane vc2 local d1 192.168.59.41 data /opt 192.168.59.141
kane vc2 local d2 192.168.59.51 data1 /opt 192.168.59.151
kane vc2 local d3 192.168.59.42 data /opt 192.168.59.142
kane vc2 local d4 192.168.59.52 data1 /opt 192.168.59.152
kane vc3 local d1 192.168.59.45 data /opt 192.168.59.145
kane vc3 local d2 192.168.59.55 data1 /opt 192.168.59.1552、修改之前要求已经刷新过gcware快照。
3、脚本依赖节点之间互信,请确认已配置完毕gbase用户互信。
4、修改步骤:
4.1、 先根据配置文件,生成新旧IP地址对应的nodeid;
4.2、按照节点类型,生成针对每个节点的修改脚本;
4.3、将脚本推送至相应节点,执行修改操作;
4.4、修改完成后即可启动集群。
完整脚本代码如下:
#!/bin/bash
# 需要修改的内容:
#
# # home
# /home/gbase/.gbase_profile 本机地址
#
# # gcware
# /opt/*/gcware_profile 本机地址
# /opt/*/gcware/config/gcware.conf 管理节点地址
# /opt/*/gcware/config/gcware_mmonit.conf 本机地址
# /opt/*/gcware/config/gcware_mmonit.conf 本机地址
# /opt/*/gcware/data/gcware/SNAPSHOT*/members 管理节点地址、NODEID
# /opt/*/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DATACLUSTERSTATE 数据节点NODEID (可能为负数,int范围内)
# /opt/*/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DATASERVER 数据节点地址、NODEID (均为正数)
# /opt/*/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DISTRIBUTION 数据节点NODEID(均为正数)
#
# # coor
# /opt/*/gbase_profile 本机地址
# /opt/*/gcluster/config/cluster_common.cnf 所有节点地址、本机NODEID
# /opt/*/gcluster/config/gbase_8a_gcluster.cnf 管理节点地址
# /opt/*/gcluster/config/gcmmonit.conf 本机地址/本机其他地址
# /opt/*/gcluster/config/gcmonit.conf 本机地址/本机其他地址、gbase_本机地址/其他地址、syncserver_本机地址/其他地址
#
# # data
# /opt/*/gbase_profile 本机地址
# /opt/*/gcluster/config/cluster_common.cnf 所有节点地址
# /opt/*/gcluster/config/gbase_8a_gbase.cnf 本机地址
# /opt/*/gcluster/config/gcmmonit.conf 本机地址/本机其他地址
# /opt/*/gcluster/config/gcmonit.conf 本机地址/本机其他地址、gbase_本机地址/其他地址、syncserver_本机地址/其他地址
wd=$(cd `dirname $0` && pwd)
tmpdir=${wd}/tmp
if [ ! -d ${tmpdir} ]
then
mkdir -p ${tmpdir}
fi
get_node_id()
{
ip=(`echo $1| sed 's/\./ /g'`)
#echo ${ip[@]}
sum=0
for i in 0 1 2 3
do
t=${ip[i]}
sum=$((sum+(t<<(8*i))))
done
echo $sum
}
gen_new_list()
{
echo "Calculating node id ..."
i=0
> ${wd}/new_ip_list.txt
while read cluster_name node_type rsync_type node_name source_ip source_path target_path target_ip
do
old_id=`get_node_id ${source_ip}` # 原nodeid, 正数
new_id=`get_node_id ${target_ip}` # 新nodeid, 正数
hostname=`ssh -n ${target_ip} hostname`
old_id_m=-$((2**32-old_id)) # 原nodeid,负数
new_id_t=$((2**32-new_id))
if [ ${new_id_t} -lt ${new_id} ]
then
new_id_m="-${new_id_t}" # 新nodeid,int值,可能正或负,用于 DATACLUSTERSTATE
else
new_id_m=${new_id}
fi
#echo -e "${cluster_name}\t${node_type}\t${node_name}\t${source_ip}\t${old_id}\t$((2**32-old_id))\t${target_ip}\t${new_id}\t$((2**32-new_id))\t${hostname}" >> ${wd}/new_ip_list.txt
echo -e "${cluster_name}\t${node_type}\t${node_name}\t${source_ip}\t${old_id}\t${old_id_m}\t${target_ip}\t${new_id}\t${new_id_m}\t${hostname}" >> ${wd}/new_ip_list.txt
i=$((i+1))
if [ $((i%10)) -eq 0 ]
then
echo "${i} nodes calculate over."
fi
done < ${wd}/server_restore.lst
#done < ${wd}/../server_restore.lst
echo "All ${i} nodes calculate over."
}
do_replace()
{
while read cluster_name node_type node_name old_ip old_id old_id_m new_ip new_id new_id_m hostname
do
scp ${tmpdir}/replace_ip_${node_type}_${node_name}_${old_ip}_to_${new_ip}.sh ${new_ip}:/tmp < /dev/null
ssh ${new_ip} "sh /tmp/replace_ip_${node_type}_${node_name}_${old_ip}_to_${new_ip}.sh" < /dev/null
echo "Replace DONE on ${node_type} ${node_name} ${new_ip}. "
done < ${wd}/new_ip_list.txt
}
make_shell()
{
# Loop layer 1 : nodes
while read cluster_name node_type node_name old_ip old_id old_id_m new_ip new_id new_id_m hostname
do
#echo "Making scripts for ${node_type}-${node_name}: ${old_ip} ..."
filename=${tmpdir}/replace_ip_${node_type}_${node_name}_${old_ip}_to_${new_ip}.sh
#echo "${node_type} ${node_name} ${old_ip} ${old_id} -${old_id_m} ${new_ip} ${new_id} -${new_id_m} ${hostname} ${filename}"
> ${filename}
### 1、Only replace local
echo "# 1、 local IP" >> ${filename}
# 1.1 profile
echo "sed -i 's/\<${old_ip}\>/${new_ip}/g' /home/gbase/.gbase_profile" >> ${filename}
echo "sed -i 's/\<${old_ip}\>/${new_ip}/g' /opt/${new_ip}/gbase_profile" >> ${filename}
# 1.2 gcware_profile 、gcware_monit/mmonit
if [ "${node_type}" == "coor" ]
then
echo "sed -i 's/\<${old_ip}\>/${new_ip}/g' /opt/${new_ip}/gcware_profile" >> ${filename}
echo "sed -i 's/\<${old_ip}\>/${new_ip}/g' /opt/${new_ip}/gcware/config/gcware_mmonit.conf" >> ${filename}
echo "sed -i 's/\<${old_ip}\>/${new_ip}/g' /opt/${new_ip}/gcware/config/gcware_monit.conf" >> ${filename}
fi
# 1.3 data gbase_8a_gbase.cnf 、synctool.conf
if [ "${node_type}" != "coor" ]
then
echo "sed -i 's/\<${old_ip}\>/${new_ip}/g' /opt/${new_ip}/gnode/config/gbase_8a_gbase.cnf" >> ${filename}
echo "sed -i 's/\<${old_ip}\>/${new_ip}/g' /opt/${new_ip}/gnode/config/synctool.conf" >> ${filename}
fi
# 1.4 gc cluster_common.cnf local NODEID
if [ "${node_type}" = "coor" ]
then
echo "sed -i 's/\<${old_id}\>/${new_id}/g' /opt/${new_ip}/gcluster/config/cluster_common.cnf" >> ${filename}
echo "sed -i 's/\<${old_id_m}\>/${new_id_m}/g' /opt/${new_ip}/gcluster/config/cluster_common.cnf" >> ${filename}
fi
# Loop layer 2: contents
while read cluster_name_2 node_type_2 node_name_2 old_ip_2 old_id_2 old_id_m_2 new_ip_2 new_id_2 new_id_m_2 hostname_2
do
#echo "${node_type_2} ${node_name_2} ${old_ip_2} ${old_id_2} -${old_id_m_2} ${new_ip_2} ${new_id_2} -${new_id_m_2} ${hostname_2}"
echo -e "\n#${node_type} ${node_name} ${old_ip} <---> ${node_type_2} ${node_name_2} ${old_ip_2} ${new_ip_2}" >> ${filename}
### 2、Replace All coor IP & ID
echo -e "\n# 2、All coor IP & ID " >> ${filename}
# 2.1、gcware.conf 、gbase_8a_gcluster.cnf(local & dblink)
if [ "${node_type}" == "coor" ] && [ "${node_type_2}" == "coor" ]
then
echo "sed -i 's/\<${old_ip_2}\>/${new_ip_2}/g' /opt/${new_ip}/gcware/config/gcware.conf" >> ${filename}
echo "sed -i 's/\<${old_ip_2}\>/${new_ip_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/members" >> ${filename}
echo "sed -i 's/\<${old_id_2}\>/${new_id_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/members" >> ${filename}
echo "sed -i 's/\<${old_id_m_2}\>/${new_id_m_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/members" >> ${filename}
echo "sed -i 's/\<${old_ip_2}\>/${new_ip_2}/g' /opt/${new_ip}/gcluster/config/gbase_8a_gcluster.cnf" >> ${filename}
fi
### 3、Replace All IP on localhost
echo -e "\n# 3、All IP on localhost " >> ${filename}
# 3.1 coor gcmonit、gcmmonit replace also gbase_IP syncserver_IP
if [ "${node_type}" == "coor" ] && [ "${hostname}" == "${hostname_2}" ]
then
echo "sed -i 's/\<${old_ip_2}\>/${new_ip_2}/g' /opt/${new_ip}/gcluster/config/gcmmonit.conf" >> ${filename}
echo "sed -i 's/\<${old_ip_2}\>/${new_ip_2}/g' /opt/${new_ip}/gcluster/config/gcmonit.conf" >> ${filename}
echo "sed -i 's/\<gbase_${old_ip_2}\>/gbase_${new_ip_2}/g' /opt/${new_ip}/gcluster/config/gcmonit.conf" >> ${filename}
echo "sed -i 's/\<syncserver_${old_ip_2}\>/syncserver_${new_ip_2}/g' /opt/${new_ip}/gcluster/config/gcmonit.conf" >> ${filename}
fi
# 3.2 data gcmonit、gcmmonit replace also gbase_IP syncserver_IP
if [ "${node_type}" != "coor" ] && [ "${hostname}" == "${hostname_2}" ]
then
echo "if [ -f /opt/${new_ip}/gnode/config/gcmmonit.conf ]; then sed -i 's/\<${old_ip_2}\>/${new_ip_2}/g' /opt/${new_ip}/gnode/config/gcmmonit.conf ; fi" >> ${filename}
echo "if [ -f /opt/${new_ip}/gnode/config/gcmonit.conf ]; then sed -i 's/\<${old_ip_2}\>/${new_ip_2}/g' /opt/${new_ip}/gnode/config/gcmonit.conf" >> ${filename}
echo "sed -i 's/\<gbase_${old_ip_2}\>/gbase_${new_ip_2}/g' /opt/${new_ip}/gnode/config/gcmonit.conf " >> ${filename}
echo "sed -i 's/\<syncserver_${old_ip_2}\>/syncserver_${new_ip_2}/g' /opt/${new_ip}/gnode/config/gcmonit.conf ; fi" >> ${filename}
fi
### 4、Replace gcware datanode IP & ID
echo -e "\n# 4、datenode IP & ID " >> ${filename}
if [ "${node_type}" == "coor" ] && [ "${node_type_2}" != "coor" ]
then
echo "sed -i 's/\<${old_ip_2}\>/${new_ip_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DATASERVER" >> ${filename}
echo "sed -i 's/\<${old_id_2}\>/${new_id_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DATASERVER" >> ${filename}
#echo "sed -i 's/\<${old_id_m_2}\>/${new_id_m_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DATASERVER" >> ${filename}
# DATACLUSTERSTATE中,nodeid有可能是负数,int范围内
#echo "sed -i 's/\<${old_id_2}\>/${new_id_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DATACLUSTERSTATE" >> ${filename}
#echo "sed -i 's/\<${old_id_m_2}\>/${new_id_m_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DATACLUSTERSTATE" >> ${filename}
echo "sed -i 's/${old_id_2}/${new_id_m_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DATACLUSTERSTATE" >> ${filename}
echo "sed -i 's/${old_id_m_2}/${new_id_m_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DATACLUSTERSTATE" >> ${filename}
echo "sed -i 's/\<${old_id_2}\>/${new_id_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DISTRIBUTION" >> ${filename}
#echo "sed -i 's/\<${old_id_m_2}\>/${new_id_m_2}/g' /opt/${new_ip}/gcware/data/gcware/SNAPSHOT*/statemachine/vc*/DISTRIBUTION" >> ${filename}
fi
### 5、All IP
echo -e "\n# 5、All IP " >> ${filename}
# 5.1、 coor cluster_common.cnf
if [ "${node_type}" == "coor" ]
then
echo "sed -i 's/\<${old_ip_2}\>/${new_ip_2}/g' /opt/${new_ip}/gcluster/config/cluster_common.cnf" >> ${filename}
else
echo "sed -i 's/\<${old_ip_2}\>/${new_ip_2}/g' /opt/${new_ip}/gnode/config/cluster_common.cnf" >> ${filename}
fi
done < ${wd}/new_ip_list.txt
done < ${wd}/new_ip_list.txt
}
main()
{
gen_new_list
make_shell
do_replace
}
main
评论
登录后才可以发表评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25052
- 42023-09-25浏览数:18521
- 52020-05-11浏览数:17526