集群可以提高系统性能、提高可用性和增强灵活性,能很好完成复杂的任务。本篇重点介绍CentOS集群系统及部署,以及SSH安全登录及配置。
01、集群规划
为了简化操作,使用三台服务器作为集群节点,其中一台为Master节点,两台为Slave节点。集群节点IP规划如下:
master:172.30.0.10 slave1:172.30.0.11 slave2:172.30.0.12 netmask: 255.255.255.0 gateway:172.30.0.254
02、网络配置
对集群节点进行网络配置,以master节点为例。
(1)设置主机名,操作如下:
# hostnamectl set-hostname master 或者 # vi /etc/hostname master
(2)修改/etc/hosts文件,操作如下:
# vi /etc/hosts 添加内容: 172.30.0.10 master 172.30.0.11 slave1 172.30.0.12 slave2
(3)修改网络配置,操作如下:
# vi /etc/sysconfig/network-scripts/ifcfg-ens33 添加修改内容: TYPE=Ethernet BOOTPROTO=none NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=172.30.0.10 PREFIX=24 GATEWAY=172.30.0.254 DNS1=202.96.128.86 DNS2=202.96.134.133
(4)重启网络,并查看网络IP地址,操作如下:
# systemctl restart network # ifconfig -a 或者 # ip addr
(5)关闭并停止NetworkManager服务,操作如下:
# systemctl disable NetworkManager # systemctl stop NetworkManager
NetworkManager 是用于便携式计算机和其他可移动计算机的理想解决方案。可自动连接到已知无线网络或并行管理多个网络连接,然后将最快的连接用作默认连接,还可以手动在可用网络之间切换,并使用系统盘中的小程序管理网络连接。NetworkManager在Hadoop环境下不适用,需要关闭。
03、安全配置
作为一个开放源代码的操作系统,Linux服务器以其安全、高效和稳定的显著优势而得以广泛应用,最重要的安全模块有SELinux和iptables或firewalld。
SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux 历史上最杰出的新安全子系统,SELinux共有3个状态enforcing (执行中)、permissive (不执行但产生警告)、disabled(关闭)。
Iptables是与 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信 息包过滤表中,而这些表集成在 Linux 内核中。
Centos7中默认将原来的防火墙iptables升级为了firewalld。防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
为了便于学习,我们会关闭这些安全配置,设置一些安全选项。
(1)安全密码控制,操作如下:
# vi /etc/login.defs //适应于新建的用户 修改内容: PASS_MAX_DAYS 30 //密码最多使用30天,必须更改密码 PASS_MIN_DAYS 0 //密码最少使用0天,才能更改密码 PASS_MIN_LEN 5 //可接受的密码长度 PASS_WARN_AGE 7 //密码到期前的警告时间 # chage -M 30 用户名 //适用于以存在的用户,密码30天过期 # chage -d 0 用户名 //下次登录时,必须更改密码
为了降低密码被猜出或暴力破解的风险,应避免长期使用同一个密码。管理员可以在服务器端限制用户密码使用最大有效期天数,对密码已过期的用户,登录时要求重新设置密码,否则拒绝登录。
(2)设置历史记录、退出自动清空历史记录等,操作如下:
# vi /etc/profile 添加内容: export HISTSIZE=5 //历史记录限制为5条 # vi ~/.bash_logout 添加内容: history -c //清空历史记录
(3)设置闲置超时时间,操作如下:
# vi /etc/profile 添加内容 export TMOUT=600 //用户将在10分钟无操作后自动注销
(4)设置SElinux,操作如下:
# vi /etc/selinux/config 修改内容: SELINUX=permissive # setenforce permissive # getenforce
(5)设置并停止firewalld服务,操作如下:
# systemctl disable firewalld # systemctl stop firewalld
04、时间同步
网络时间协议(NTP,Network Time Protocol)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正,且可由加密确认的方式来防止恶毒的协议攻击。NTP的目的是在无序的Internet环境中提供精确和健壮的时间服务。
NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。时间按NTP服务器的等级传播。按照离外部UTC 源的远近将所有服务器归入不同的Stratum(层)中。Stratum-1在顶层,有外部UTC接入,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。计算机主机一般同多个时间服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源来校正主机时间。即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效运转。为防止对时间服务器的恶意破坏,NTP使用了识别(Authentication)机制,检查来对时的信息是否是真正来自所宣称的服务器并检查资料的返回路径,以提供对抗干扰的保护机制。NTP时间同步报文中包含的时间是格林威治时间,是从1900年开始计算的秒数。
Chrony是一个开源的自由软件,它能帮助你保持系统时钟与时钟服务器同步,因此让你的时间保持精确。它由两个程序组成,分别是chronyd和chronyc。chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步,它确定计算机增减时间的比率,并对此进行补偿。chronyc提供了一个用户界面,用于监控性能并进行多样化的配置,它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。
服务器之间的时间需要同步,但并不是所有机器可以直接连外网,这时可以用Chrony工具解决。解决方法是将其中一台设为时间服务器,然后其它服务器和这台时间服务器同步即可。
(1)Master节点时间同步安装设置,操作如下:
[root@master ~]# yum install chrony [root@master ~]# vi /etc/chrony.conf 添加修改内容: local stratum 10 allow 172.30.0.0/24
(2)Slave节点时间同步安装设置,操作如下:
[root@slave ~]# yum install chrony [root@slave ~]# vi /etc/chrony.conf 添加修改内容: # server 0.centos.pool.ntp.org iburst # server 1.centos.pool.ntp.org iburst # server 2.centos.pool.ntp.org iburst # server 3.centos.pool.ntp.org iburst server master iburst
(3)设置自动加载并重启chrony服务,操作如下:
# systemctl enable chronyd.service # systemctl restart chronyd.service
(4)查看master节点时间同步信息,操作如下:
[root@master ~]# chronyc sources 210 Number of sources = 4 MS Name/IP address Stratum Poll Reach LastRx Last sample =========================================================================== ^* 85.199.214.100 1 6 377 3 +4577us[ +10ms] +/- 154ms ^+ static-5-103-139-163.ip.> 1 6 377 10 +43ms[ +49ms] +/- 186ms ^+ ntp.wdc1.us.leaseweb.net 2 6 33 13 -14ms[-8522us] +/- 352ms ^- gus.buptnet.edu.cn 5 6 167 72 -3955us[+1588us] +/- 371ms
(5)查看slaver节点时间同步信息,操作如下:
[root@slave ~]# chronyc sources 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =========================================================================== ^* master 2 6 377 42 -6960us[ -30ms] +/- 127ms
05、SSH登录
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定。SSH为建立在应用层基础上的安全协议,SSH也是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台,几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
从客户端来看,SSH提供两种级别的安全验证。
第一种级别:基于口令的安全验证
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
第二种级别:基于密匙的安全验证
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。这种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是几乎不可能。
SSH 主要由三部分组成:
传输层协议(SSH-TRANS):提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。
用户认证协议(SSH-USERAUTH):用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
连接协议(SSH-CONNECT):将多个加密隧道分成逻辑通道,它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。
SSH是由客户端和服务端的软件组成的,服务端是一个守护进程(daemon),它在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。
客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
Hadoop系统需要使用基于密匙的安全验证的SSH登录,master节点需要自动登录slave节点,按下面步骤进行安装配置。
(1)安装openssh,开启sshd服务,操作如下:
# yum install openssh # systemctl enable sshd.service # systemctl start sshd.service
(2)以root用户登录master节点,生成SSH密钥对,操作如下:
[root@master ~]# ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): 按回车 Created directory '/root/.ssh'. 按回车 Enter passphrase (empty for no passphrase): 按回车 Enter same passphrase again: 按回车 Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: 26:f3:cb:a9:8b:e9:7c:ed:a3:93:20:26:14:ef:99:26 root@master The key's randomart image is: +--[ DSA 1024]----+ | | | . | | o | | . . | |. . o o S | |.Eo=. = | | oo. . o. | | . o+.oo | | .=.+*=. | +-----------------+
ssh-keygen加密方式选为rsa和dsa,默认dsa,分别生成含有公用密钥和私用密钥的文件,存放在用户目录的~/.ssh下。
(3)把含有公用密钥信息的文件复制到节点机上,操作如下:
[root@master ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub master [root@master ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub slave1 [root@master ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub slave2
ssh-copy-id自动把id_dsa.pub中的公用密钥信息添加到slave节点对应用户的~/.ssh/目录下的 authorized_keys 文件中。
(4)使用SSH登录节点机,测试如下:
[root@master ~]# ssh master [root@master ~]# exit 登出 Connection to master closed. [root@master ~]# ssh slave1 [root@slave1 ~]# exit 登出 Connection to slave1 closed. [root@master ~]# ssh slave2 [root@slave2 ~]# exit 登出 Connection to slave2 closed.
06、小结
集群可以提高系统性能、提高可用性和增强灵活性,能很好完成复杂的任务。本章首先介绍了集群系统的概念、分类、目的,然后简述了集群相关的技术基础:Linux操作系统、计算机虚拟化技术以及常见的虚拟化软件,接着分析了数据集群技术的架构,最后重点介绍CentOS集群系统及部署,以及SSH安全登录及配置。