实现目标
1、实现共享目录,即slave可以通过nfs访问master的一个目录
2、master可以登录slave的某个账号,操纵其他slave,作为调度中心
准备
设备:
- 计算机3台
- 交换机1台(有4个LAN端口就行),如果路由器lan口足够可使用路由器
- 网线4根
- 其他:插排、键盘、鼠标、显示器。。。
提示
下文中的user指的是linux登录的用户名,node1、2、3指的是计算机名,一般二者区别在于,打开终端,命令提示符前xxx@yyy,xxx指的用户名,yyy指的计算机名。所以你需要根据差异相应更改!!!
3台PC依次设置不同的IP地址,如:192.168.1.101,192.168.1.102,192.168.1.103,这个也是一一对应的,即node1的ip为192.168.1.101,其他类比。
修改/etc/hosts
三台主机均执行:sudo vi /etc/hosts
在vi中做同样的更改,即加入下面三行
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
注意,内容一定要结合自己的ip和计算机名称。
检查通信
将3台PC分别用网线与任意三个交换机LAN端口相连,用另一根网线连接第四个交换机LAN端口和外部局域网接口。交换机通电后,所有主机应能同时连入局域网。主机之间也可以相互联系。可用"ping 192.168.1.10?"相互测试。
例如:ping 192.168.1.101
安装nfs
下面的内容做出如下假设:node1设为主节点(master),node2与node3设为从节点(slave)。
(node1下)
sudo apt-get install nfs-server
(node2与node3下)
sudo apt-get install nfs-client
创建共享文件夹
在三台主机运行下面的命令:
sudo mkdir /mirror
其中,master的作为分享者,slave的/mirror目录作为挂载点。
在node1上,修改“/etc/exports”文件,
sudo vi /etc/exports
末尾加入
/mirror *(insecure,rw,async,no_root_squash)
重启nfs:sudo service nfs-kernel-server restart
在node2与node3下,
修改“/etc/fstab”文件,执行:sudo vi /etc/fstab
在末尾加入:
node1:/mirror /mirror nfs
即计算机node1的/mirror目录分享,通过nfs挂载在当前主机的/mirror目录,node1修改为自己计算机名。
最后执行挂载:sudo mount -a
现在,修改共享文件夹所有者为初始用户名 (node1下),命令中user指的master登录的账号:sudo chown user /mirror
配置ssh免密登录
再作为master的node1,执行:
sudo apt-get install openssh-server
在node1下,
user指的当前登录的账号,如果只有一个账号,可以不执行下面的命令
su - user
下面开始设置免密登录,执行:
ssh-keygen -t rsa
一路回车后,需要留意创建的目录位置,最好关注一下,enter之后linux干了啥。
下面配置node2,下面的user指node2下登录的用户名,
ssh user@192.168.1.102 mkdir -p .ssh
执行该命令后,提示输入node2下user的密码。
输入登录密码,执行,
cat ~/.ssh/id_rsa.pub | ssh user@192.168.1.102 'cat >> .ssh/authorized_keys'
再次输入刚刚的密码。
现在配置node2,照猫画虎,这里不再阐释
ssh user@192.168.1.103 mkdir -p .ssh
输入登录密码
cat ~/.ssh/id_rsa.pub | ssh user@192.168.1.103 'cat >> .ssh/authorized_keys'
再次输入登录密码
测试
对于第一项指标,可以去slave主机中查看/mirror目录,如果master在/mirror下新建test.txt文件
touch test.txt
可以在slave主机下/mirror目录看到test.txt文件。
对于第二项指标,可以执行
ssh user@ip
user为slave下的一个登录用户,ip为登录的slave主机的ip地址,
执行完后可以执行:
cd ~
pwd
可以发现,master主机工作于slave主机下的home目录,有点神奇。细想一下,win环境都能登录linux,linux之间不也一样么。
关于并行计算
这一点留着慢慢探索,可能使用shell脚本进行任务调度,既然我能登录其他的计算机,就能给他们下任务