文章目录
前言
本文使用三台主机部署Linux集群,IP地址如下:
主机名 | IP地址 |
---|---|
bigdata01 | 192.168.0.84 |
bigdata02 | 192.168.0.85 |
bigdata03 | 192.168.0.86 |
一、安装Linux操作系统
- 选择时区:Asia/Shanghai
- 最小化安装:勾选 Development Tools & System Administration Tools
- 自定义磁盘分区
挂载目录 | 磁盘划分 | LVM |
---|---|---|
/boot | 1G | |
bisboot | 1G | |
/ | 10G | rootvg、rootlv |
/usr | 10G | usrlv |
/var | 10G | varlv |
/opt | 10G | optlv |
/home | 10G | homelv |
/tmp | 10G | tmplv |
swap | 10G | swaplv |
- 设置主机名和IP地址
- 设置用户密码:root/root、user01/user01
二、VMware设置
1.网络编辑器
1.1.NET模式
虚拟机和主机组成子网,原主机局域网中的其他主机无法访问该虚拟机。
Windows 的 VM net8 的 IP 和网关设为: 192.168.xxx.1 和 192.168.xxx.2。
虚拟网络编辑器 net8 的子网 IP 和网关设为: 192.168.xxx.0 和 192.168.xxx.2。
虚拟机的网络设为同段的 192.168.xxx.0、192.168.xxx.1、192.168.xxx.2 以外的地址。
1.2.桥接模式
虚拟机加入主机所在局域网,原主机局域网中的其他主机可访问该虚拟机。
三、操作系统环境调整
1.关闭防火墙和selinux
# 永久关闭防火墙
[root@bigdata01 ~]$ systemctl disable --now firewalld
# 永久关闭SELinux
[root@bigdata01 ~]$ sed -i 's/=enforcing/=disabled/' /etc/selinux/config
[root@bigdata01 ~]$ setenforce 0
2.关闭NetworkManager
[root@bigdata01 ~]$ systemctl disable --now NetworkManager
3.修改网络 IP 地址
[root@bigdata01 ~]$ vi /etc/sysconfig/network-scripts/ifcfg-ens192
BOOTPROTO=none
ONBOOT=yes
IPADDR="192.168.0.84"
PREFIX="24"
GATEWAY="192.168.0.1"
[root@bigdata01 ~]$ ststemctl restart network
4.设置DNS
[root@bigdata01 ~]$ cat >> /etc/resolv.conf << EOF
nameserver 223.5.5.5
EOF
5.设置主机名
[root@bigdata01 ~]$ cat > /etc/hostname << EOF
bigdata01
EOF
# 或者
[root@bigdata01 ~]$ hostnamectl --static set-hostname bigdata01
6.IP 地址和主机名映射
- linux 添加 ip 地址映射
[root@bigdata01 ~]$ cat >> /etc/hosts << EOF
192.168.0.84 bigdata01
192.168.0.85 bigdata02
192.168.0.86 bigdata03
EOF
- windows 添加 ip 地址映射
# 路径如下
C:\Windows\System32\drivers\etc\hosts
192.168.0.84 bigdata01
192.168.0.85 bigdata02
192.168.0.86 bigdata03
# 刷新 dns 使其生效
cmd
ipconfig /flushdns
7.普通用户无密切换root用户
[root@bigdata01 ~] chmod 777 /etc/sudoers
[root@bigdata01 ~] vi /etc/sudoers
%wheel ALL=(ALL) ALL
user01 ALL=(ALL) NOPASSWD:ALL
[root@bigdata01 ~] chmod 440 /etc/sudoers
[root@bigdata01 ~] exit
[root@bigdata01 ~] sudo su
8.创建目录
[root@bigdata01 ~]$ mkdir -pv /opt/{module,soft,scripts}
9.配置yum源
9.1.配置本地源
# 在 VMware 或者 ESXi 上将镜像文件勾选连接,挂载镜像文件
[root@bigdata01 ~]$ mount /dev/sr0 /mnt
[root@bigdata01 ~]$ df -h
# 或者将iso文件通过ftp上传到/mnt目录下挂载
[root@bigdata01 ~]$ mount -o loop /mnt/CentOS-7-x86_64-DVD-1810.iso /mnt/
[root@bigdata01 ~]$ df -h
# 查看挂载后是否有内容
[root@bigdata01 ~]$ cd /mnt
[root@bigdata01 ~]$ ll
# 配置本地yum源
[root@bigdata01 ~]$ cd /etc/yum.repos.d/
[root@bigdata01 ~]$ mkdir ./bak
# 备份yum源
[root@bigdata01 ~]$ mv ./*.repo ./bak
# 文件名称一定以.repo为后缀
[root@bigdata01 ~]$ vi yum.repo
[redhat7]
name=redhat7 server
baseurl=file:///mnt
gpgcheck=0
enabled=1
# 清除yum缓存
[root@bigdata01 ~]$ yum clean all
# 缓存本地yum源
[root@bigdata01 ~]$ yum makecache
# 测试yum本地源
[root@bigdata01 ~]$ yum list
# 开机自动挂载
[root@bigdata01 ~]$ vi /etc/rc.d/rc.local
# mount 镜像的绝对路径 要挂载的目录
mount -o loop /mnt/CentOS-7-x86_64-DVD-1810.iso /mnt/
# 赋予执行权限
[root@bigdata01 ~]$ chmod +x /etc/rc.d/rc.local
9.2.配置网络源
[root@bigdata01 ~]$ yum install wget
# 配置阿里镜像源
[root@bigdata01 ~]$ cd /opt/soft
wget http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/rpm-4.11.3-45.el7.x86_64.rpm
wget http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/python-urlgrabber-3.10-10.el7.noarch.rpm
wget http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-168.el7.centos.noarch.rpm
wget http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
wget http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch.rpm
# 安装 yum 插件
[root@bigdata01 ~]$ rpm -ivh --force rpm-4.11.3-45.el7.x86_64.rpm python-urlgrabber-3.10-10.el7.noarch.rpm yum-3.4.3-168.el7.centos.noarch.rpm yum-metadata-parser-1.1.4-10.el7.x86_64.rpm yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch.rpm
# 下载 CentOS7 的 repo 并上传至 /etc/yum.repos.d/
[root@bigdata01 ~]$ wget http://mirrors.aliyun.com/repo/Centos-7.repo
[root@bigdata01 ~]$ mv /opt/soft/Centos-7.repo /etc/yum.repos.d/
# 修改 repo 文件
[root@bigdata01 ~]$ vi /etc/yum.repos.d/Centos-7.repo
# 使用 vi 编辑器进行全局替换
%s/$releasever/7/g
[root@bigdata01 ~]$ vi /etc/yum.conf
plugins=0
[root@bigdata01 ~]$ vi /etc/yum/pluginconf.d/subscription-manager.conf
[main]
enabled=0
# 清空 yum 缓存,使其设置生效
[root@bigdata01 ~]$ yum clean all
# 加载服务器软件包缓存信息,提高搜索安装软件的速度
[root@bigdata01 ~]$ yum makecache
# 测试替换成功
[root@bigdata01 ~]$ yum install -y epel-release
[root@bigdata01 ~]$ yum install -y vim net-tools lyzsz sysstat
10.卸载自带 JDK 和 MySQL
[root@bigdata01 ~]$ rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
[root@bigdata01 ~]$ rpm -qa | grep -i mysql | xargs -n1 rpm -e --nodeps
11.克隆虚拟机
- 修改 02 和 03 节点的 ip 并且将 UUID 注释掉
- 修改 02 和 03 的主机名
12.集群无密钥登陆
# 三台同样操作
[root@bigdata01 ~]$ ssh-keygen -t rsa
[root@bigdata01 ~]$ ssh-copy-id bigdata01
[root@bigdata01 ~]$ ssh-copy-id bigdata02
[root@bigdata01 ~]$ ssh-copy-id bigdata03
# 测试
[root@bigdata01 ~]$ ssh bigdata01
[root@bigdata01 ~]$ ssh bigdata02
[root@bigdata01 ~]$ ssh bigdata03
# 切换至普通用户testuser,执行上面相同的操作
[xinyuan@bigdata01 ~]$ ssh-keygen -t rsa
[xinyuan@bigdata01 ~]$ ssh-copy-id bigdata01
[xinyuan@bigdata01 ~]$ ssh-copy-id bigdata02
[xinyuan@bigdata01 ~]$ ssh-copy-id bigdata03
13.集群时间同步
操作节点:bigdata01
[root@bigdata01 ~]$ yum install -y ntp ntpdate
[root@bigdata01 ~]$ vim /etc/ntp.conf
# 释放注释,允许0段192.168.0.0-192.168.0.255网段的机器同步此服务器
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
#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 ntp1.aliyun.com
# 添加允许上层时间服务器主动修改本机时间
restrict ntp1.aliyun.com notrap noquery
# 外部时间服务器不可用时,以本地时间作为时间服务
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# 手动时间矫正
[root@bigdata01 ~]$ ntpdate -u ntp1.aliyun.com
# 重启ntpd服务
[root@bigdata01 ~]$ systemctl restart ntpd
# 查看状态(需要等10mins-30mins左右)
[root@bigdata01 ~]$ ntpq -p
操作节点:bigdata02&03
[root@bigdata02 ~]$ yum install -y ntp ntpdate
[root@bigdata02 ~]$ vim /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
#配置与bigdata01时间服务器同步
server bigdata01
# 添加允许上层时间服务器主动修改本机时间
restrict bigdata01 notrap noquery
# 外部时间服务器不可用时,以本地时间作为时间服务
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# 手动时间矫正
[root@bigdata02 ~]$ ntpdate -u bigdata01
[root@bigdata02 ~]$ systemctl restart ntpd
# 查看状态(需要等半小时左右)
[root@bigdata02 ~]$ ntpq -p
# 或者
[root@bigdata02 ~]$ ntpstat
# 或者创建定时任务同步时间
[root@bigdata02 ~]$ crontab -e
*/10 * * * * /usr/sbin/ntpdate -u bigdata01
[root@bigdata02 ~]$ crontab -l
14.安装JDK
[root@bigdata01 ~]$ tar -zxvf /opt/soft/jdk-8u331-linux-x64.tar.gz -C /usr/local
# 配置环境变量
[root@bigdata01 ~]$ vi ~/.bash_profile
# JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_331
export PATH=$PATH:$JAVA_HOME/bin:.
[root@bigdata01 ~]$ source ~/.bash_profile
15.集群通用脚本
hosts 文件
[root@bigdata01 ~]$ vi ~/hosts
192.168.0.84 bigdata01
192.168.0.85 bigdata02
192.168.0.86 bigdata03
xsync 脚本
[root@bigdata01 ~]$ cd /usr/local/bin
[root@bigdata01 bin]$ vim xsync
#!/bin/bash
hosts=$(head -n +3 ~/hosts | awk '{print $1}')
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in ${hosts[*]}
do
echo ==================== $host====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
[root@bigdata01 bin]$ chmod 755 ./xsync
[root@bigdata01 ~]$ yum install rsync
[root@bigdata01 ~]$ xsync /usr/local/jdk1.8.0_331
[root@bigdata01 ~]$ xsync ~/.bash_profile
xcall 脚本
[root@bigdata01 bin]$ vim xcall
#!/bin/bash
hosts=$(head -n +3 ~/hosts | awk '{print $1}')
# 获取控制台指令
pcount=$#
# 判断指令是否为空
if((pcount==0));
then
echo "command can not be null !"
exit
fi
# 获取当前登录用户
user=`whoami`
source /etc/profile
# 在从机执行指令,这里需要根据你具体的集群情况配置,host与具体主机名一致
for host in ${hosts[*]}
do
echo ================ $host =================
ssh $user@$host $@
done
echo ================================================
[root@bigdata01 bin]$ chmod 755 ./xcall
[root@bigdata01 bin]$ ln -s $JAVA_HOME/bin/jps ./
[root@bigdata01 bin]$ xsync ./*
[root@bigdata01 bin]$ xcall jps