我们在搭建redis集群、zookeper集群、hadoop集群、或者kafaka集群时候,都需要使用多台机器,所以搭建集群服务器是一个后端程序员基本素养。本文目标是:准备搭建5台linux虚拟机
1、软件准备
CentOS-7-x86_64-Minimal-1611.iso、
2、安装要求
搭建5台linux虚拟机;CentOS 7操作系统,64位,每台机器都是1个cpu,1G内存,安装JDK 1.8
3、虚拟机配置
3.1、创建虚拟机
打开Virtual Box,点击“新建”按钮,点击“下一步”,输入虚拟机名称为centos01,选择操作系统为Linux,选择版本为Red Hat-64bit,分配1024MB内存,后面的选项全部用默认,在Virtual Disk File location and size中,一定要自己选择一个目录来存放虚拟机文件(不然的话会存放到c盘下、比较坑),最后点击“create”按钮,开始创建虚拟机。
3.2、设置虚拟机网卡
选择创建好的虚拟机,点击“设置”按钮,在网络一栏中,连接方式中,选择“Bridged Adapter”。(一般常用的搭建虚拟机做实验的方式就是桥接网络)
我们在不同地方办公ip地址变化了,就会导致你的之前搭建的那套虚拟机环境就没法用了。如果你希望无论到哪里,ip地址变化了以后,虚拟机都可以正常工作,不需要重新配置网络,虚拟机如何配置网络,可以更换环境的时候,不需要重新配置,NAT如何配置。参考:https://www.cnblogs.com/cheng...
使用桥接,换了一个网络环境,ip地址都换了,5台虚拟机重新配置一下里面的网卡的一些ip地址;
3.3、安装虚拟机中的CentOS7操作系统
选择创建好的虚拟机,点击“开始”按钮,选择安装介质(即本地的CentOS 7镜像文件)
系统选择自动分片
安装完以后,CentOS会提醒你要重启一下,就是reboot,你就reboot就可以了。
4、配置网络
(如果重启网卡使用ip addr时候 没看到人家给你分配的ip地址,你自己虚拟机主机应该是要去连一个路由器(网络)就可以了)
先让它动态分配一个ip地址
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
ONBOOT=yes //ONBOOT是指明在系统启动时是否激活网卡,只有在激活状态的网卡才能去连接网络,进行网络通讯
然后重启服务:service network restart
查看分配的ip:ip addr
再设置静态ip地址:
BOOTPROTO=static
IPADDR=192.168.1.8
NETMASK=255.255.255.0
GATEWAY=192.168.1.1 //网关直接去虚拟机所在主机去查看对应网卡的网关
然后重启网络
service network restart
查看ipaddr
ip addr
虚拟机宿主机的网关如下:
mac下查看网关及其dns参考链接:https://jingyan.baidu.com/art...
5、配置DNS
检查NetManager的状态:
systemctl status NetworkManager.service
检查NetManager管理的网络接口:
nmcli dev status
检查NetManager管理的网络连接:
nmcli connection show
需要注意的是,enp0s3设备对应的连接名改为System enp0s3,但对应的ifcfg文件并没有改名,我们改改试试,改之前先备份原配置文件到其他目录(注意,不能备份到network-scripts目录!)
设置dns(有时候报错:nmcli con 错误:unknown connection 'enp0s3'):
nmcli con mod enp0s3 ipv4.dns "114.114.114.114 8.8.8.8"
让dns配置生效:
nmcli con up enp0s3
需要注意的是,enp0s3设备对应的连接名改为enp0s3,但对应的ifcfg文件并没有改名,我们改改试试,改之前先备份原配置文件到其他目录(注意,不能备份到network-scripts目录!)
此时查看知道其name为enp0s3
再次执行配置dns即可生效:
让dns配置生效:
nmcli con up enp0s3
6、配置host
vi /etc/hosts
配置本机的hostname到ip地址的映射
192.168.1.8 centos01
7、安装文件传输工具
一般来说,虚拟机管理软件,virtual box,可以用来创建和管理虚拟机,但是一般不会直接在virtualbox里面去操作,没有办法复制粘贴,操作很不方便。
一般可以使用SecureCRT,xftp等工具,在windows宿主机中,去连接virtual box中的虚拟机。
8、关闭防火墙
1、关闭虚拟机防火墙
`systemctl stop firewalld.service
systemctl disable firewalld.service`
2、关闭宿主机防火墙
后面搭建集群、有集群之间通信,在本地你给了防火墙的话,可能会没有办法互相连接,会导致搭建失败。
9.配置yum
yum clean all
yum makecache
yum install -y wget //安装一个wget来测试yum安装成功与否
10.安装JDK
文件上传:
上传: scp localpath username@ip:remotepath
文件下载:
scp -r remote_username@remote_ip:remote_folder local_folder
1、将jdk-8u131-linux-x64.rpm上传到虚拟机中
scp /Users/xiexinming/software/package/jdk-8u131-linux-x64.rpm root@192.168.1.8:/usr/local/
2、安装JDK:rpm -ivh jdk-8u131-linux-x64.rpm
3、配置jdk相关的环境变量
vi /etc/profile
`export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin`
source /etc/profile
4、测试jdk安装是否成功:java -version
11.在另外4个虚拟机中安装CentOS集群
按照上述步骤,再安装4台一模一样环境的linux机器
另外三台机器的hostname分别设置为centos02,centos03,centos04,centos05
安装好之后,在每台机器的hosts文件里面,配置好所有的机器的ip地址到hostname的映射关系
192.168.1.8 centos01
192.168.1.xxx centos02
192.168.1.xxx centos03
192.168.1.xxx centos04
192.168.1.xxx centos05
12.配置5台CentOS为ssh免密码互相通信
首先在三台机器上配置对本机的ssh免密码登录
ssh-keygen -t rsa
生成本机的公钥,过程中不断敲回车即可,ssh-keygen命令默认会将公钥放在/root/.ssh目录下
cd /root/.ssh
cp id_rsa.pub authorized_keys
将公钥复制为authorized_keys文件,此时使用ssh连接本机就不需要输入密码了
(我们之前使用ssh连接一台机器的时候,ssh root@ip -p xxx是需要提示输入密码的,但是现在的话,直接是可以连接不需要输入密码。各个机器之间)
接着配置三台机器互相之间的ssh免密码登录
使用ssh-copy-id -i hostname命令将本机的公钥拷贝到指定机器hostname的authorized_keys文件中,那么此时本机就可以免密码连接到指定机器:hostname上了。
我们之后需要做的是将每台机器的密钥都拷贝到centos01上去,这些机器对centos01就可以免密码登录了。
我们查看/root/.ssh下时候,可以看到5份密钥。
然后把最完整的hadoop01上的authorized_keys文件里面的东西全部拷贝到其他机器上。
(先把其他机器的rm -rf authorized_keys)
[CentOS7 linux 中提示 bash: ls: 未找到命令...]
执行ls命令时报找不到命令,原因是环境变量PATH被修改,
解决办法:
执行 export PATH=/bin:/usr/bin:$PATH
备注
常用指令:
管理员权限:sudo
(下文配置时的指令操作如果出现错误,就在指令前加sudo
)
防火墙状态:systemctl status firewalld.service
关闭防火墙:systemctl stop firewalld.service
编辑enp0s3网卡:vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
重启network:service network restart
更改DNS
查看当前启动的连接:nmcli connection show
更改DNS:nmcli con mod enp0s3 ipv4.dns 114.114.114.114
配置生效:nmcli con up enp0s3
取消当前指令:Ctrl/Command + Z
保存文件并退出:先按Esc;然后 Shift + ; (即输入“:”)最后输入wq
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。