redis、hadoop和hbase等安装相关拓展知识补充

从某种意义上来说,一项技术要学会不难,要学好就很难。
会,代表的是能用起来就可以了,照葫芦画瓢而已;好,就涉及到各种细节,一些重要的、频率高的操作,可能还需要知道部分原理。
就拿软件安装来说,linux中大部分软件的主要安装流程是大同小异的,仅是这种大同,也有许多的细节,以下便是我在redis、hadoop、hbase等安装过程中遇到的其中一部分,仅是一部分。

防火墙

首先要说的是防火墙,很多人都知道如果防火墙开着并且没有设置白名单的话,大部分端口都是不能直接从外部访问的,所以要么配置白名单,要么就是关闭防火墙。
从专业运维的角度和生产环境来说,自然是配置白名单,但是只是自己搭建虚拟机和安装软件用来学习或者测试,那也必然是越简单越好,所以一般都是直接关闭防火墙。
我一般使用的就是service iptables stop,这个命令我个人觉得很好记,也习惯了。
但是上边命令的问题是只是一次性的,如果系统重启了就又要重新执行一次,一台机操作的时候可能没什么,像搭建hadoop分布式,就会发现每次启动三四台机要执行三四次就很麻烦,因此其实还要一个设置一次一直有效的操作:

1
chkconfig iptables off

这个操作的意思是,配置开机检查项,开机就关闭iptables服务,即开机就关闭防火墙,这样一来就不用每次都手动去关闭一下了。
更重要的是,这个操作其实并不是防火墙独有的,而是对于linux中的服务都能这样操作,有点一招吃遍天下的感觉。
当然了,关闭防火墙并不止这一种方式,起码就还有另一种:

1
systemctl disable firewalld

上边这个也可以达到执行一次就可以的效果,区别在于这个不是开机后关闭,而是就不开启,只不过我个人觉得第一个操作好记,纯个人习惯而已。

selinux

防火墙是和安全相关的,关闭的目的是为了我们安装的软件端口能被外部访问,linux中还有一个和安全相关的模块,在自己搭虚拟机的时候也最好是关闭,即selinux。
selinux是Security-Enhanced Linux的简称,据说是有的系统带了这个,有的系统没带,如果带了,可以看到/etc/selinux/config这个文件。
selinux里有很多规则和权限管理,他有一个机制是如果开机或者关机出现了某些错误,就会让文件系统变成只读模式,什么都不能修改,这个无疑是可能会为我们带来一些阻碍的。
所以,和防火墙一样,专业运维或者生产环境可能就不能直接关闭,而自己用就可以简单的直接关掉。
selinux有三种模式,如下;

enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
disabled:关闭 SELinux。

/etc/selinux/config文件中默认有一行配置SELINUX=enforcing,即默认是使用的强制模式,所以关闭就需要把这一行改成SELINUX=disabled,然后reboot命令重启系统。

关于ssh免密

ssh是 Secure Shell 的缩写,可以理解为远程登录,或者说远程安全登录。
通常情况下,使用ssh登录另一台机是需要输入用户名密码的,就相当于我要去你家里,你家门锁了,然后需要你把你家钥匙给我,然后我用你家钥匙开你家的门。
在这里插入图片描述
这里的问题在于,如果只有一家就还好,如果有很多家我都要去呢,那么就要拿很多很多的钥匙,其实是容易弄错的,ssh登陆中就是需要记很多机器的密码。
所以另一种方式就是使用ssh免密操作,就可以省去登陆时的密码验证。
具体操作是,在需要发起登陆的机器上生成ssh秘钥对,然后把公钥放入需要登录到的机器上,之后就可以直接免密登陆了。
根据我个人的理解,通俗点说,我觉得就是我有一把锁和n多把钥匙,然后我给我要去的每家存一把钥匙,之后带着我的锁,如果那家的钥匙能开我带的这把锁,就允许进入他家,当然了,理解是这样理解,实际的公私钥加解密并不是简单地钥匙和锁的问题,上边的描述就可以大致表示为:
在这里插入图片描述
这样的好处自然就是我只需要管好自己的一把锁,不用选择,显得很方便。不好的地方就是实际有一种侵入感,需要有交互文件存储,而且免密自然也就会增大安全风险,只不过我们一切以自己简单易用为前提,也就先不用管安全的事了。
ssh秘钥生成使用如下命令:

1
ssh-keygen -t rsa

以上命令会在当前用户目录下生成.ssh目录,在.ssh目录下生成公私钥对。要说明的是,上述命令的参数远不止示例所展示的这样,并且示例中的rsa也可以换成dsa,默认情况下就是dsa,代表不同的加密算法。
我是用的是root用户,则上述命令会在/root/.ssh目录生成如下两个文件:

1
2
id_rsa
id_rsa.pub

如果是使用的dsa,则会生成这样两个文件:

1
2
id_dsa
id_dsa.pub

无论是rsa还是dsa,带有pub结尾的即公钥,如果要免密登陆,就需要再把公钥里的内容写入到免密登陆文件中,例如:

1
cat id_rsa.pub >> ~/.ssh/authorized_keys

然后,就可以把这个文件复制到对应的需要登陆的机器的对应用户目录下。
有人可能会说在用户目录下使用ls和ll都看不到.ssh目录,那是因为这个目录是一开始没有的,及时后边有了,也是隐藏目录,如果要看到他,需要ll查看是加参数:

1
ll -a

主机名映射

hadoop以及很多涉及到连接其他机器的软件,实际都需要进行主机名和ip的关系映射,也可以称作虚拟域名映射。
这样做的目的是防止IP变化了就要修改所有软件的配置,如果是使用主机名和ip映射,那么软件中都使用主机名,ip变了只需要修改/etc/hosts文件即可,就不会每个软件都改一遍。

JAVA_HOME等环境变量配置

对于java环境来说,一般都需要,也都会配置机器的PATH环境变量,把JAVA_HOME加进去。
但是在hadoop分布式安装时会发现,即使机器已经安装了,还是需要在hadoop的本身配置文件中又配置一次。
之所以这么做,是因为hadoop分布式启动的时候,一台机执行命令同时启动所有关联节点,是执行命令的机器使用了ssh连接了其他机器去执行相应的hadoop启动命令。
而这里有个细节就是,本机器启动时,会加载/etc/profile文件,就能读取到配置的环境变量,而其他机器ssh连接过来时并不会加载/etc/profile文件,也就导致看似配置了JAVA_HOME等环境变量,实际却读不到,就需要软件本身配置文件中主动增加相应环境变量的配置。
所以由上可知,这种操作其实也不限于JAVA_HOME,不限于hadoop。

jdk安装

我的虚拟机中jdk安装,使用的是tar.gz这种压缩包解压安装模式,目前用起来没有什么问题,
但是实际了解到的是这里有坑。
初步学习hadoop,暂时能进行简单的能操作就可以了,软件的安装也都是一个个独立进行的。
但是由于hadoop相关生态中如hbase、hive、spark、flink等很多套件,真正都一一独立安装就显得很繁杂,于是有个公司把这些东西进行了一个统一,以统一管理简化安装操作,这就是CDH,实际生产环境很多公司可能都是用的CDH。
而上边说的坑就在于,CDH默认读取的JAVA_HOME不是环境变量中配置的,而是/usr/java/default
所以就需要为实际的JAVA_HOME建立一个软连接,例如:

1
2
mkdir -p /usr/java
ln -s /root/soft/jdk1.8.0_261 /usr/java/default

除此之外,还要一个办法就是,一开始安装jdk的时候不使用压缩包方式,而是使用rpm安装,如:

1
rpm -ivh jdk-8u181-linux-x64.rpm

这种安装方式就会自动建立上边的软连接,安装完之后我们再配置JAVA_HOME即可。

推荐文章