校园网站策划书,辽宁城乡建设官方网站,校友会网站建设的目的,海南旅游网页设计HBASE集群主节点迁移割接手动操作步骤
HBASE集群主节点指的是包含zk、nn、HM和rm服务的节点#xff0c;一般这类服务都是一起复用在同一批节点上#xff0c;我把这一类节点统称为HBASE集群主节点。
本文中使用了rsync、pssh等工具#xff0c;这类是开源的#xff0c;自己…HBASE集群主节点迁移割接手动操作步骤
HBASE集群主节点指的是包含zk、nn、HM和rm服务的节点一般这类服务都是一起复用在同一批节点上我把这一类节点统称为HBASE集群主节点。
本文中使用了rsync、pssh等工具这类是开源的自己可以下载安装。还有一类是我自己写的环境变量xcgraceful_stopRegionserver是用于优雅的停regionserver建议使用脚本停有时候可能会出现优雅的停失效的问题。dxshell和xcjpsuser是一些我放在环境变量里面堡垒机全局生效脚本内容会附在文章末尾。
一、迁移前准备工作
1、迁移规划
迁移节点 主机名 目标节点 角色 节点别名
10.168.168.1 hbase01.colabigdata.com 10.168.201.1 zk,nn,dn,jn,ZKFC,HM,HRS,rm,nm node1
10.168.168.2 hbase02.colabigdata.com 10.168.201.2 zk,nn,dn,jn,ZKFC,HM,HRS,rm,nm node2
10.168.168.3 hbase03.colabigdata.com 10.168.201.3 zk,dn,jn,HRS,nm node3
10.168.168.4 hbase04.colabigdata.com 10.168.201.4 zk,dn,jn,HRS,nm node4
10.168.168.5 hbase05.colabigdata.com 10.168.201.5 zk,dn,jn,HRS,nm node52、生成hosts文件
只包含集群在线的节点不包含未扩容的。用于迁移过程中每替换一个IP需要修改一次/etc/hosts文件。
# vim move_hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain610.168.168.1 hbase01.colabigdata.com
10.168.168.2 hbase02.colabigdata.com
10.168.168.3 hbase03.colabigdata.com
10.168.168.4 hbase04.colabigdata.com
10.168.168.5 hbase05.colabigdata.com
10.168.168.6 hbase06.colabigdata.com
10.168.168.7 hbase07.colabigdata.com
10.168.168.8 hbase08.colabigdata.com
10.168.168.9 hbase09.colabigdata.com
10.168.168.10 hbase10.colabigdata.com3、准备集群IP列表
此IP列表与hosts是对应关系用于批量执行命令时使用。
cat move_list EOF
10.168.168.1
10.168.168.2
10.168.168.3
10.168.168.4
10.168.168.5
10.168.168.6
10.168.168.7
10.168.168.8
10.168.168.9
10.168.168.10
EOF4、准备zk集群IP列表
集群zk在线IP列表(不含新主节点ip)move_zk_list
cat move_zk_list EOF
10.168.168.1
10.168.168.2
10.168.168.3
10.168.168.4
10.168.168.5
EOF5、准备除zk集群外IP列表
集群在非zk节点IP列表(不含新主节点ip)data_list
cat data_list EOF
10.168.168.6
10.168.168.7
10.168.168.8
10.168.168.9
10.168.168.10
EOF6、准备旧zk集群IP列表
cat old_zk_list EOF
10.168.168.1
10.168.168.2
10.168.168.3
10.168.168.4
10.168.168.5
EOF7、准备新zk集群IP列表
cat new_zk_list EOF
10.168.201.1
10.168.201.2
10.168.201.3
10.168.201.4
10.168.201.5
EOF8、目标节点组件安装
五个目标zk节点zookeeper、hdfs、hbase、yarn组件已经提前安装完毕未启动任何服务。
9、删除cmdb数据关闭告警和自启脚本
dxshell move_list userdel -r bdalarmdxshell move_list cd /var/spool/cron;rm -f bdalarm*10、关闭主节点dn、nm和rs服务
注意排除主节点非核心服务方便迁移
dxshell move_zk_list su - bigdata -c hadoop-daemon.sh stop datanodedxshell move_zk_list su - yarn -c yarn-daemon.sh stop nodemanager#这里是优雅的停Regionserver
xcgraceful_stopRegionserver move_zk_list###正式开始迁移操作###
二、node5迁移
1、老机器停JN
sudo ssh 10.168.168.5 su - bigdata -c hadoop-daemon.sh stop journalnodesudo ssh 10.168.168.5 su - bigdata -c jps2、老机器停ZK
sudo ssh 10.168.168.5 su - zookeeper -c zkServer.sh stopsudo ssh 10.168.168.5 su - zookeeper -c jps3、老机器改主机名
sudo ssh 10.168.168.5 hostnamectl set-hostname cola_node54、DNS域名解析变更
使用的域名删除迁移节点IP变更为目标节点IP。
5、更新/etc/hosts
#将move_list、move_hosts、move_zk_list文件中的 迁移节点IP 修改为目标节点 IP
sed -i s/10.168.168.5/10.168.201.5/g move_*#备份所有节点hosts
sudo pssh -h move_list cp /etc/hosts /etc/hosts_$(date %Y%m%d)_movenode5#分发全量hosts到move_list列表
sudo pscp.pssh -h move_list move_hosts /etc/hosts6、依次重启所有zk服务
注意列表IP不要并发重启
dxshell move_zk_list su - zookeeper -c zkServer.sh stop ; zkServer.sh start7、查看zk服务状态
dxshell move_zk_list su - zookeeper -c zkServer.sh status8、验证zk_followers节点数量
先找到leader节点
echo mntr | nc ${leader} 2015 |grep followerszk_followers与zk_synced_followers的值相等则正常
9、拷贝node5的jn元数据到目标节点
mkdir baknode5rsync -e sudo ssh -r 10.168.168.5:/home/bigdata/hadoop/journal baknode5/rsync -e sudo ssh -r baknode5/journal 10.168.201.5:/home/bigdata/hadoop/sudo ssh 10.168.201.5 chown -R bigdata:bigdata /home/bigdata/hadoop10、node5目标节点启动JN服务
sudo ssh 10.168.201.5 su - bigdata -c hadoop-daemon.sh start journalnode验证jn同步情况及日志输出是否正常。namenode的50070页面上查看NameNode Journal StatusWritten txid 一致则同步完成。
三、node4迁移
1、老机器停JN
sudo ssh 10.168.168.4 su - bigdata -c hadoop-daemon.sh stop journalnodesudo ssh 10.168.168.4 su - bigdata -c jps2、老机器停ZK
sudo ssh 10.168.168.4 su - zookeeper -c zkServer.sh stopsudo ssh 10.168.168.4 su - zookeeper -c jps3、老机器改主机名
sudo ssh 10.168.168.4 hostnamectl set-hostname cola_node44、DNS域名解析变更
使用的域名删除迁移节点IP变更为目标节点IP。
5、更新/etc/hosts
#将move_list、move_hosts、move_zk_list文件中的 迁移节点IP 修改为目标节点 IP
sed -i s/10.168.168.4/10.168.201.4/g move_*#备份所有节点hosts
sudo pssh -h move_list cp /etc/hosts /etc/hosts_$(date %Y%m%d)_movenode4#分发全量hosts到move_list列表
sudo pscp.pssh -h move_list move_hosts /etc/hosts6、依次重启所有zk服务
注意列表IP不要并发重启
dxshell move_zk_list su - zookeeper -c zkServer.sh stop ; zkServer.sh start7、查看zk服务状态
dxshell move_zk_list su - zookeeper -c zkServer.sh status8、验证zk_followers节点数量
先找到leader节点
echo mntr | nc ${leader} 2015 |grep followerszk_followers与zk_synced_followers的值相等则正常
9、拷贝node4的jn元数据到目标节点
mkdir baknode4rsync -e sudo ssh -r 10.168.168.4:/home/bigdata/hadoop/journal baknode4/rsync -e sudo ssh -r baknode4/journal 10.168.201.4:/home/bigdata/hadoop/sudo ssh 10.168.201.4 chown -R bigdata:bigdata /home/bigdata/hadoop10、node4目标节点启动JN服务
sudo ssh 10.168.201.4 su - bigdata -c hadoop-daemon.sh start journalnode验证jn同步情况及日志输出是否正常。namenode的50070页面上查看NameNode Journal StatusWritten txid 一致则同步完成。
四、第一次nn主备切换
主备切换的目的是担心nn不是认识新的zk5和zk4从而有可能导致后续nn迁移失败。做一次nn切换可以保证active nn在切换后可以检测认识到新zk5和zk4。这是一种非常保守的做法只是因为一次生产事故后做出的一种改变。
1、获取nn1和nn2的状态
sudo ssh 10.168.168.1 su - bigdata -c hdfs haadmin -getServiceState nn1
standbysudo ssh 10.168.168.2 su - bigdata -c hdfs haadmin -getServiceState nn2
active2、重启standby nn服务
sudo ssh 10.168.168.1 su - bigdata -c hadoop-daemon.sh stop namenodesudo ssh 10.168.168.1 su - bigdata -c hadoop-daemon.sh start namenode3、执行主备切换
注意等待nn退出安全模式后再执行切换。
如下命令是将active nn从nn2切换到nn1
sudo ssh 10.168.168.2 su - bigdata -c hdfs haadmin -failover nn2 nn1五、node3迁移
1、老机器停JN
sudo ssh 10.168.168.3 su - bigdata -c hadoop-daemon.sh stop journalnodesudo ssh 10.168.168.3 su - bigdata -c jps2、老机器停ZK
sudo ssh 10.168.168.3 su - zookeeper -c zkServer.sh stopsudo ssh 10.168.168.3 su - zookeeper -c jps3、老机器改主机名
sudo ssh 10.168.168.3 hostnamectl set-hostname cola_node34、DNS域名解析变更
使用的域名删除迁移节点IP变更为目标节点IP。
5、更新/etc/hosts
#将move_list、move_hosts、move_zk_list文件中的 迁移节点IP 修改为目标节点 IP
sed -i s/10.168.168.3/10.168.201.3/g move_*#备份所有节点hosts
sudo pssh -h move_list cp /etc/hosts /etc/hosts_$(date %Y%m%d)_movenode3#分发全量hosts到move_list列表
sudo pscp.pssh -h move_list move_hosts /etc/hosts6、依次重启所有zk服务
注意列表IP不要并发重启
dxshell move_zk_list su - zookeeper -c zkServer.sh stop ; zkServer.sh start7、查看zk服务状态
dxshell move_zk_list su - zookeeper -c zkServer.sh status8、验证zk_followers节点数量
先找到leader节点
echo mntr | nc ${leader} 2015 |grep followerszk_followers与zk_synced_followers的值相等则正常
9、拷贝node3的jn元数据到目标节点
mkdir baknode3rsync -e sudo ssh -r 10.168.168.3:/home/bigdata/hadoop/journal baknode3/rsync -e sudo ssh -r baknode3/journal 10.168.201.3:/home/bigdata/hadoop/sudo ssh 10.168.201.3 chown -R bigdata:bigdata /home/bigdata/hadoop10、node3目标节点启动JN服务
sudo ssh 10.168.201.3 su - bigdata -c hadoop-daemon.sh start journalnode验证jn同步情况及日志输出是否正常。namenode的50070页面上查看NameNode Journal StatusWritten txid 一致则同步完成。
注意如果长时间同步一不一致可以尝试把正确jn数据重新复制一份到新节点。
六、node2迁移
先确认namenode的active和standby分布在那个节点上。如果node1是activenode2是standby必须先迁移standby。
迁移到目前为止当前主节点列表应该和如下一致。
10.168.168.1 hbase01.colabigdata.com
10.168.168.2 hbase02.colabigdata.com
10.168.201.3 hbase03.colabigdata.com
10.168.201.4 hbase04.colabigdata.com
10.168.201.5 hbase05.colabigdata.com1、获取nn1和nn2的状态
sudo ssh 10.168.168.1 su - bigdata -c hdfs haadmin -getServiceState nn1
standbysudo ssh 10.168.168.2 su - bigdata -c hdfs haadmin -getServiceState nn2
active2、先停standby nn节点的zkfc
sudo ssh 10.168.168.2 su - bigdata -c hadoop-daemon.sh stop zkfc3、再停active nn节点的zkfc
sudo ssh 10.168.168.1 su - bigdata -c hadoop-daemon.sh stop zkfc注意如果当前standby为node2就先操作node2节点的迁移原则上先操作standby节点。
注如果node2不是standby建议提前将node2切换为standby。因为操作步骤中是按照node5~node1顺序迁移写的如果现场改操作内容可能会导致操作变复杂。
4、停node2节点所有服务
sudo ssh 10.168.168.2 su - yarn -c yarn-daemon.sh stop resourcemanager
sudo ssh 10.168.168.2 su - yarn -c mr-jobhistory-daemon.sh stop historyserver
sudo ssh 10.168.168.2 su - hbase -c hbase-daemon.sh stop master
sudo ssh 10.168.168.2 su - bigdata -c hadoop-daemon.sh stop journalnode
sudo ssh 10.168.168.2 su - bigdata -c hadoop-daemon.sh stop namenode
sudo ssh 10.168.168.2 su - zookeeper -c zkServer.sh stop5、老机器改主机名
sudo ssh 10.168.168.2 hostnamectl set-hostname cola_node26、DNS域名解析变更
使用的域名删除迁移节点IP变更为目标节点IP。
7、更新/etc/hosts
#将move_list、move_hosts、move_zk_list文件中的 迁移节点IP 修改为目标节点 IP
sed -i s/10.168.168.2/10.168.201.2/g move_*#备份所有节点hosts
sudo pssh -h move_list cp /etc/hosts /etc/hosts_$(date %Y%m%d)_movenode2#分发全量hosts到move_list列表
sudo pscp.pssh -h move_list move_hosts /etc/hosts8、备份JN元数据、NN元数据fsimage和editlog日志
mkdir baknode2rsync -e sudo ssh -r 10.168.168.2/home/bigdata/hadoop/journal baknode2/rsync -e sudo ssh -r 10.168.168.2:/metadata/namenode baknode2/rsync -e sudo ssh -r 10.168.168.2:/log/bigdata/hdfs-audit.log baknode2/9、拷贝JN元数据、NN元数据到新节点
# 拷贝JN元数据到新节点
rsync -e sudo ssh -r baknode2/journal 10.168.201.2:/home/bigdata/hadoop/sudo ssh 10.168.201.2 chown -R bigdata:bigdata /home/bigdata/hadoop# 拷贝NN元数据到新节点
sudo ssh 10.168.201.2 mkdir /log/bigdatarsync -e sudo ssh -r baknode2/namenode 10.168.201.2:/metadata/sudo ssh 10.168.201.2 chown -R bigdata:bigdata /metadata/namenodersync -e sudo ssh -r baknode2/hdfs-audit.log 10.168.201.2:/home/bigdata/hadoop/sudo ssh 10.168.201.2 chown -R bigdata:bigdata /logsudo ssh 10.168.201.2 su - bigdata -c cd hadoop;ln -nsf /log/bigdata logs; ln -nsf /metadata/namenode namenode10、新机器启动 journalnode 和 namenode
sudo ssh 10.168.201.2 su - bigdata -c hadoop-daemon.sh start journalnodesudo ssh 10.168.201.2 su - bigdata -c hadoop-daemon.sh start namenodea、验证jn同步情况及日志输出是否正常。namenode的50070页面上查看NameNode Journal StatusWritten txid 一致则同步完成。
b、验证standby文件数和block数与active是否一致是否实时更新不断观察日志当standby nn 进入safemode后如有异常立即停止standby nn进程确认问题原因。
c、实时观察dn日志Block report是否报错进入安全模式之后。
11、依次重启所有zk服务
注意列表IP不要并发重启
dxshell move_zk_list su - zookeeper -c zkServer.sh stop ; zkServer.sh start12、查看zk服务状态
dxshell move_zk_list su - zookeeper -c zkServer.sh status13、验证zk_followers节点数量
先找到leader节点
echo mntr | nc ${leader} 2015 |grep followerszk_followers与zk_synced_followers的值相等则正常
14、新机器启动HMaster
sudo ssh 10.168.201.2 su - hbase -c hbase-daemon.sh start master查看16010界面master状态是否正常
15、新机器启动ResourceManager和historyserver服务
sudo ssh 10.168.201.2 su - yarn -c yarn-daemon.sh start resourcemanagersudo ssh 10.168.201.2 su - yarn -c mr-jobhistory-daemon.sh start historyserver16、重启node1节点HMaster服务
sudo ssh 10.168.168.1 su - hbase -c hbase-daemon.sh stop master
sudo ssh 10.168.168.1 su - hbase -c hbase-daemon.sh start master17、重启node1节点ResourceManager服务
sudo ssh 10.168.168.1 su - yarn -c yarn-daemon.sh stop resourcemanager sleep 10s yarn-daemon.sh start resourcemanager18、第一次滚动重启客户端服务
重启regionserverdatanode、nodemanager服务。所有数据节点在 data_list文件中。
dxshell data_list su - hbase -c hbase-daemon.sh restart regionserverxcjpsuser data_list hbasedxshell data_list su - bigdata -c hadoop-daemon.sh stop datanode hadoop-daemon.sh start datanodexcjpsuser data_list bigdatadxshell data_list su - yarn -c yarn-daemon.sh stop nodemanager yarn-daemon.sh start nodemanagerxcjpsuser data_list yarn七、第二次nn主备切换
这一次主备切换主要是为了将active nn切换至新节点检验新节点是否可以切换成功。第二个目的是将node1变为standby减少node1迁移的影响。
1、获取nn1和nn2的状态
sudo ssh 10.168.168.1 su - bigdata -c hdfs haadmin -getServiceState nn1
activesudo ssh 10.168.201.2 su - bigdata -c hdfs haadmin -getServiceState nn2
standby2、启动zkfc
sudo ssh 10.168.168.1 su - bigdata -c hadoop-daemon.sh start zkfcsudo ssh 10.168.201.2 su - bigdata -c hadoop-daemon.sh start zkfc3、新节点10.168.201.2生成秘钥
su - bigdata#一路回车
ssh-keygen -t rsa#在.ssh目录下新建authorized_keys文件
touch ~/.ssh/authorized_keys#修改权限.ssh必须是700authorized_keys必须是600。否则可能会提醒你输入密码免密不成功。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys 4、做nn1和nn2互密
将彼此的 ~/.ssh/id_rsa.pub公钥文件内容 -- 追加到~/.ssh/authorized_keys文件中5、执行主备切换
本次不用等fsimage元数据合并了只要该节点jn有edits新数据就可以了。
# nn1 to nn2根据实际情况
sudo ssh 10.168.201.2 su - bigdata -c hdfs haadmin -failover nn1 nn26、验证主备切换是否成功
curl -s http://10.168.168.1:50070/jmx?qryHadoop:serviceNameNode,nameFSNamesystem |jq -r .beans[0].tag.HAStatecurl -s http://10.168.201.2:50070/jmx?qryHadoop:serviceNameNode,nameFSNamesystem |jq -r .beans[0].tag.HAState八、node1迁移
先确认namenode的active和standby分布在那个节点上。node1是最后一个节点了此刻该节点是standby才对如果不对那就是你漏了什么步骤。建议手动切换后再迁移。
迁移到目前为止当前主节点列表应该和如下一致。
10.168.168.1 hbase01.colabigdata.com
10.168.201.2 hbase02.colabigdata.com
10.168.201.3 hbase03.colabigdata.com
10.168.201.4 hbase04.colabigdata.com
10.168.201.5 hbase05.colabigdata.com1、获取nn1和nn2的状态
sudo ssh 10.168.168.1 su - bigdata -c hdfs haadmin -getServiceState nn1
activesudo ssh 10.168.201.2 su - bigdata -c hdfs haadmin -getServiceState nn2
standby2、先停standby nn节点的zkfc
sudo ssh 10.168.168.1 su - bigdata -c hadoop-daemon.sh stop zkfc3、再停active nn节点的zkfc
sudo ssh 10.168.201.2 su - bigdata -c hadoop-daemon.sh stop zkfc4、停node1节点所有服务
sudo ssh 10.168.168.1 su - yarn -c yarn-daemon.sh stop resourcemanager
sudo ssh 10.168.168.1 su - hbase -c hbase-daemon.sh stop master
sudo ssh 10.168.168.1 su - bigdata -c hadoop-daemon.sh stop journalnode
sudo ssh 10.168.168.1 su - bigdata -c hadoop-daemon.sh stop namenode
sudo ssh 10.168.168.1 su - zookeeper -c zkServer.sh stop5、老机器改主机名
sudo ssh 10.168.168.1 hostnamectl set-hostname cola_node16、DNS域名解析变更
使用的域名删除迁移节点IP变更为目标节点IP。
7、更新/etc/hosts
#将move_list、move_hosts、move_zk_list文件中的 迁移节点IP 修改为目标节点 IP
sed -i s/10.168.168.1/10.168.201.1/g move_*#备份所有节点hosts
sudo pssh -h move_list cp /etc/hosts /etc/hosts_$(date %Y%m%d)_movenode1#分发全量hosts到move_list列表
sudo pscp.pssh -h move_list move_hosts /etc/hosts8、备份JN元数据、NN元数据fsimage和editlog日志
mkdir baknode1rsync -e sudo ssh -r 10.168.168.1:/home/bigdata/hadoop/journal baknode1/rsync -e sudo ssh -r 10.168.168.1:/metadata/namenode baknode1/rsync -e sudo ssh -r 10.168.168.1:/log/bigdata/hdfs-audit.log baknode1/9、拷贝JN元数据、NN元数据到新节点
# 拷贝JN元数据到新节点
rsync -e sudo ssh -r baknode1/journal 10.168.201.1:/home/bigdata/hadoop/sudo ssh 10.168.201.1 chown -R bigdata:bigdata /home/bigdata/hadoop# 拷贝NN元数据到新节点
sudo ssh 10.168.201.1 mkdir /log/bigdatarsync -e sudo ssh -r baknode1/namenode 10.168.201.1:/metadata/sudo ssh 10.168.201.1 chown -R bigdata:bigdata /metadata/namenodersync -e sudo ssh -r baknode1/hdfs-audit.log 10.168.201.1:/home/bigdata/hadoop/sudo ssh 10.168.201.1 chown -R bigdata:bigdata /logsudo ssh 10.168.201.1 su - bigdata -c cd hadoop;ln -nsf /log/bigdata logs; ln -nsf /metadata/namenode namenode10、新机器启动 journalnode 和 namenode
sudo ssh 10.168.201.1 su - bigdata -c hadoop-daemon.sh start journalnodesudo ssh 10.168.201.1 su - bigdata -c hadoop-daemon.sh start namenodea、验证jn同步情况及日志输出是否正常。namenode的50070页面上查看NameNode Journal StatusWritten txid 一致则同步完成。
b、验证standby文件数和block数与active是否一致是否实时更新不断观察日志当standby nn 进入safemode后如有异常立即停止standby nn进程确认问题原因。
c、实时观察dn日志Block report是否报错进入安全模式之后。
11、依次重启所有zk服务
注意列表IP不要并发重启
dxshell move_zk_list su - zookeeper -c zkServer.sh stop ; zkServer.sh start12、查看zk服务状态
dxshell move_zk_list su - zookeeper -c zkServer.sh status13、验证zk_followers节点数量
先找到leader节点
echo mntr | nc ${leader} 2015 |grep followerszk_followers与zk_synced_followers的值相等则正常
14、新机器启动HMaster
sudo ssh 10.168.201.1 su - hbase -c hbase-daemon.sh start master查看16010界面master状态是否正常
15、新机器启动ResourceManager
sudo ssh 10.168.201.1 su - yarn -c yarn-daemon.sh start resourcemanager16、重启node2节点HMaster服务
sudo ssh 10.168.201.2 su - hbase -c hbase-daemon.sh stop master
sudo ssh 10.168.201.2 su - hbase -c hbase-daemon.sh start master17、重启node2节点ResourceManager服务
sudo ssh 10.168.201.2 su - yarn -c yarn-daemon.sh stop resourcemanager ; yarn-daemon.sh start resourcemanager18、第二次滚动重启客户端服务
重启regionserverdatanode、nodemanager服务。所有数据节点在 data_list文件中。
dxshell data_list su - hbase -c hbase-daemon.sh restart regionserverxcjpsuser data_list hbasedxshell data_list su - bigdata -c hadoop-daemon.sh stop datanode hadoop-daemon.sh start datanodexcjpsuser data_list bigdatadxshell data_list su - yarn -c yarn-daemon.sh stop nodemanager yarn-daemon.sh start nodemanagerxcjpsuser data_list yarn九、第三次nn主备切换
这一次主备切换主要是为了将active nn切换至node1新节点检验最后一个新节点是否可以切换成功。
1、获取nn1和nn2的状态
sudo ssh 10.168.201.1 su - bigdata -c hdfs haadmin -getServiceState nn1
standbysudo ssh 10.168.201.2 su - bigdata -c hdfs haadmin -getServiceState nn2
active2、启动zkfc
sudo ssh 10.168.201.1 su - bigdata -c hadoop-daemon.sh start zkfcsudo ssh 10.168.201.2 su - bigdata -c hadoop-daemon.sh start zkfc3、新节点10.168.201.1生成秘钥
su - bigdata#一路回车
ssh-keygen -t rsa#在.ssh目录下新建authorized_keys文件
touch ~/.ssh/authorized_keys#修改权限.ssh必须是700authorized_keys必须是600。否则可能会提醒你输入密码免密不成功。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys 4、做nn1和nn2互密
将彼此的 ~/.ssh/id_rsa.pub公钥文件内容 -- 追加到~/.ssh/authorized_keys文件中5、执行主备切换
本次不用等fsimage元数据合并了只要该节点jn有edits新数据就可以了。
但这是最后一次主备切换standby节点会在一个小时之后生成一个新的fsimage文件并同步到active节点。
# nn2 to nn1根据实际情况
sudo ssh 10.168.201.1 su - bigdata -c hdfs haadmin -failover nn2 nn16、验证主备切换是否成功
curl -s http://10.168.201.1:50070/jmx?qryHadoop:serviceNameNode,nameFSNamesystem |jq -r .beans[0].tag.HAStatecurl -s http://10.168.201.2:50070/jmx?qryHadoop:serviceNameNode,nameFSNamesystem |jq -r .beans[0].tag.HAState7、主节点启动datanode服务
sudo pssh -h move_zk_list su - bigdata -c hadoop-daemon.sh start datanode8、主节点启动regionserver服务
sudo pssh -h move_zk_list su - hbase -c hbase-daemon.sh start regionserver9、主节点启动nodemanager服务
sudo pssh -h move_zk_list su - yarn -c yarn-daemon.sh start nodemanager10、观察fsimage元数据是否生成
因为到目前为止主节点服务迁移已经完成了。这里有最后一次主备切换standby nn节点会在一个小时之后生成一个新的fsimage文件并同步到active nn节点上。所以一定要观察standby nn和active nn是否有新的fsimage文件。
十、缩容需要下线的数据节点
老数据节点HRegionServernodemanagerdn要decommission
#olddata 添加需要下线的IP列表
cat olddata EOF
10.168.168.6
10.168.168.7
10.168.168.8
10.168.168.9
10.168.168.10
EOF#优雅的停hregionserver
xcgraceful_stopRegionserver olddata
xcjpsuser olddata hbase#停nodemanager
dxshell olddata su - yarn -c yarn-daemon.sh stop nodemanager
xcjpsuser olddata yarn#decommission做dn节点
#登录主节点
sudo ssh 10.168.201.1
#备份配置文件
su - bigdata
cd software/hadoop/etc/hadoop/
cp exclude exclude_$(date %Y%m%d)
#添加下线节点
vi exclude
#刷新生效
hdfs dfsadmin -refreshNodes#登录主节点
sudo ssh 10.168.201.2
#备份配置文件
su - bigdata
cd software/hadoop/etc/hadoop/
cp exclude exclude_$(date %Y%m%d)
#添加下线节点
vi exclude
#刷新生效
hdfs dfsadmin -refreshNodes附脚本
这一类脚本就是平时总结通用的内容存放在堡垒机环境变量路径下方便随时可以调用。
1、dxshell脚本
#!/bin/bash
# Author : LJ
# Date : 2021/10/11
# Func : 通用批处理查询。if [ $# -lt 2 ]
thenecho -e \033[1;31m 参数不足请重新执行... \033[0mecho -e \033[1;32m 此脚本传参使用方法$0 第一个参数为待查询的ip列表文件名 第二个参数为等待执行的shell命令,命令中如果有“$”,注意转译。 \033[0mexit ;
fi
workdirpwdlist$1
list_ipcd ${workdir};cat $list|awk {print $1}
#此脚本适用于通用查询用户就在root下就可以。
userxcommand$2sumcat $list|sed /^$/d|wc -l
num1for ip in ${list_ip[]} ; doecho -e \033[1;31m$num\033[1;32m/$sum $ip 节点 \033[1;33m执行命令${xcommand} \033[1;32m返回结果如下: \033[0msudo ssh $ip -C ${xcommand} let num
done
2、xcjpsuser脚本
#!/bin/bash
if [ $# -lt 2 ]
thenecho -e \033[1;31m 参数不足请重新执行... \033[0mecho -e \033[1;32m 此脚本传参使用方法$0 第一个参数为待查询的ip列表文件名 第二个参数为有jdk的用户,用于执行jps命令 \033[0mexit ;
fi
workdirpwdlist$1
list_ipcd ${workdir};cat $list|awk {print $1}
user$2sumcat $list|sed /^$/d|wc -l
num1for ip in ${list_ip[]} ; doecho -e \033[1;31m$num\033[1;32m/$sum $ip 节点 $user 用户下 现有java进程 \033[0msudo ssh $ip -C su - $user -c jps|grep -v Jps let num
done
3、xcgraceful_stopRegionserver脚本
#!/bin/bash
# Author : LJ
# Date : 2023/3/15
# Func : 批量优雅的停一批节点HRegionServer服务if [ $# -lt 1 ]
thenecho -e \033[1;31m 参数不足请重新执行... \033[0mecho -e \033[1;32m 此脚本传参使用方法$0 第一个参数为待查询的ip列表文件名 \033[0mexit ;
fi
#workdirpwd
list_ip$1
#sum记录节点个数
sumcat ${list_ip}|wc -l
#使用stop_count数组用于记录stop次数次数用于初始化赋值
for (( i0; i$sum; ii1 )) ; dostop_count[i]0
done
#对ip进行遍历执行stopstop不成功的节点会使用数组i--进行再次重试。如果重试大于5次直接使用kill -9 stop。
for (( i0; i$sum; ii1 )) ; dolet num${i}1let stop_count[i]arr[i]sed -n ${num}p ${list_ip}ip${arr[i]}#操作第一实例 HRegionServerrg1_wcsudo ssh $ip -C ps -ef|grep -w /home/hbase/logs|grep -w org.apache.hadoop.hbase.regionserver.HRegionServer|grep -v grep|wc -lif [ ${rg1_wc} -eq 1 ] ; thenecho -e \033[1;31m$num\033[1;32m/$sum 开始 第 ${stop_count[i]} 次优雅的停 ${ip} 节点的 HRegionServer1 服务 执行时间: $(date %Y-%m-%d\ %H:%M:%S) \033[0msudo ssh $ip -C su - hbase -c graceful_stop.sh --maxthreads 32 -e hostname /dev/null 21sleep 30fi#操作第二实例 HRegionServerrg2_wcsudo ssh $ip -C ps -ef|grep -w /home/hbase/logs2|grep -w org.apache.hadoop.hbase.regionserver.HRegionServer|grep -v grep|wc -lif [ ${rg2_wc} -eq 1 ] ; thenecho -e \033[1;31m$num\033[1;32m/$sum 开始 第 ${stop_count[i]} 次优雅的停 ${ip} 节点的 HRegionServer2 服务 执行时间: $(date %Y-%m-%d\ %H:%M:%S) \033[0msudo ssh $ip -C su - hbase -c graceful_stop.sh --config /home/hbase/software/hbase/conf2 --maxthreads 32 -e hostname /dev/null 21sleep 30fi#stop操作结果检查只要还存在 HRegionServer 进程就返回继续执行本节点stop操作check_rg_wcsudo ssh $ip -C su - hbase -c jps|grep -i HRegionServer|wc -l#判断是否还要 HRegionServer 进程if [ ${check_rg_wc} -ne 0 ] ; thenif [ ${stop_count[i]} -gt 5 ] ; thenecho -e \033[1;31m$num\033[1;32m/$sum \033[1;33m 优雅的停第 ${stop_count[i]} 没成功重试次数大于5次跳过本节点操作 执行时间: $(date %Y-%m-%d\ %H:%M:%S) \033[0mecho ${ip}elselet i--fielseecho -e \033[1;31m$num\033[1;32m/$sum \033[1;33m ${ip} 节点(已经)无 HRegionServer 服务 执行时间: $(date %Y-%m-%d\ %H:%M:%S) \033[0mfi
done