目录
网卡配置
主机名配置
防火墙配置
SeLinux配置
SSH免密互连配置
透明大页配置
文件句柄数配置
磁盘挂载配置
主机时间配置
操作系统作为上层软件的基础,稳定性非常重要,建议在选择操作系统时选择主流且稳定的操作系统,推荐Red Hat Enterprise Linux或者CentOS7的稳定版本;以下操作在CentOS7.6上进行,操作系统不带桌面最小化安装,以root用户进行操作。
网卡配置
大数据集群的每台机器一般都需要设置静态IP,防止因为IP变化导致集群各个组件之间无法正确交互。
Linux默认网卡配置文件参考以下内容:
# 网卡类型,一般为Ethernet
# Ethernet:以太网
# bridge:网桥
# bond:链路聚合
TYPE=Ethernet
# 代理方式,默认关闭
PROXY_METHOD=none
# 默认no,NetworkManager文档中建议,只在PROXY_METHOD=auto时开启此项配置
BROWSER_ONLY=no
# IP地址获取方式
# dhcp:动态IP
# static:静态IP
BOOTPROTO=static
# 默认路由
DEFROUTE=yes
# IPv4致命错误检测
IPV4_FAILURE_FATAL=no
# IPv6初始化
IPV6INIT=yes
# IPv6自动配置
IPV6_AUTOCONF=yes
# IPv6默认路由
IPV6_DEFROUTE=yes
# IPv6致命错误检测
IPV6_FAILURE_FATAL=no
# IPv6地址生成模式
IPV6_ADDR_GEN_MODE=stable-privacy
# 网卡物理设备名称
NAME=eth0
# 网卡设备UUID
UUID=296756a8-7e7d-40b5-9caf-c1c5c475dfc6
# 网卡设备名称
DEVICE=eth0
# 开机启动网卡
ONBOOT=yes
# IP地址
IPADDR=192.168.123.100
# 网关地址
GATEWAY=192.168.123.1
# 子网掩码,也可以使用掩码长度表示,例如:PREFIX=24
NETMASK=255.255.255.0
# 首选DNS地址,备选DNS地址可以用DNS2设置,例如:DNS2=8.8.8.8
DNS1=114.114.114.114
简单网卡配置参考如下内容:
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.123.100
GATEWAY=192.168.123.1
NETMASK=255.255.255.0
主机名配置
集群中每一台机器都需要设置主机名,最好能够见名知意,命令如下:
hostnamectl set-hostname ${machine1-mysql-master}
集群中每一台机器都需要配置所有机器(包括自身)的IP-Hostname映射关系,修改/etc/hosts文件:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.123.100 Hostname1
192.168.123.101 Hostname2
192.168.123.102 Hostname3
防火墙配置
集群中每一台机器一般都要求关闭防火墙(如果必须开启防火墙,请参考其他文章配置相应的防火墙规则),命令如下:
systemctl stop firewalld.service
systemctl disable firewalld.service
SeLinux配置
SeLinux(Security-Enhanced Linux)是一个Linux的系统中的安全增强子模块,它定义了每个用户对系统上的应用、进程和文件的访问权限,由于SeLinux的结构和配置都非常复杂,一般都会选择关闭该配置,在集群中每一台机器的/etc/sysconfig/selinux文件中配置如下内容:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
SSH免密互连配置
Hadoop等组件依赖SSH免密互连来管理节点,所以集群上每一台机器都应该保证SSH免密互连(准确来说应该保证管理节点可以免密登录其他节点)。
确认每一台机器都安装OpenSSH,如果没有安装则执行安装命令,开启sshd服务并将其设置为开机启动,命令如下:
rpm -qa | grep openssh
yum install -y openssh*
systemctl enable sshd
systemctl start sshd
在每一台机器上都生成密钥对文件,默认生成在/root/.ssh目录下,id_rsa为私钥文件,id_rsa.pub为公钥文件,命令如下:
ssh-keygen -t rsa
在每一台机器上将当前节点的公钥文件发送至所有节点(包括自身)的授权文件(默认生成为/root/.ssh/authorized_keys)中完成当前节点到其他所有节点的SSH免密连接,命令如下(需要根据提示输入其他机器的密码):
ssh-copy-id -i /root/.ssh/id_rsa.pub root@${ip or hostname}
# authorized_keys文件的权限需要为600,即"-rw-------",如需修改则执行以下命令
chmod 600 /root/.ssh/authorized_keys
在所有节点上完成SSH免密互连之后,最好在每一台机器上都验证一遍,谨防遗漏部分机器或者配置错误导致SSH免密互连不成功。?
透明大页配置
透明大页可能会导致比较严重的性能问题,特别是对一些数据库系统来说,在每一台机器上检查并关闭透明大页,命令如下:
# 以下命令结果为[always] madvise never,则表示开启透明大页
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
# 临时关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
为了防止机器重启后,又自动打开透明大页,需要在/etc/rc.d/rc.local文件中追加以下内容:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
?同时需要确保/etc/rc.d/rc.local文件具有可执行权限,命令如下:
chmod +x /etc/rc.d/rc.local
文件句柄数配置
大数据软件一般都会打开较多文件,特别是HDFS、Kafka等,一般Linux默认的文件句柄数为1024是完全不满足需求的,需要修改每一台机器的文件句柄数(一般102400足够,集群数据量大可以适当增大文件句柄数),命令如下:
# 查看当前系统的文件句柄数设置
ulimit -n
# 查看操作系统所允许的最大文件句柄数
# 如果文件句柄数设置超过该值,重启服务器后会导致系统无法正常进入,只能进入救援模式修改文件句柄配置
cat /proc/sys/fs/file-max
# 临时配置文件句柄数
ulimit -n 102400
为了防止机器重启后重置文件句柄数,需要修改每一台机器上的/etc/security/limits.conf文件,永久配置文件句柄数,命令如下:
echo 'root soft nofile 102400' >> /etc/security/limits.conf
echo 'root hard nofile 102400' >> /etc/security/limits.conf
磁盘挂载配置
大数据集群的机器除了系统盘之外一般都会有一块或多块数据盘,一个数据目录对应一块数据盘,这些数据盘需要永久正确挂载,确保每一台机器重启后不会因为磁盘挂载问题导致数据丢失,命令如下:
# 查看所有已经格式化的磁盘
# 命令结果释义:磁盘设备序号: UUID="UUID编号" TYPE="磁盘格式"
blkid
# 查看所有的磁盘设备
lsblk
# 挂载磁盘,磁盘必须已经格式化
mount -t xfs ${磁盘设备序号} ${path}
# 永久挂载磁盘
# 通过blkid命令获取需要挂载的磁盘设备的UUID、磁盘格式
echo 'UUID=${UUID} ${path} ${type} defaults 0 0' >> /etc/fstab
主机时间配置
大数据集群对各个节点之间的时间要求是同步的,特别是开启了Kerberos安全认证的情况下(默认时差5s,如果超过5s会导致认证不通过);同步时间可以使用ntpdate命令配合定时服务来实现,也可以使用ntp服务来实现;推荐使用ntp进行时间同步,因为ntpdate会将系统时间设置为目标服务器的时间,有可能会造成时间跳变,影响大数据服务,ntp不会造成时间跳变。
ntp是一个server/client架构的服务,一台机器可以同时作为server端和client端,只是配置稍有不同;一般会选择集群中的重点角色的机器(例如Hadoop NameNode节点所在的机器)作为客户端向外部授时服务器进行时间同步,然后该机器本身作为集群内部的server端向集群中其他机器提供时间同步服务。
在集群中每一台机器上安装ntp服务,命令如下:
yum install -y ntp
修改server端配置,修改/etc/ntp.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
# 添加外网授时地址,prefer表示优先选择,iburst表示当NTP服务器不可用时发送一系列并发包进行检测
server ntp1.aliyun.com prefer
server cn.pool.ntp.org iburst
# 添加本机作为授时服务器
server 127.127.1.0
# 本地时间源层级设置
fudge 127.127.1.0 stratum 10
# 允许192.168.122.0/24网段的机器进行时间同步
# 也可以添加单独IP的允许,例如:restrict 192.168.123.111 nomodify notrap
restrict 192.168.123.1 mask 255.255.255.0 nomodify notrap
修改client端配置,修改/etc/ntp.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 192.168.123.100
ntp服务有一个检测机制,当本机时间与授时服务器时间差距过大时,会导致无法启动ntp服务,因此在启动ntp服务前,一般需要先通过ntpdate 命令来手动同步一次,命令如下:
# 出ntpdate命令外,还可以使用date命令手动设置一个相近的时间
ntpdate ${授时服务器地址}
在所有机器上都启动ntp服务,命令如下:
# 启动ntp服务
systemctl start ntpd
# 检查ntp服务状态
systemctl status ntpd
# 设置开机启动
systemctl enable ntpd
检查时间同步状态,命令如下:
# 首次进行时间同步时会有五分钟左右的同步时间
# 此时进行检查可能会出现"unsynchronised ...",表示没有正常同步
# 建议启动服务后,隔五分钟再检查,结果出现"synchronised ..."表示正常同步中
ntpstat
|