一. 简述
节点互信,是集群管理的基本操作之一。节点互信是通过SSH协议的公钥密钥认证来代替密码认证来实现的。对于单点批量管理多个节点,多个节点之间相互通信来说,配置SSH单方向信任,或者互信十分必要。
本篇博客基于《VMware workstation批量创建虚拟机和自动化安装操作系统》的基础上,创建了10台虚拟机node11-node20。实现控制台console01,单向信任,能够使用console01进行批量管理和操作;实现node11-node20之间相互信息,为后期集群服务的部署打下基础。
二. 涉及知识点
SSH协议配置及公钥密钥管理
轻量级并行工具pssh,pdsh,mussh安装使用
基本shell脚本编写和for循环使用
三. 实践过程
(1) console01环境部署
console01作为集群管理的控制台,是集中发布文件,集群管理的平台。
1.创建/etc/hosts信息,如下
for i in $(seq 11 20);do echo "192.168.80.$i node$i" >> /etc/hosts;done
2.安装第三方扩展源eple-release
# yum -y install epel-release
# yum makecache
3.安装并行处理工具pssh,pdhs,mussh
# yum -y install pssh pdsh mussh
4.安装sshpass工具
# yum -y install sshpass
(2) 配置console01到其他节点无密码登陆
配置console01到其他节点的信任,需要console01生成公钥和密钥,并把公钥的authorized_keys文件分发到其他节点上
1.console01生成公钥密钥
# cd /root/.ssh/ && ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa.pub
这里采用的无交互式,无密码加密的密钥生成方式。
-t指加密算法,-P指密钥密码,-f是指定生成的文件
2.console02发布公钥
for ip in $(seq 11 20)
do
sshpass -P liwanliang ssh-copy-id -i /root/.ssh/id_rsa.pub
done
注:这里-P 指定的是node11-node20的root密码,在无人值守安装中默认设置的。
上述命令执行成功后,console01便可以通过#ssh node11
的方式登陆其他节点,或者远程管理这些节点了。
(3) 发布文件并批量修改主机名
通过上面的操作,实现了console01到node11-node20的无密码验证登陆,据此便可以使用基于SSH协议的轻量级并行管理工具,如pssh,pdsd,mussh等
注:实际上,远程管理由登陆发展为非登陆,由单台发展为多台,由交互发展为非交互,由telnet发展为ssh等,由shell发展为python等,由简易的脚本变成复杂的集群管理系统,由简单的批处理命令,变成配置管理,批量部署等,其基本原理是不变的。
a.安装pssh,pdsh,mussh
# yum -y install pssh,pdsh,mussh
b.创建批处理的对象主机文件
注:可以是IP地址,也可以是主机名
# for i in $(seq 11 20);do echo "node${i}" >> nodes_host;done
测试:
# pssh -i -h nodes_host hostname
c.发布必要文件
集群管理中,/etc/hosts文件十分重要,基本上集群服务部署中,写主机名的比较多,一方面便于分清楚和记忆节点角色,一方面便于灵活管理。
因此通过console01发布一些重要的文件,或者配置文件,对集群管理十分必要。
如,发布主机名文件
# pscp.pssh -h nodes_host /etc/hosts /etc/hosts
可将已经编辑好的主机名文件发布至集群所有节点
如,发布ssh_config文件
注:现在/etc/ssh/ssh_config中配置ssh客户端配置,如默认接受公钥,公钥放置位置为/dev/null等,这是为了第一次登陆不显示冗余信息,需要配置如下
Host *
GSSAPIAuthentication no
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
d.批量修改主机名
通过《VMware Workstation批量创建虚拟机和自动化安装操作系统》教程,部署完成后的虚拟机,只具有固定IP,其主机名都是初始主机名,需要根据需要修改主机名。
这里根据IP来修改主机名,操作如下:
#!/bin/bash
HOSTNAME_FILE=/etc/sysconfig/network
for num in $(seq 11 20)
do
echo "修改node{num}..."
ssh node${num} "sed -i 's/HOSTNAME=localhost\.localdomain/HOSTNAME=node${num}/g' ${HOSTNAME_FILE}"
ssh node${num} "hostname node${num}"
echo "修改node{num}ok"
done
(4) 配置node11-node20节点互信##
上述过程基本上完成了控制台console01到node11-node20之间的管理配置需求。以后的工作,便可以通过轻量级pssh,pdsh,mussh来完成,或部署ansible,puppet来管理。
但是集群节点之间的互信也需要部署,才能够使得节点之间的管理能够更加快捷方便。
a.集群节点生成公钥密钥
for ip in $(seq 11 20)
do
ssh node${ip} ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
done
注:有时候安装系统之后,/root/目录下没有.ssh目录,需要通过pssh批量创建,并修改目录权限为700
b.收集集群节点全部公钥
for ip in $(seq 11 20)
do
ssh node${ip} "cat /root/.ssh/id_rsa.pub">> /root/.ssh/authorized_keys
done
c.分发公钥至集群节点
# pscp.pssh -i -h nodes_host /root/.ssh/authorized_keys /root/.ssh/authorized_keys
至此,node11-node20之间,便实现了节点之间的互信。当扩大集群范围时,同样采用这种方式可以很方便实现节点互信。因为上面已经分发了/etc/ssh/ssh_config文件,因为节点在互相访问的时候,不会出现提示信息。
四. 总结
节点互信,是集群管理的最基本操作。密钥登陆是安全登陆的第一道工序,也是集群管理的基本操作。这边博客的基本操作,希望能够学有所得。