修改netplan配置文件
root@Server1:~# vim /etc/netplan/01-network-manager-all.yaml
配置详情
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: no #关闭动态分配ip
addresses: [192.168.35.150/24]
gateway4: 192.168.35.2 #虚拟机VMnet8默认网关为192.168.xx.2
nameservers:
addresses: [192.168.35.2] #dns 虚拟机使用网关即可
应用新配置
root@Server1:~# netplan apply
修改本机hostname
root@Server1:~# vim /etc/hostname
添加映射
root@Server1:~# vim /etc/hosts
127.0.0.1 localhost
127.0.1.1 Server1
192.168.35.151 Server2
192.168.35.152 Server3
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
重启生效
root@Server1:~# reboot
生成密钥
root@Server1:~# ssh-keygen -t rsa
密钥文件 ~/.ssh/id_rsa.pub为公钥 ~/.ssh/id_rsa为密钥
追加公钥,注意此处不要用 cat > 命令导致原有公钥被覆盖
root@Server1:~# cat 公钥 >> ~/.ssh/authorized_keys
重启ssh服务
root@Server1:~# systemctl restart sshd.service
安装
root@Server1:~# apt-get install rsync
使用rsync实现文件复制,rsync只会对差异文件进行更新,不同于scp复制所有文件。
基本用法
rsync -av 文件路径 用户名@主机:远程文件路径
rsync -av /usr/local/mysoft/jdk8 root@Server2:/usr/local/mysoft/
参数 -a 归档拷贝(类似于递归) -v 显示复制过程
新建脚本tsync
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in Server2 Server3
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@Server1:~# chmod +x /usr/local/myshell/tsync
创建软连接 - 环境变量
root@Server1:~# ln -s /usr/local/myshell/tsync /usr/bin/tsync
使用tsync分发文件
root@Server1:~# ll /usr/local/tan/test/
total 16
drwxr-xr-x 2 root root 4096 8月 2 09:14 ./
drwxrwxrwx 3 root root 4096 8月 2 00:17 ../
-rw-r--r-- 1 root root 13 8月 2 09:14 demo.txt
-rw-r--r-- 1 root root 13 8月 2 09:15 test.txt
root@Server1:~# tsync /usr/local/tan/test
==================== Server2 ====================
sending incremental file list
test/
test/demo.txt
test/test.txt
sent 222 bytes received 58 bytes 186.67 bytes/sec
total size is 26 speedup is 0.09
==================== Server3 ====================
sending incremental file list
test/
test/demo.txt
test/test.txt
sent 222 bytes received 58 bytes 560.00 bytes/sec
total size is 26 speedup is 0.09
root@Server1:~# ssh Server2 ls /usr/local/tan/test/
demo.txt
test.txt
此处自定义为tcall
#!/bin/bash
# 获取控制台指令
cmd=$*
# 判断指令是否为空
if [ ! -n "$cmd" ]
then
echo "command can not be null !"
exit
fi
# 获取当前登录用户
user=`whoami`
echo "=================current host is localhost==================="
$cmd
echo -e "\n"
# 在从机执行指令,这里需要根据你具体的集群情况配置,host与具体主机名一致,同上
for (( host=2;host<=3;host++ ))
do
echo "================current host is $user@Server$host================="
echo "--> excute command \"$cmd\""
ssh $user@Server$host $cmd
echo -e "\n"
done
echo "excute successfully !"
同样需要添加执行权限和建立软连接
以Java为例,添加用户环境变量
root@Server1:~# ssh Server2 cat /root/.bashrc
export JAVA_HOME=/usr/local/mysoft/jdk8
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
......
同步执行java -version
root@Server1:~# tcall java -version
=================current host is localhost===================
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
================current host is root@Server2=================
--> excute command "java -version"
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
================current host is root@Server3=================
--> excute command "java -version"
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
excute successfully !
root@Server1:~#
Q.E.D.