集群Linux环境搭建
1、注意事项:
1.1、设置虚拟机的内存
- 需要三台虚拟机时,并且需要同时运行,所以总体上的占用为:每台虚拟机内存 ×3
- 在分配的时候,需要在总内存大小的基础上,减去2G~4G作为系统内存,剩余的除以3,作为每台虚拟机的内存
每台机器的内存 = (总内存 - 4)÷3
1.2、确认Windows系统下所有关于VmWare的服务已启动
1.3、确认好VMware生产的网关地址
1.4、确认VmNet8网卡已经配置好IP地址和DNS
2、集群规划
IP | 主机名 | 环境配置 | 安装 |
---|---|---|---|
192.168.1.10 | node01 | 关闭防火墙和selinux,host映射,时钟同步 | JDK,nameNode,ResourceManager,Zookeeper |
192.168.1.11 | node02 | 关闭防火墙和selinux,host映射,时钟同步 | JDK,DataNode,NodeManager,Zookeeper |
192.168.1.12 | node03 | 关闭防火墙和selinux,host映射,时钟同步 | JDK,DataNode,NodeManager,Zookeeper |
3、设置IP地址和Mac地址
[root@hadoop3 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=bd410110-c18d-4721-92e8-46029369ffa9
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.12 #克隆后的机器,修改IP地址就行了
GATEWAY=192.168.1.2
PREFIX=24
DNS1=114.114.114.114
DNS2=8.8.8.8
4、重启网络服务
[root@hadoop01 ~]# service network restart
5、修改主机名
[root@hadoop01 ~]# hostnamectl set-hostname hadoop01 #修改后面的hadoop01就行
6、添加映射
[root@hadoop01 ~]# vim /etc/hosts #三台机器都要进行添加
192.168.1.10 hadoop01 hadoop01.com # hadoop01的IP映射
192.168.1.11 hadoop02 hadoop02.com # hadoop02的IP映射
192.168.1.12 hadoop03 hadoop03.com # hadoop03的IP映射
7、关闭防火墙和SELinux
(1)关闭防火墙
[root@hadoop01 ~]# systemctl stop firewalld.service
(2)永久关闭防火墙
[root@hadoop01 ~]# systemctl disable firewalld.service
(3)查看防火墙状态
[root@hadoop01 ~]# systemctl status firewalld.service
7.1什么是SELinux
- SELinux是Linux的一种安全子系统
- Linux中的权限管理是针对于文件的,而不是针对进程的,也就是说,如果root启动了某个进程,则这个进程可以操作任何一个文件
- SELinux在Linux的文件权限之外,增加了对进程的限制,进程只能在进程允许的范围内操作资源
为什么要关闭SELinux
-
如果开启了SELinux,需要做非常复杂的配置,才能正常使用系统,在学习阶段,在非生产环境,一般不使用SELinux
-
SELinux的工作模式
- enforcing 强制模式
- permissive 宽容模式
- disable 关闭
(1)临时关闭SELinux
setenforce 0
1
(2)临时打开SELinux
setenforce 1
1
(3)开机关闭SELinux
vi /etc/selinux/config
修改"SELINUX=disabled"为"SELINUX=disabled"
12
(4)查看SELinux状态
getenforce
8、配置免密登录
- 为什么要免密登录
- Hadoop节点众多,所以一般在主节点启动从节点,这个时候
就需要程序自动在主节点登录到从节点中,如果不能免密就每次都要输入密码,非常麻烦
- 免密SSH登录的原理
- 需要现在B节点配置A节点的公钥
- A节点请求B节点要求登录
- B节点使用A节点的公钥,加密一段随机文本
- A节点使用私钥解密,并发回给B节点
- B节点验证文本是否正确
(1)第一步:三台机器生成公钥与私钥
在三台机器分别执行以下命令,生产公钥与私钥
ssh-keygen -t rsa
执行该命令之后,按下三个回车即可
(2)第二步:拷贝公钥到同一台机器
三台机器将拷贝公钥到第一台机器
三台机器分别执行命令:
ssh-copy-id hadoop01
(3)第三步:复制第一台机器的认证到其他机器
将第一台机器的公钥拷贝到其他机器上
在第一台机器上面指向一下命令
scp /root/.ssh/authorized_keys hadoop02:/root/.ssh
scp /root/.ssh/authorized_keys hadoop02:/root/.ssh
9、配置时间同步
为什么需要时间同步
- 因为很多分布式系统是有状态的,比如说存储一个数据,A节点记录的时间是1,8节点记录的时间是2,就会出现问题
方式1:
所有主机和同一台主机的时间保持同步
方式2:
通过网络,所有主机和时钟同步服务器保持同步
## 安装
yum install -y ntp
## 启动定时任务
crontab -e
随后再输入界面输入
## /1 * * * * 表示的是: 分 时 日 月 周,这里表示每分钟执行这条/usr/sbin/ntpdate ntp4.aliyun.com
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com
10、三台机器安装jdk
10.1 查看自带的openjdk并卸载
# 查看是否有安装Java
rpm -qa | grep java
# 卸载Java,--nodeps是跳过依赖检查
rpm -e java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64 tzdata-java-2016j-1.el6.noarch java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.x86_64 --nodeps
10.2 创建安装目录
mkdir -p /export/softwares #软件包存放目录
mkdir -p /export/servers #安装目录
10.3上传并 解压
# 上传文件
rz -E
# 若使用不了rz命令,需要进行下载,lrzsz仅支持Xhell和SecureCRT
yum -y install lrzsz
#上传jdk到/export/softwares路径下去,并解压
tar -zxvf jdk-8u141-linux-x64.tar.gz -C ../servers/
将解压后的jdk发送给另外两台机器
scp -r jdk1.8.0_141/ hadoop02:/export/servers #加-r参数表示发送文件夹
scp -r jdk1.8.0_141/ hadoop03:/export/servers
10.4 配置环境变量
vim /etc/profile
添加如下内容
export JAVA_HOME=/export/servers/jdk1.8.0_141
export PATH=:$JAVA_HOME/bin:$PATH
修改完成之后记得 source /etc/profile生效
source /etc/profile
注意若有邮箱提醒加入下列命令
unset CHECKMAIL
11、mysql的安装
安装mysql数据库
第一步:卸载自带的迷你库
rpm -qa | grep mariadb | xargs rpm -e --nodeps
第二步:下载yum镜像下载源
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
第三步:安装yum下载源
yum -y install mysql57-community-release-el7-10.noarch.rpm
第四步:开始下载
yum -y install mysql-community-server
配置mysql
第一步:启动MySQL服务
systemctl start mysqld.service
第二步:设置MySQL自启
systemctl enable mysqld.service
首次登陆mysql
第一步:设置root用户名密码
- 初始密码在/var/log/mysqld.log
grep "password" /var/log/mysqld.log
- 输入初始密码进入数据库
mysql -uroot -p
- 设置密码密码安全级别
SET global validate_password_policy=0;
- 设置密码长度
set global validate_password_length=1;
- 添加root用户
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
第二步:开启远程访问
- 选择数据库
use mysql;
- 查看user表信息
select host,user from user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+---------------+
3 rows in set (0.00 sec)
- 修改root用户的host信息
update user set host = '%' where user = 'root';
- 开启远程连接
grant all privileges on *.* to root@'%' identified by "123456";
- 刷新权限
flush privileges;
PS:脚本安装
1、jdk安装
#!/bin/bash
if type -p java; then
echo 'Java已经安装'
exit 0
else
echo "java正在安装,稍等......."
mkdir -p /myapp/Java
tar -zxf /myapp/Java/jdk-8u171-linux-x64.tar.gz -C /myapp/Java
echo "#java" >> /etc/profile
echo "export JAVA_HOME=/myapp/Java/jdk1.8.0_171" >> /etc/profile
echo "export PATH=:$JAVA_HOME/bin:$PATH" >> /etc/profile
source /etc/profile
echo " "
echo " "
echo "======= Java已安装完毕!======="
java -version
rm -rf /myapp/Java/jdk-8u171-linux-x64.tar.gz
fi