HBASE集群主节点迁移割接手动操作步骤

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					node5

2、生成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.com

3、准备集群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
EOF

4、准备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
EOF

5、准备除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
EOF

6、准备旧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
EOF

7、准备新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
EOF

8、目标节点组件安装

五个目标zk节点zookeeper、hdfs、hbase、yarn组件已经提前安装完毕,未启动任何服务。

9、删除cmdb数据,关闭告警和自启脚本

dxshell move_list "userdel -r bdalarm"dxshell move_list "cd /var/spool/cron;rm -f bdalarm*"

10、关闭主节点dn、nm和rs服务

注意:排除主节点非核心服务,方便迁移

dxshell move_zk_list "su - bigdata -c 'hadoop-daemon.sh stop datanode'"dxshell 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 journalnode'"sudo ssh 10.168.168.5 "su - bigdata -c 'jps'"

2、老机器停ZK

sudo ssh 10.168.168.5 "su - zookeeper -c 'zkServer.sh stop'"sudo ssh 10.168.168.5 "su - zookeeper -c 'jps'"

3、老机器改主机名

sudo ssh 10.168.168.5 "hostnamectl set-hostname cola_node5"

4、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/hosts

6、依次重启所有zk服务

注意列表IP,不要并发重启

dxshell move_zk_list "su - zookeeper -c 'zkServer.sh stop ; zkServer.sh start'"

7、查看zk服务状态

dxshell move_zk_list "su - zookeeper -c 'zkServer.sh status'"

8、验证zk_followers节点数量

先找到leader节点

echo 'mntr' | nc ${leader} 2015 |grep followers

zk_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/hadoop"

10、node5目标节点启动JN服务

sudo ssh 10.168.201.5 "su - bigdata -c 'hadoop-daemon.sh start journalnode'"

验证jn同步情况,及日志输出是否正常。namenode的50070页面上查看NameNode Journal Status,Written txid 一致则同步完成。

三、node4迁移

1、老机器停JN

sudo ssh 10.168.168.4 "su - bigdata -c 'hadoop-daemon.sh stop journalnode'"sudo ssh 10.168.168.4 "su - bigdata -c 'jps'"

2、老机器停ZK

sudo ssh 10.168.168.4 "su - zookeeper -c 'zkServer.sh stop'"sudo ssh 10.168.168.4 "su - zookeeper -c 'jps'"

3、老机器改主机名

sudo ssh 10.168.168.4 "hostnamectl set-hostname cola_node4"

4、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/hosts

6、依次重启所有zk服务

注意列表IP,不要并发重启

dxshell move_zk_list "su - zookeeper -c 'zkServer.sh stop ; zkServer.sh start'"

7、查看zk服务状态

dxshell move_zk_list "su - zookeeper -c 'zkServer.sh status'"

8、验证zk_followers节点数量

先找到leader节点

echo 'mntr' | nc ${leader} 2015 |grep followers

zk_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/hadoop"

10、node4目标节点启动JN服务

sudo ssh 10.168.201.4 "su - bigdata -c 'hadoop-daemon.sh start journalnode'"

验证jn同步情况,及日志输出是否正常。namenode的50070页面上查看NameNode Journal Status,Written 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'"
active

2、重启standby nn服务

sudo ssh 10.168.168.1 "su - bigdata -c 'hadoop-daemon.sh stop namenode'"sudo ssh 10.168.168.1 "su - bigdata -c 'hadoop-daemon.sh start namenode'"

3、执行主备切换

注意:等待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 journalnode'"sudo ssh 10.168.168.3 "su - bigdata -c 'jps'"

2、老机器停ZK

sudo ssh 10.168.168.3 "su - zookeeper -c 'zkServer.sh stop'"sudo ssh 10.168.168.3 "su - zookeeper -c 'jps'"

3、老机器改主机名

sudo ssh 10.168.168.3 "hostnamectl set-hostname cola_node3"

4、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/hosts

6、依次重启所有zk服务

注意列表IP,不要并发重启

dxshell move_zk_list "su - zookeeper -c 'zkServer.sh stop ; zkServer.sh start'"

7、查看zk服务状态

dxshell move_zk_list "su - zookeeper -c 'zkServer.sh status'"

8、验证zk_followers节点数量

先找到leader节点

echo 'mntr' | nc ${leader} 2015 |grep followers

zk_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/hadoop"

10、node3目标节点启动JN服务

sudo ssh 10.168.201.3 "su - bigdata -c 'hadoop-daemon.sh start journalnode'"

验证jn同步情况,及日志输出是否正常。namenode的50070页面上查看NameNode Journal Status,Written txid 一致则同步完成。

注意:如果长时间同步一不一致,可以尝试把正确jn数据重新复制一份到新节点。

六、node2迁移

先确认namenode的active和standby分布在那个节点上。如果node1是active,node2是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.com

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'"
active

2、先停standby nn节点的zkfc

sudo ssh 10.168.168.2 "su - bigdata -c 'hadoop-daemon.sh stop zkfc'"

3、再停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 stop'"

5、老机器改主机名

sudo ssh 10.168.168.2 "hostnamectl set-hostname cola_node2"

6、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/hosts

8、备份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/bigdata"rsync -e 'sudo ssh' -r baknode2/namenode 10.168.201.2:/metadata/sudo ssh 10.168.201.2 "chown -R bigdata:bigdata /metadata/namenode"rsync -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 /log"sudo ssh 10.168.201.2 "su - bigdata -c 'cd hadoop;ln -nsf /log/bigdata logs; ln -nsf /metadata/namenode namenode'"

10、新机器启动 journalnode 和 namenode

sudo ssh 10.168.201.2 "su - bigdata -c 'hadoop-daemon.sh start journalnode'"sudo ssh 10.168.201.2 "su - bigdata -c 'hadoop-daemon.sh start namenode'"

a、验证jn同步情况,及日志输出是否正常。namenode的50070页面上查看NameNode Journal Status,Written 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 start'"

12、查看zk服务状态

dxshell move_zk_list "su - zookeeper -c 'zkServer.sh status'"

13、验证zk_followers节点数量

先找到leader节点

echo 'mntr' | nc ${leader} 2015 |grep followers

zk_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 resourcemanager'"sudo ssh 10.168.201.2 "su - yarn -c 'mr-jobhistory-daemon.sh start historyserver'"

16、重启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 master'"

17、重启node1节点ResourceManager服务

sudo ssh 10.168.168.1 "su - yarn -c 'yarn-daemon.sh stop resourcemanager && sleep 10s && yarn-daemon.sh start resourcemanager'"

18、第一次滚动重启客户端服务

重启regionserver,datanode、nodemanager服务。所有数据节点在 data_list文件中。

dxshell data_list "su - hbase -c 'hbase-daemon.sh restart regionserver'"xcjpsuser data_list hbasedxshell data_list "su - bigdata -c 'hadoop-daemon.sh stop datanode && hadoop-daemon.sh start datanode'"xcjpsuser data_list bigdatadxshell data_list "su - yarn -c 'yarn-daemon.sh stop nodemanager && yarn-daemon.sh start nodemanager'"xcjpsuser 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'"
standby

2、启动zkfc

sudo ssh 10.168.168.1 "su - bigdata -c 'hadoop-daemon.sh start zkfc'"sudo ssh 10.168.201.2 "su - bigdata -c 'hadoop-daemon.sh start zkfc'"

3、新节点10.168.201.2生成秘钥

su - bigdata#一路回车
ssh-keygen -t rsa#在.ssh目录下,新建authorized_keys文件
touch  ~/.ssh/authorized_keys#修改权限,.ssh必须是700,authorized_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 nn2'"

6、验证主备切换是否成功

curl -s 'http://10.168.168.1:50070/jmx?qry=Hadoop:service=NameNode,name=FSNamesystem' |jq -r .beans[0].'"tag.HAState"'curl -s 'http://10.168.201.2:50070/jmx?qry=Hadoop:service=NameNode,name=FSNamesystem' |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.com

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'"
standby

2、先停standby nn节点的zkfc

sudo ssh 10.168.168.1 "su - bigdata -c 'hadoop-daemon.sh stop zkfc'"

3、再停active nn节点的zkfc

sudo ssh 10.168.201.2 "su - bigdata -c 'hadoop-daemon.sh stop zkfc'"

4、停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 stop'"

5、老机器改主机名

sudo ssh 10.168.168.1 "hostnamectl set-hostname cola_node1"

6、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/hosts

8、备份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/bigdata"rsync -e 'sudo ssh' -r baknode1/namenode 10.168.201.1:/metadata/sudo ssh 10.168.201.1 "chown -R bigdata:bigdata /metadata/namenode"rsync -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 /log"sudo ssh 10.168.201.1 "su - bigdata -c 'cd hadoop;ln -nsf /log/bigdata logs; ln -nsf /metadata/namenode namenode'"

10、新机器启动 journalnode 和 namenode

sudo ssh 10.168.201.1 "su - bigdata -c 'hadoop-daemon.sh start journalnode'"sudo ssh 10.168.201.1 "su - bigdata -c 'hadoop-daemon.sh start namenode'"

a、验证jn同步情况,及日志输出是否正常。namenode的50070页面上查看NameNode Journal Status,Written 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 start'"

12、查看zk服务状态

dxshell move_zk_list "su - zookeeper -c 'zkServer.sh status'"

13、验证zk_followers节点数量

先找到leader节点

echo 'mntr' | nc ${leader} 2015 |grep followers

zk_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 resourcemanager'"

16、重启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 master'"

17、重启node2节点ResourceManager服务

sudo ssh 10.168.201.2 "su - yarn -c 'yarn-daemon.sh stop resourcemanager ; yarn-daemon.sh start resourcemanager'"

18、第二次滚动重启客户端服务

重启regionserver,datanode、nodemanager服务。所有数据节点在 data_list文件中。

dxshell data_list "su - hbase -c 'hbase-daemon.sh restart regionserver'"xcjpsuser data_list hbasedxshell data_list "su - bigdata -c 'hadoop-daemon.sh stop datanode && hadoop-daemon.sh start datanode'"xcjpsuser data_list bigdatadxshell data_list "su - yarn -c 'yarn-daemon.sh stop nodemanager && yarn-daemon.sh start nodemanager'"xcjpsuser 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'"
active

2、启动zkfc

sudo ssh 10.168.201.1 "su - bigdata -c 'hadoop-daemon.sh start zkfc'"sudo ssh 10.168.201.2 "su - bigdata -c 'hadoop-daemon.sh start zkfc'"

3、新节点10.168.201.1生成秘钥

su - bigdata#一路回车
ssh-keygen -t rsa#在.ssh目录下,新建authorized_keys文件
touch  ~/.ssh/authorized_keys#修改权限,.ssh必须是700,authorized_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 nn1'"

6、验证主备切换是否成功

curl -s 'http://10.168.201.1:50070/jmx?qry=Hadoop:service=NameNode,name=FSNamesystem' |jq -r .beans[0].'"tag.HAState"'curl -s 'http://10.168.201.2:50070/jmx?qry=Hadoop:service=NameNode,name=FSNamesystem' |jq -r .beans[0].'"tag.HAState"'

7、主节点启动datanode服务

sudo pssh -h move_zk_list "su - bigdata -c 'hadoop-daemon.sh start datanode'"

8、主节点启动regionserver服务

sudo pssh -h move_zk_list "su - hbase -c 'hbase-daemon.sh start regionserver'"

9、主节点启动nodemanager服务

sudo pssh -h move_zk_list "su - yarn -c 'yarn-daemon.sh start nodemanager'"

10、观察fsimage元数据是否生成

因为到目前为止,主节点服务迁移已经完成了。这里有最后一次主备切换,standby nn节点会在一个小时之后生成一个新的fsimage文件,并同步到active nn节点上。所以一定要观察standby nn和active nn是否有新的fsimage文件。

十、缩容需要下线的数据节点

老数据节点HRegionServer,nodemanager,dn要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[0m"echo -e "\033[1;32m 此脚本传参使用方法:$0 第一个参数为待查询的ip列表文件名 第二个参数为等待执行的shell命令,命令中如果有“$”,注意转译。 \033[0m"exit ;
fi
workdir=`pwd`list=$1
list_ip=`cd ${workdir};cat $list|awk '{print $1}'`
#此脚本适用于通用查询,用户就在root下就可以。
user=xcommand=$2sum=`cat $list|sed '/^$/d'|wc -l`
num=1for ip in ${list_ip[@]} ; doecho -e "\033[1;31m$num\033[1;32m/$sum	=============== $ip 节点 \033[1;33m执行命令:${xcommand} \033[1;32m返回结果如下: =============== \033[0m"sudo ssh $ip -C "${xcommand}" let num++
done

2、xcjpsuser脚本

#!/bin/bash
if [ $# -lt 2 ]
thenecho -e "\033[1;31m 参数不足,请重新执行... \033[0m"echo -e "\033[1;32m 此脚本传参使用方法:$0 第一个参数为待查询的ip列表文件名 第二个参数为有jdk的用户,用于执行jps命令 \033[0m"exit ;
fi
workdir=`pwd`list=$1
list_ip=`cd ${workdir};cat $list|awk '{print $1}'`
user=$2sum=`cat $list|sed '/^$/d'|wc -l`
num=1for ip in ${list_ip[@]} ; doecho -e "\033[1;31m$num\033[1;32m/$sum	 =============== $ip 节点 $user 用户下 现有java进程 =============== \033[0m"sudo 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[0m"echo -e "\033[1;32m 此脚本传参使用方法:$0 第一个参数为待查询的ip列表文件名 \033[0m"exit ;
fi
#workdir=`pwd`
list_ip="$1"
#sum记录节点个数
sum=`cat "${list_ip}"|wc -l`
#使用stop_count数组,用于记录stop次数,次数用于初始化赋值
for (( i=0; i<"$sum"; i=i+1 )) ; dostop_count[i]=0
done
#对ip进行遍历执行stop,stop不成功的节点会使用数组i--进行再次重试。如果重试大于5次,直接使用kill -9 stop。
for (( i=0; i<"$sum"; i=i+1 )) ; dolet num=${i}+1let stop_count[i]++arr[i]=`sed -n "${num}p" ${list_ip}`ip="${arr[i]}"#操作第一实例 HRegionServerrg1_wc=`sudo ssh $ip -C "ps -ef|grep -w '/home/hbase/logs'|grep -w 'org.apache.hadoop.hbase.regionserver.HRegionServer'|grep -v grep|wc -l"`if [ "${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[0m"sudo ssh $ip -C 'su - hbase -c "graceful_stop.sh --maxthreads 32 -e `hostname` "' >/dev/null 2>&1sleep 30fi#操作第二实例 HRegionServerrg2_wc=`sudo ssh $ip -C "ps -ef|grep -w '/home/hbase/logs2'|grep -w 'org.apache.hadoop.hbase.regionserver.HRegionServer'|grep -v grep|wc -l"`if [ "${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[0m"sudo ssh $ip -C 'su - hbase -c "graceful_stop.sh --config /home/hbase/software/hbase/conf2 --maxthreads 32 -e `hostname` "' >/dev/null 2>&1sleep 30fi#stop操作结果检查,只要还存在 HRegionServer 进程,就返回继续执行本节点stop操作check_rg_wc=`sudo 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[0m"echo "${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[0m"fi
done

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145787.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

排序篇(二)----选择排序

排序篇(二)----选择排序 1.直接选择排序 基本思想&#xff1a; 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 直接选择排序: ​ 在元素集合array[i]–array[…

Spring修炼之路(1)基础入门

一、简介 1.1Spring概述 Spring框架是一个轻量级的Java开发框架&#xff0c;它提供了一系列底层容器和基础设施&#xff0c;并可以和大量常用的开源框架无缝集成&#xff0c;可以说是开发Java EE应用程序的必备。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器&…

虾皮商品详情数据接口

虾皮商品详情数据接口可以提供众多API读取内容&#xff0c;可传输大量数据&#xff0c;数据更新速度尤其快&#xff0c;保证了跨境电商接口服务数据的及时性及准确性&#xff1b;安全性强&#xff1a;使用SSL及虾皮网自主的安全技术&#xff0c;确保了跨境电商接口服务数据的安…

【2023保研】双非上岸东南网安

个人情况 学校&#xff1a;henu 专业&#xff1a;信息安全 排名&#xff1a;1/66 英语&#xff1a;六级500 竞赛&#xff1a;蓝桥杯PB国一&#xff0c;ISCC国一&#xff0c;密码数学挑战赛国三&#xff0c;还有其他一些省级水奖 论文&#xff1a;一篇EI在投&#xff08;三作通…

[Qt]QListView 重绘实例之二:列表项覆盖的问题处理

0 环境 Windows 11Qt 5.15.2 MinGW x64 1 系列文章 简介&#xff1a;本系列文章&#xff0c;是以纯代码方式实现 Qt 控件的重构&#xff0c;尽量不使用 Qss 方式。 《[Qt]QListView 重绘实例之一&#xff1a;背景重绘》 《[Qt]QListView 重绘实例之二&#xff1a;列表项覆…

elementui引入弹出框报错:this.$alert is not defined 解决方案

1.按需引入文件element.js 注意&#xff1a;引入Message&#xff0c;MessageBox两个组件就行&#xff0c;alert包括在MessageBox里面了。 之前我引入了Alert组件&#xff0c;发现不行 2.在vue的prototype里注册伪名字 3.组件里直接调用就行了 4.实现效果 我发现elementui调用…

【C++进阶】:C++11

C11 一.统一列表的初始化1.{}初始化2.initializer_list 二.声明1.decltype2.nullptr 三.右值引用和移动语义1.左值和右值1.转义语句2.完美转发 四.可变参数模板1.基本概念2.STL里emplace类接口 五.lambda表达式六.新的类功能 一.统一列表的初始化 1.{}初始化 在C98中&#xf…

图像处理: 马赛克艺术

马赛克 第一章 马赛克的历史渊源 1.1 马赛克 艺术中的一种表面装饰&#xff0c;由紧密排列的、通常颜色各异的小块材料&#xff08;如石头、矿物、玻璃、瓷砖或贝壳&#xff09;组成。与镶嵌不同的是&#xff0c;镶嵌是将要应用的部件放置在已挖空以容纳设计的表面中&#xff0…

【教学类-35-03】学号+姓名+班级(小3班)学号字帖(A4竖版2份)

图片展示: 背景需求: 本周排到小3班&#xff0c;还没有来得及设计小班主题活动书的内容&#xff0c;于是就把小2班的学号字帖微调一下&#xff0c;做一份竖版2份的学号字帖。 让幼儿熟悉自己的学号&#xff0c;让我也熟悉幼儿的名字和学号 材料准备&#xff1a; 描字写&#…

关于RabbitMQ你了解多少?

关于RabbitMQ你了解多少&#xff1f; 文章目录 关于RabbitMQ你了解多少&#xff1f;基础篇同步和异步MQ技术选型介绍和安装数据隔离SpringAMQP快速入门Work queues交换机Fanout交换机Direct交换机Topic交换机 声明队列和交换机MQ消息转换器 高级篇消息可靠性问题发送者的可靠性…

妙不可言的Python之旅----(一)

初识Python python的起源 1989年&#xff0c;为了打发圣诞节假期&#xff0c;Gudio van Rossum吉多 范罗苏姆&#xff08;龟叔&#xff09;决心开发一个新的解释程序&#xff08;Python雏形&#xff09; 1991年&#xff0c;第一个Python解释器诞生 Python这个名字&#xff…

Golang中的包和模块设计

Go&#xff0c;也被称为Golang&#xff0c;是一种静态类型、编译型语言&#xff0c;因其简洁性和对并发编程的强大支持而受到开发者们的喜爱。Go编程的一个关键方面是其包和模块系统&#xff0c;它允许创建可重用、可维护和高效的代码。本博客文章将深入探讨在Go中设计包和模块…

Servlet操作与用法(保姆式教学)

Servlet介绍 什么是servlet Servlet&#xff08;Servlet Applet的缩写&#xff0c;全称 Java Servlet&#xff09;&#xff1a;适用于Java编写的服务器程序&#xff0c;其主要功能是在于交互式的浏览和修改数据&#xff0c;生成动态Web内容。狭义的Servlet是指Java语言实现的…

MySQL学习笔记27

MySQL主从复制的核心思路&#xff1a; 1、slave必须安装相同版本的mysql数据库软件。 2、master端必须开启二进制日志&#xff0c;slave端必须开启relay log 日志。 3、master主服务器和slave从服务器的server-id号不能一致。 4、slave端配置向master端来同步数据。 master…

云安全之访问控制的常见攻击及防御

访问控制攻击概述 访问控制漏洞即应用程序允许攻击者执行或者访问某种攻击者不具备相应权限的功能或资源。 常见的访问控制可以分为垂直访问控制、水平访问控制及多阶段访问控制 (上下文相关访问控制)&#xff0c;与其相应的访问控制漏洞为也垂直越权漏洞(普通用户可以访问或…

【QT】使用toBase64方法将.txt文件的明文变为非明文(类似加密)

目录 0.环境 1.背景 2.详细代码 2.1 .h主要代码 2.2 .cpp主要代码&#xff0c;主要实现上述的四个方法 0.环境 windows 11 64位 Qt Creator 4.13.1 1.背景 项目需求&#xff1a;我们项目中有配置文件&#xff08;类似.txt&#xff0c;但不是这个格式&#xff0c;本文以…

计算机网络之传输层

计算机网络 - 传输层 计算机网络 - 传输层 UDP 和 TCP 的特点UDP 首部格式TCP 首部格式TCP 的三次握手TCP 的四次挥手TCP 可靠传输TCP 滑动窗口TCP 流量控制TCP 拥塞控制 1. 慢开始与拥塞避免2. 快重传与快恢复 网络层只把分组发送到目的主机&#xff0c;但是真正通信的并不是…

leetcode-----二叉树习题

目录 前言 1. 二叉树的中序遍历 2. 相同的树 3. 二叉树的最大深度 4. 二叉树的最小深度 5.二叉树的前序遍历 6. 二叉树的后序遍历 7. 对称二叉树 前言 前面我们学习过了二叉树的相关知识点&#xff0c;那么今天我们就做做练习&#xff0c;下面我会介绍几道关于二叉树的…

JUnit介绍

JUnit是用于编写和运行可重复的自动化测试的开源测试框架&#xff0c; 这样可以保证我们的代码按预期工作。JUnit可广泛用于工业和作为支架(从命令行)或IDE(如Eclipse)内单独的Java程序。 JUnit提供&#xff1a; 断言测试预期结果。 测试功能共享通用的测试数据。 测试套件轻…

Java实现word excel ppt模板渲染与导出及预览 LibreOffice jodconverter

Java Office 一、文档格式转换 文档格式转换是office操作中经常需要进行一个操作&#xff0c;例如将docx文档转换成pdf格式。 java在这方面有许多的操作方式&#xff0c;大致可以分为内部调用&#xff08;无需要安装额外软件&#xff09;&#xff0c;外部调用&#xff08;需…