sersync和ssh以及跳板机
sersync和ssh以及跳板机
sersync简介
1.什么是sersync
实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器。
2.为什么要用sersync
保证数据的连续性, 减少人力维护成本,解决nfs单点故障
nfs服务端出现故障,全部都不能用
3.怎么用sersync
sersync= inotify+rsync+守护进程
3.1、NFS实时同步到Rsync中
①上传软件包
②解压软件
③解压完移动到/usr/local
④修改配置文件/usr/local/GNU-Linux-x86/confxml.xml
--------------------------------------------------------------------------
[root@nfs ~]# confxml.xml confxml.bak #备份配置文件
[root@nfs ~]# vim /usr/local/sersync/confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host> #本机ip地址和端口
<debug start="false"/> #是否打开调试模式
<fileSystem xfs="false"/> #是否支持xfs文件系统
<filter start="false"> #是否过滤,是否排除名称中含有制定字符串的文件的同步
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
#inotify 监控的动作
<delete start="true"/> #删除动作
<createFolder start="true"/> #创建文件夹动作
<createFile start="true"/> #创建文件动作
<closeWrite start="true"/> #写入完成动作
<moveFrom start="true"/> #移动来自动作
<moveTo start="true"/> #移动到动作
<attrib start="true"/> #属性被更改
<modify start="true"/> #修改动作
</inotify>
<sersync>
<localpath watch="/data"> #监控的目录
<remote ip="172.16.1.41" name="web_data"/> #远端rsync服务器的地址和模块
</localpath>
<rsync>
<commonParams params="-az"/> #rsync的参数
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.passwd"/>
#开启认证 #虚拟用户 #指定虚拟用户的密码文件
#如果远端rsync服务不是873端口,则开启并修改
<userDefinedPort start="false" port="874"/><!-- port=874 #如果远端rsync服务不是873端口,则开启并修改
<timeout start="false" time="100"/><!-- timeout=100 --> #超时时间
<ssh start="false"/>
</rsync>
#错误日志存储路径
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> #定时任务,开启后,600分钟默认全备一次
#定时任务,开启后,600分钟默认全备一次
<crontab start="false" schedule="600"><!--600mins--> #定时任务,开启后,600分钟默认全备一次
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
<plugin name="command"> #扩展插件功能的配置举例
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
<plugin name="socket"> #扩展插件功能的配置举例
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN"> #扩展插件功能的配置举例
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
------------------------------------------------------------------------------
⑤开始实时同步(监控哪一台服务器,就部署在哪台服务器)
#记得在rsync端开启服务
nfs配置文件也要修改
3.2、rsync中也配置NFS服务端
①下载安装nfs-utils rpcbind
②设置/etc/exports
/sersync 172.16.1.0/20(rw,all_squash,sync,anonuid=996,anongid=996)
③启动systemctl start nfs-server rpcbind
④检查 showmount -e
3.3、自动故障切换
①判断是否故障写脚本
[root@web02 ~]# vim nfs-test.sh
#!/bin/bash
showmount -e 172.16.1.31
if [ $? -ne 0 ];then
# umount /var/www/html/upload
mount -t nfs 172.16.1.41:/sersync /var/www/html/upload
fi
②切换
[root@web02 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.5M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 98G 2.5G 96G 3% /
/dev/sda1 509M 162M 347M 32% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/data 98G 4.5G 94G 5% /var/www/html/upload
172.16.1.41:/sersync 98G 4.5G 94G 5% /var/www/html/upload
只能指向一个源,虽然有两个,但是指向一个 谁在最下面指向谁
实时切换加上一个定时任务
* * * * * /root/nfs-test.sh $>/dev/null
ssh服务与telnet
SSH是一个加密的网络传输协议。相同的有一个telnet协议(明文)。
-eq等于
-ne不等于
telnet和ssh之间区别
telnet是明文,而ssh是密文。 一般用ssh
安装telnet服务
1、创建一个普通用户并设置密码1
[root@m01 ~]# useradd test
[root@m01 ~]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
2、安装telnet服务
[root@m01 ~]# yum install telnet telnet-server -y
3.开启telnet服务
[root@m01 ~]# systemctl start telnet.socket
4.查看是否开启
[root@m01 ~]# netstat -nutlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1333/sshd
tcp6 0 0 :::22 :::* LISTEN 1333/sshd
tcp6 0 0 :::23 :::* LISTEN 1/systemd
udp 0 0 127.0.0.1:323 0.0.0.0:* 952/chronyd
udp6 0 0 ::1:323 :::* 952/chronyd
5、连接telnet服务(新开个窗口)
#telnet登录
[c:\~]$ telnet test@192.168.15.71
#ssh登录
[c:\~]$ ssh test@192.168.15.71
SSH服务相关的命令
1、 ssh 使用ssh登录
ssh test@192.168.15.71 [command]
ssh 命令
test 用户
@ 分隔符
192.168.15.71 连接的ip
command 需要执行的命令 比如ls ll
2、 ssh-keygen 生产密钥证书
执行这条命令会在家目录生成一个.ssh的隐藏目录
目录里有id_rsa文件和id_rsa.pub文件
id_rsa 私钥 (钥匙)
id_rsa.pub 公钥 (锁)
3、 ssh-copy-id-i
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.15.71
ssh-copy-id 将公钥复制到指定服务器的命令(可以免密登录)
-i 指定公钥
test 用户 用户名
@ 分隔符,没实际作用
192.168.15.71 连接的ip
结果会在指定的服务器/家目录/.ssh/中创建authorized_keys,并将公钥复制到authorized_keys这里 实现了免密登录
SSH的验证方式
1.密码验证
输入密码
2.密钥验证
新建一个密钥
放在~/.ssh/authorized_keys 登录选择密钥
免密登录
前提:将公钥写入需要登录服务器的~/.ssh/authorized_keys这个目录中
相关的命令 ssh-copy-id -i
所有机器全部免密登录
[root@m01 .ssh]# for i in 5 6 7 8 9 31 41 51 61 71 ;do ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.$i; done
SSH企业案例(跳板机)
1.将跳板机免密登录所有机器
[root@m01 .ssh]# for i in 5 6 7 8 9 31 41 51 61 71 ;do ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.$i; done
2.创建登录脚本
交互命令 read read -p "请输入:" aaa
ping命令
-c:指定ping的次数
-t:指定每次ping的超时时间
版本一:一进入就让选择登录的服务器
交互命令 read
[root@m01 ~]# vim login.sh
#!/bin/bash
read -p "请输入:" aaa
echo $aaa
版本二:可以多次选择登录的服务器
#!/bin/bash
while true
do
echo "5) lb01"
echo "6) lb02"
echo "7) web01"
echo "8) web02"
echo "9) web03"
echo "31) nfs"
echo "41) rsync"
echo "51) db01"
echo "61) lb01prometheus"
echo "71) m01"
read -p "请输入你要登录的服务器:" IP
ssh root@172.16.1.$IP
done
版本三:让他开机自动执行()
放在/etc/profi.d
mv login.sh /etc/profile.d/
重启
版本四:超管可以通过用户名密码的方式,重新进入跳板机系统
#!/bin/bash
while true
do
echo "5) lb01"
echo "6) lb02"
echo "7) web01"
echo "8) web02"
echo "9) web03"
echo "31) nfs"
echo "41) rsync"
echo "51) db01"
echo "61) lb01prometheus"
echo "71) m01"
read -p "请输入你要登录的服务器:" IP
if [[ $IP = "m" ]];then # 空格记得左右都有 [[]]不知道为啥有俩
read -p "请输入用户名:" USER
read -p "请输入密码:" PASSWD
if [[ $USER = "zhang" && $PASSWD = "123" ]];then # 空格记得左右都有[[]]不知道为啥有俩
break
fi
fi
ssh root@172.16.1.$IP
done
版本五:解决登录IP不存在的问题
#!/bin/bash
while true
do
echo "5) lb01"
echo "6) lb02"
echo "7) web01"
echo "8) web02"
echo "9) web03"
echo "31) nfs"
echo "41) rsync"
echo "51) db01"
echo "61) lb01prometheus"
echo "71) m01"
read -p "请输入你要登录的服务器:" IP
if [[ $IP = "m" ]];then
read -p "请输入用户名:" USER
read -p "请输入密码:" PASSWD
if [[ $USER = "zhang" && $PASSWD = "123" ]];then
break
fi
fi
ping -c 1 -t 1 172.16.1.$IP &>/dev/null #先ping一次试试结果放在/dev/null
#0成功 非0失败
#判断$? 不等于0 执行下面的 -ne不等于 -eq等于
if [ $? -ne 0 ];then
echo "你输入的$IP 错误"
continue
fi
done
版本六:完善使用ctrl+c进不去
SSH + VPN