# 图片回复
# 图片回复
哈喽的
可可爱爱
上次
让对方而 而非而非
看看卡
大师傅
谢谢分享
# 图片回复
能用吗
能不能用?
感谢博主分享
Southerly 个人博客 || https://www.southerly.top || https://www.southerly.top/imgs/favicon.ico || 一个正在努力搬砖的程序员,记录生活,分享生活,欢迎大家来访。已添加贵站
首页
网站统计
关于本站
在线留言
友链申请
高清壁纸
论坛
开往
虫洞
推荐
Linux命令
资源网
Search
1
京东呆瓜搭建青龙面板+xdd-plus机器人+nvjdc配置
3,522 阅读
2
Typecho Cuteen主题美化
3,019 阅读
3
傻妞机器人最新版安装教程
2,637 阅读
4
Joe 主题 6.xx 底部增强,显示标签及二维码分享
2,455 阅读
5
好久不见之网站底部样式
2,125 阅读
Linux
Shell
Mysql
Typecho
网络
其他
Redis
登录
Search
标签搜索
Linux
Typecho
美化
Nginx
Shell
综合架构
Mysql
Joe
源码
Web
数据备份
命令
Ansible
k8s
定时任务
视频
网易云
白嫖
网络
Rsync
小黑
累计撰写
156
篇文章
累计收到
879
条评论
博主
2天前
在线
首页
栏目
Linux
Shell
Mysql
Typecho
网络
其他
Redis
页面
网站统计
关于本站
在线留言
友链申请
高清壁纸
推荐
Linux命令
资源网
开往
搜索到
9
篇与
综合架构
的结果
2021-02-25
Ansible
Ansible部署实验环境准备实验机4台,1台为ansible管理主机,3为被管理主机管理主机名称与IP地址:ansible-server,IP地址:192.168.0.24被管理主机名称与IP地址: web1,IP地址:192.168.0.26web1,IP地址:192.168.0.27 web2,IP地址:192.168.0.28关闭防火墙与SElinux[root@ansible-server ~]# systemctl stop firewalld [root@ansible-server ~]# systemctl disable firewalld [root@ansible-server ~]# setenforce 0 [root@ansible-server ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config管理节点修改/etc/hosts文件实现本地解析[root@ansible-server ~]# vim /etc/hosts ... 192.168.0.26 web1 192.168.0.27 web2 192.168.0.28 web3管理节点与被管理节点实现SSH密钥认证[root@ansible-server ~]# ssh-keygen传递公钥到被管理节点[root@ansible-server ~]# for i in web1 web2 web3 > do > ssh-copy-id $i > done验证SSH免密登录[root@ansible-server ~]# ssh web1 [root@web1 ~]# exit [root@ansible-server ~]# ssh web2 [root@web2 ~]# exit [root@ansible-server ~]# ssh web3 [root@web3 ~]# exit安装Ansible软件包安装ansible软件包,由于ansible需要epel源,本实验配置了阿里的epel源和阿里的Base源(Base源用于安装ansible所需依赖),本地的CentOS7镜像源[root@ansible-server ~]# yum -y install wget #下载wget工具 [root@ansible-server ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo #下载阿里Base源 [root@ansible-server ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #下载阿里epel源安装ansible软件包[root@ansible-server ~]# yum -y install ansible查看ansible版本信息[root@ansible-server ~]# ansible --version ansible 2.9.17定义Ansible主机清单ansible主配置文件:/etc/ansible/ansible.cfgansible默认清单文件:/etc/ansible/hosts编辑清单文件定义主机组[root@ansible-server ~]# vim /etc/ansible/hosts [websrvs] 192.168.0.26 192.168.0.27 192.168.0.28列出指定组内主机列表[root@ansible-server ~]# ansible websrvs --list-host hosts (4): 192.168.0.26 192.168.0.27 192.168.0.28ansible-doc命令介绍:ansible-doc #模块文档命令常用选项:-l #列出所有模块列表-s #查看模块帮助信息列出模块列表[root@ansible-server ~]# ansible-doc -l显示ping模块帮助信息[root@ansible-server ~]# ansible-doc -s ping使用ping模块测试websrvs组主机连通性[root@ansible-server ~]# ansible websrvs -m pingAnsible命令返回值的颜色表示:绿色:代表对远程节点不进行相应修改,没有发生改变,命令执行成功了黄色:代表对远程节点进行了相应的修改,命令执行成功了红色:代表你的命令执行失败或者是有异常,反正就是错误了粉色:代表命令执行后发出的警告信息,给我们一些建议(可以忽略)Ansible执行命令的方式ad-doc:在命令行执行的命令(临时命令)Playbook:将命令写入到Playbook剧本中Ansible命令格式介绍常用命令格式:ansible 组名/主机 [-m 模块名] [-a 模块参数]Ansible常用模块介绍command 模块command模块为默认模块,用于远程执行命令(命令模块)注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处理,在使用command模块时,如果需要执行的命令中含比如”<“, “>”, “|”, “;” 和 “&” 这些符号时,这些符号的功能也会失效常用参数:chdir:此参数表示执行命令之前,会先进入到指定的目录中creates: 此参数表示文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行removes:此参数表示文件如果不存在于远程主机中,则不执行对应命令,如果存在 ,才执行command模块示例:#chdir参数表示执行命令之前,会先进入到指定的目录中 [root@ansible-server ~]# ansible websrvs -m command -a 'chdir=/root/ ls' #creates参数表示如果/etc/passwd文件存在于远程主机中,则不执行对应命令,如果不存在,才执行”touch”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'creates=/etc/passwd touch /opt/passwd' #演示:creates参数在文件不存在情况下才会执行“touch”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'creates=/opt/passwd touch /opt/passwd' #removes参数表示如果/opt/abc文件不存在,就不执行“mv”命令,如果文件存在则执行“mv”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'removes=/opt/abc mv /opt/abc /root/' #演示:removes参数如果/opt/passwd文件不存在,就不执行“mv”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'removes=/opt/passwd mv /opt/passwd /root/' [root@ansible-server ~]# ansible websrvs -m command -a 'hostname' [root@ansible-server ~]# ansible websrvs -m command -a 'ip a s ens32' [root@ansible-server ~]# ansible websrvs -a 'uname -r' #查看内核信息 [root@ansible-server ~]# ansible websrvs -a 'free -h' #查看内存信息shell 模块shell 模块,远程执行命令模块,和command模块类似,区别在于shell模块通过/bin/bash程序处理命令常用参数cmd:此参数指定用于执行的命令(用于在Playbook剧本中)chdir:此参数表示执行命令之前,会先进入到指定的目录中creates: 此参数表示文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行removes:此参数表示文件如果不存在于远程主机中,则不执行对应命令,如果存在 ,才执行提示: shell模块中chdir、creates、removes参数的作用与command模块中的作用都是相同的,此处不再举例shell 模块示例:#查看/etc/passwd文件,并通过管道符传递给“wc -l”统计文件行数 [root@ansible-server ~]# ansible websrvs -m shell -a 'cat /etc/passwd | wc -l' #查看/etc/passwd文件,并通过“>”将文件内容重定向至/opt/passwd文件中 [root@ansible-server ~]# ansible websrvs -m shell -a 'cat /etc/passwd > /opt/passwd' #通过chdir参数进入/opt/目录,执行“ls” [root@ansible-server ~]# ansible websrvs -m shell -a 'chdir=/opt/ ls' #通过chdir参数进入/opt目录,执行“cat”查看passwd文件内容 [root@ansible-server ~]# ansible websrvs -m shell -a 'chdir=/opt/ cat passwd' #查看主机名 [root@ansible-server ~]# ansible websrvs -m shell -a 'hostname' #查看内核信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'uname -r' #查看ens32网卡的IP地址信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'ip a s ens32 | grep inet' #查看内存使用信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'free -h' #查看分区使用信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'df -h' #关闭防火墙&&设置开机不自起 [root@ansible-server ~]# ansible websrvs -m shell -a 'systemctl stop firewalld && systemctl disable firewalld'企业常见面试题1.Ansible是什么?2.Ansible的特点是什么?3.Ansible核心组件都有哪些?4.Ansible基于什么协议管理被控节点?5.在Ansible清单文件中,定义被控主机的方式有哪些?6.如何查看Ansible模块的用法?7.在Ansible的命令返回值中,绿色代表什么含义?8.在Ansible的命令返回值中,黄色代表什么含义?9.在Ansible的命令返回值中,红色代表什么含义?10.Ansible执行命令的方式有哪些?script 模块script 模块用于远程执行脚本,脚本存放在ansible主机本地,不需要拷贝到远程主机常用参数:chdir:此参数表示执行命令之前,会先进入到指定的目录中creates: 此参数表示文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行命令removes:此参数表示文件如果不存在于远程主机中,则不执行对应命令,如果存在 ,才执行命令提示: shell模块中chdir、creates、removes参数的作用与command模块中的作用都是相同的,此处不再举例script模块示例:1.mkdri /mnt/centos 2.mount /dev/cdrom /mnt/centos 3.rm -rf /etc/yum.repos.d/* 4.vim /etc/yum.repos.d/local.repo [local_file] name=loal_file baseurl=fiel:///mnt/centos enabled=1 gpgcheck=0 #编写搭建yum仓库脚本 [root@ansible-server ~]# vim yum.sh #!/bin/bash mkdir /mnt/centos mount /dev/cdrom /mnt/centos echo "/dev/cdrom /mnt/centos iso9660 defaults 0 0" >> /etc/fstab rm -rf /etc/yum.repos.d/* echo "[local_centos7] name=local_centos7 baseurl=file:///mnt/centos enabled=1 gpgcheck=0" > /etc/yum.repos.d/centos.repo yum repolist #使用script模块执行此脚本 [root@ansible-server ~]# ansible websrvs -m script -a '/root/yum.sh'yum 模yum 模块,用于在远程主机通过yum源管理软件包常用参数:name:必须参数,用于指定需要管理的软件包名字state:用于指定软件包的状态present:此状态为默认值,表示安装软件包installed:此状态表示安装软件包,与present等效latest:此状态表示安装yum中最新版本软件包removed:此状态表示删除对应软件包absent:此状态表示删除对应软件包,与removed等效yum模块示例:#使用yum模块安装vsftpd软件包(本地yum源默认已经禁用软件包检测) [root@ansible-server ~]# ansible websrvs -m yum -a 'name=vsftpd' #卸载vsftpd软件包 [root@ansible-server ~]# ansible websrvs -m yum -a 'name=vsftpd state=removed' #ftp组内主机安装vsftpd服务 [root@ansible-server ~]# ansible websrvs -m yum -a 'name=vsftpd'service 模块service 模块,用于管理远程主机的服务,如:启动或停止服务常用参数:name:此参数用于指定需要操作的服务名称,如 vsftpdstate: 此参数用于指定服务的状态started:此状态用于启动服务#启动vsftpd服务 [root@ansible-server ~]# ansible websrvs -m service -a 'name=vsftpd state=started' #查看服务状态 [root@ansible-server ~]# ansible websrvs -m shell -a 'systemctl status vsftpd'- restarted:此状态用于重启服务 #重启服务 [root@ansible-server ~]# ansible ftp -m service -a 'name=vsftpd state=restarted'- stopped:此状态用于停止服务 #停止vsftpd服务 [root@ansible-server ~]# ansible ftp -m service -a 'name=vsftpd state=stopped'enabled:此参数 用于指定是否将服务设置为开机启动项,设置为yes表示将对应服务设置为开机启动,设置为no表示不会开机启动。#启动服务并设置服务随机自启 [root@ansible-server ~]# ansible ftp -m service -a 'name=vsftpd state=started enabled=yes'copy 模块copy 模块,用于将文件复制到远程主机常用参数:src:此参数用于指定需要拷贝的文件或目录dest:此参数用于指定文件将拷贝到远程主机的哪个目录中,dest为必须参数#在ansible本地主机创建文件 [root@ansible-server ~]# touch /tmp/test.txt #将本地/tmp/test.txt文件拷贝至ftp组内主机的/var/ftp目录下 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/tmp/test.txt dest=/var/ftp/' [root@ansible-server ~]# ansible ftp -m shell -a 'ls /var/ftp' content:此参数当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错#使用content参数在远程主机直接创建文件并写入内容 [root@ansible-server ~]# ansible ftp -m copy -a 'content="hello" dest=/var/ftp/test1' #查看远程主机文件内容 [root@ansible-server ~]# ansible ftp -a 'cat /var/ftp/test1'force:此参数当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变#本地创建test1文件,并写入abc [root@ansible-server ~]# echo abc > test1 [root@ansible-server ~]# cat test1 #使用force参数指定当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,不执行覆盖 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/tmp/test1 dest=/var/ftp/test1 force=no' 192.168.0.25 | SUCCESS => { "changed": falsebackup:此参数当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机#使用backup参数指定当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,对远程主机文件先进行备份 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test1 dest=/var/ftp backup=yes' #查看远程主机信息 [root@ansible-server ~]# ansible ftp -a 'ls /var/ftp' ... test1 test1.12778.2021-03-16@00:57:26~ #备份后文件owner:此参数指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。#创建文件 [root@ansible-server ~]# touch test2 #拷贝test2文件到远程主机,并指定属主为ftp用户 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test2 dest=/var/ftp/ owner=ftp' #查看文件详细属性信息 [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test2' 192.168.0.29 | CHANGED | rc=0 >> -rw-r--r--. 1 ftp root 6 3月 16 01:07 /var/ftp/test2 #可以看到文件的属主以变成ftp用户group:此参数指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错#创建test3文件 [root@ansible-server ~]# touch test3 #拷贝test3文件到远程主机,并指定属主为ftp用户,所属组为ftp用户基本组 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test3 dest=/var/ftp/ owner=ftp group=ftp' #查看文件详细属性信息 [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test3' 192.168.0.29 | CHANGED | rc=0 >> -rw-r--r--. 1 ftp ftp 0 3月 16 01:16 /var/ftp/test3mode:此参数指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r–r–“,则可以使用mode=0644表示#拷贝test4文件到远程主机,并指定属主为ftp用户,所属组为ftp用户基本组,并指定权限为0744 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test4 dest=/var/ftp/ owner=ftp group=ftp mode=0744' #查看文件详细属性信息 [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test4' #如果后期需要修改权限可以使用shell模块修改 [root@ansible-server ~]# ansible ftp -m shell -a 'chmod 755 /var/ftp/test4' [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test4' 192.168.0.29 | CHANGED | rc=0 >> -rwxr-xr-x. 1 ftp ftp 0 3月 16 01:23 /var/ftp/test4 #可以看到,权限已被修改成功Ansible剧本PlaybookAnsible playbook剧本介绍在ansible中,类似”脚本”的文件被称作”剧本”,英文名称为’playbook’ ,用于配置,部署,和管理被控节点我们只需要把模块按照顺序编排在playbook剧本中,ansible就会按照剧本一步一步的执行,最终达到我们的目的playbook是由一个或多个”play”组成的列表,当我们在工作中往往需要不止做一件事情的时候,使用playbook会更加适合。playbook 与ad-hoc相比是一种完全不同的运用方式,剧本需要遵循YAML语法格式编写,文件名以”.yaml”或者”.yml”作为文件名后缀playbook核心元素hosts:执行的远程主机列表’tasks:任务集variables:内置变量或自定义变量在playbook中调用tempaltes 模板,可替换文件中的变量并实现一些简单逻辑的文件handles 和notify结合使用,由特定条件触发的操作,满足条件方执行,否则不执行tags标签,指定某条任务执行,用于选择运行playbook中的部分代码。编写第一个Playbook剧本#使用ping模块测试远程主机联通性,并在远程主机创建目录 [root@ansible-server ~]# vim ping_websrvs.yml --- - hosts: websrvs remote_user: root tasks: - name: ping websrvs ping: - name: mkdir directory test shell: cmd: mkdir /test #第一行:playbook剧本以---开头表明yaml格式文件 #第二行:使用”- “作为开头,”- “表示一个列表项,”- “后面使用hosts关键字指定要操作的主机组名,(注意:横杠后面有空格)表示我要在websrvs这组主机上进行操作,在YAML语法中,键值对需要使用冒号作为分隔,而且冒号后边必须还要有一个空格作为分隔 #第三行:remote_user关键字可以指定在进行远程操作时使用哪个用户进行操作 #第四行:tasks关键字是用来指定要执行哪些操作任务,之后的行都属于tasks任务列表中的任务,每个任务都以”- “开头,每个任务都有自己的名字,任务名使用name关键字进行指定 #运行剧本需要使用’ansible-playbook’命令 [root@ansible-server ~]# ansible-playbook ping_websrvs.yml TASK [Gathering Facts] **************************************************************** ok: [192.168.0.28] ok: [192.168.0.27] ok: [192.168.0.26] TASK [ping websrvs] **************************************************************** ok: [192.168.0.26] ok: [192.168.0.27] ok: [192.168.0.28] TASK [mkdir directory test] **************************************************************** changed: [192.168.0.28] changed: [192.168.0.26] changed: [192.168.0.27] PLAY RECAP ****************************************************************** 192.168.0.26 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.27 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.28 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 Playbook源码部署Nginx的Web服务[root@ansible-server ~]# vim nginx.yml --- - hosts: websrvs remote_user: root tasks: - name: Copy nginx copy: src=/root/nginx-1.18.0.tar.gz dest=/tmp - name: install Rely yum: name=gcc,pcre-devel,openssl-devel,zlib - name: unpacek nginx shell: tar -xf /tmp/nginx-1.18.0.tar.gz -C /tmp - name: install nginx shell: cd /tmp/nginx-1.18.0 && ./configure && make && make install - name: Copy index.html copy: src=/root/index.html dest=/usr/local/nginx/html - name: start nginx shell: /usr/local/nginx/sbin/nginx #--syntax-check 用于检测playbook语法是否正确,如果正确只返回playbook名称 [root@ansible-server ~]# ansible-playbook --syntax-check nginx.yml playbook: nginx.yml #--check 用于模拟执行playbook [root@ansible-server ~]# ansible-playbook --check nginx.yml PLAY [websrvs] **************************************************** TASK [Gathering Facts] ******************************************************************* ok: [192.168.0.28] ok: [192.168.0.26] ok: [192.168.0.27] TASK [Copy nginx] ************************************************* ok: [192.168.0.28] ok: [192.168.0.27] ok: [192.168.0.26] TASK [install Rely] *********************************************** ok: [192.168.0.26] ok: [192.168.0.27] ok: [192.168.0.28] TASK [unpacek nginx] ********************************************** skipping: [192.168.0.26] skipping: [192.168.0.28] skipping: [192.168.0.27] TASK [install nginx] ****************************************************************** skipping: [192.168.0.26] skipping: [192.168.0.27] skipping: [192.168.0.28] TASK [Copy index.html] ****************************************************************** ok: [192.168.0.27] ok: [192.168.0.26] ok: [192.168.0.28] TASK [start nginx] ****************************************************************** skipping: [192.168.0.26] skipping: [192.168.0.27] skipping: [192.168.0.28] PLAY RECAP ****************************************************************** 192.168.0.26 : ok=4 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 192.168.0.27 : ok=4 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 192.168.0.28 : ok=4 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 #使用playbook剧本批量在远程主机源码安装nginx [root@ansible-server ~]# ansible-playbook nginx.yml PLAY [websrvs] ****************************************************************** TASK [Gathering Facts] ****************************************************************** ok: [192.168.0.28] ok: [192.168.0.27] ok: [192.168.0.26] TASK [Copy nginx] ****************************************************************** changed: [192.168.0.28] changed: [192.168.0.27] changed: [192.168.0.26] TASK [install Rely] ****************************************************************** ok: [192.168.0.26] ok: [192.168.0.27] ok: [192.168.0.28] TASK [unpacek nginx] ****************************************************************** changed: [192.168.0.28] changed: [192.168.0.26] changed: [192.168.0.27] TASK [install nginx] ******************************************************************* changed: [192.168.0.26] changed: [192.168.0.28] changed: [192.168.0.27] TASK [Copy index.html] ******************************************************************* changed: [192.168.0.27] changed: [192.168.0.28] changed: [192.168.0.26] TASK [start nginx] ******************************************************************** changed: [192.168.0.27] changed: [192.168.0.28] changed: [192.168.0.26] PLAY RECAP ******************************************************************** 192.168.0.26 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.27 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.28 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2021年02月25日
280 阅读
0 评论
0 点赞
2021-02-24
LINUX运维学习之综合架构篇——Ansible 批量管理服务(中)
1、ansible模块说明:yum模块 name --- 指定安装软件名称 state --- 指定是否安装软件 installed --- 安装软件 present latest absent --- 卸载软件 removed使用方法 ansible 172.16.1.31 -m yum -a "name=iotop state=installed" service模块: 管理服务器的运行状态 停止 开启 重启name: --- 指定管理的服务名称state: --- 指定服务状态started 启动restarted 重启stopped 停止enabled --- 指定服务是否开机自启动ansible 172.16.1.31 -m service -a "name=nfs state=started enabled=yes"cron模块: 批量设置多个主机的定时任务信息 crontab -e * * * * * 定时任务动作 分 时 日 月 周 minute: # Minute when the job should run ( 0-59, *, */2, etc ) 设置分钟信息 hour: # Hour when the job should run ( 0-23, *, */2, etc ) 设置小时信息 day: # Day of the month the job should run ( 1-31, *, */2, etc ) 设置日期信息 month: # Month of the year the job should run ( 1-12, *, */2, etc ) 设置月份信息 weekday: # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc ) 设置周信息 job 用于定义定时任务需要干的事情基本用法: ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'" 基本用法:ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'" 扩展用法:给定时任务设置注释信息 ansible 172.16.1.31 -m cron -a "name='time sync' minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"如何删除指定定时任务 ansible 172.16.1.31 -m cron -a "name='time sync01' state=absent"PS: ansible可以删除的定时任务,只能是ansible设置好的定时任务如何批量注释定时任务ansible 172.16.1.31 -m cron -a "name='time sync' job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' disabled=yes"mount: 批量进行挂载操作src: 需要挂载的存储设备或文件信息path: 指定目标挂载点目录fstype: 指定挂载时的文件系统类型statepresent/mounted --- 进行挂载present: 不会实现立即挂载,修改fstab文件,实现开机自动挂载mounted: 会实现立即挂载, 并且会修改fstab文件,实现开机自动挂载 absent/unmounted --- 进行卸载absent: 会实现立即卸载, 并且会删除fstab文件信息,禁止开机自动挂载unmounted: 会实现立即卸载, 但是不会会删除fstab文件信息 user模块: 实现批量创建用户基本用法: ansible 172.16.1.31 -m user -a "name=oldboy01"扩展用法:1) 指定用户uid信息 ansible 172.16.1.31 -m user -a "name=oldboy02 uid=6666"2) 指定用户组信息 ansible 172.16.1.31 -m user -a "name=oldboy03 group=oldboy02" ansible 172.16.1.31 -m user -a "name=oldboy04 groups=oldboy02"3) 批量创建虚拟用户 ansible 172.16.1.31 -m user -a "name=rsync create_home=no shell=/sbin/nologin"4) 给指定用户创建密码PS: 利用ansible程序user模块设置用户密码信息,需要将密码明文信息转换为密文信息进行设置生成密文密码信息方法:方法一: ansible all -i localhost, -m debug -a "msg={{ '密码信息123456' | password_hash('sha512', 'oldboy') }}" ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512', 'oldboy') }}" 方法二:(忽略) mkpasswd --method=sha-512 方法三: yum install -y python-pip pip install passlib python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))" ansible 172.16.1.31 -m user -a 'name=oldboy08 剧本的编写方法剧本的作用:可以一键化完成多个任务自动化部署rsync服务:服务端:1、安装软件(备份服务器) ansible 172.16.1.41 -m yum -a "name=rsync state=install"2、编写文件:(把配置好的文件传送到服务器) ansible 172.16.1.41 -m copy -a "src=/xxx/rsyncd.conf dest=/etc/" 3、创建用户 ansible 172.16.1.41 -m user -a "name=rsync create_home=no shell=/sbin/nologin"4、创建目录 ansible 172.16.1.41 -m file -a "dest=/backup state=directory owen=rsync group=rsync"5、创建密码文件 ansible 172.16.1.41 -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"6、启动服务 ansible 172.16.1.41 -m service -a "name=rsyncd state=started enabled=yes"客户端操作:1、创建密码文件ansible 客户端地址 -m copy -a "content='rsync_backup:123' dest=/etc/rsync.password mode=600"剧本编写规范: pyyaml -- 三点要求 1. 合理的信息缩进 两个空格表示一个缩进关系 标题一 标题二 标题三 PS: 在ansible中一定不能用tab进行缩进 2. 冒号的使用方法 hosts: 172.16.1.41 tasks: yum: name=xxPS: 使用冒号时后面要有空格信息 以冒号结尾,冒号信息出现在注释说明中,后面不需要加上空格 4. 短横线应用 -(列表功能) PS: 使用短横线构成列表信息,短横线后面需要有空格 开始编写脚本 mkdir /etc/ansible/ansible-playbook vim rsync_server.yaml说明: 剧本文件扩展名尽量写为yaml 1. 方便识别文件是一个剧本文件 2. 文件编写时会有颜色提示 - hosts: 172.16.1.41 tasks: - name: 01-install rsync yum: name=rsync state=installed - name: 02-push conf file copy: src=/tmp/rsyncd.conf dest=/etc/ 如何执行剧本:第一个步骤: 检查剧本的语法格式 ansible-playbook --syntax-check rsync_server.yaml第二个步骤: 模拟执行剧本 ansible-playbook -C rsync_server.yaml第三个步骤: 直接执行剧本 ansible-playbook rsync_server.yaml
2021年02月24日
164 阅读
0 评论
0 点赞
2021-02-23
LINUX运维学习之综合架构篇——Ansible 批量管理服务上
1、什么是ansibleansible 是一个基于Python开发的自动化运维工具其功能实现基于SSH远程连接服务ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能ansible官方网站:https://docs.ansible.com/2、ansible 的特点列表项目不需要安装客户端。基于系统自带的sshd服务不需要服务端需要依靠大量的模块实现批量管理功能配置文件/etc/ansible/ansible.cfg3、ansible 批量管理服务意义提高工作效率提高工作准确度减少维护的成本减少重复性工作4、ansible 批量管理服务功能可以实现批量系统操作配置可以实现批量软件服务部署可以实现批量文件数据分发可以实现批量系统信息收集常用模块模块说明command执行命令模块,ansible命令执行默认模块shell执行shell脚本模块script把脚本发到客户端,然后执行,执行脚本命令在远端服务器上copy把文件发送到远端file设定文件属性模块service系统服务管理模块cron定时任务管理模块yumyum软件包安装管理模块synchronize使用rsync同步文件模块5、ansible 批量管理服务部署管理端服务器1、安装部署软件 yum install -y ansible2、需编写主机清单文件vim /etc/ansible/hosts添加需要管理的主机的IP地址定义可以管理的主机的信息 172.16.1.31 172.16.1.41 172.16.1.73、测试是否可以管理多个主机,由于我没开1.7 的主机会报个错,影响不大 ansible all -a "hostname"6、ansible服务架构信息1、主机清单配置 2、 软件模块信息 3、 基于秘钥连接主机 4、 主机需要关闭selinux 5、 软件剧本功能7、ansible 软件模块应用ansible官方网站:https://docs.ansible.com/模块的应用语法格式:ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"命令类型模块:command – Executes a command on a remote node在一个远程主机上执行一个命令 ansible 172.16.1.31 -m command -a "hostname"拓展应用:1、chdir Change into this directory before running the command.在执行命令之前对目录进行切换 ansible 172.16.1.31 -m coomand -a "chdir=/tmp touch test.txt"如果不加chdir=/tmp,默认在/root下创建2、creates If it already exists, this step won’t be run.若是文件存在了,不执行命令操作 ansible 172.16.1.31 -m command -a "creates=/tmp/hosts chdir=/tmp touch test.txt"3、removes If it already exists, this step will be run.若是文件存在,这个步骤将执行 ansible 172.16.1.31 -m command -a “removes=/tmp/hosts chdir=/tmp touch oldboy.txt”4、free_form(required)The command module takes a free form command to run. There is no parameter actually named ‘free form’. See the examples!使用command模块的时候,-a参数后面必须写上一个合法linux命令信息注意事项:有些符号信息无法识别: <", ">", "|", ";" and "&"7、第二个模块:shell (万能模块)shell – Execute commands in nodes在节点上执行操作用法: ansible 172.16.1.31 -m shell -a "hostname" ansible 172.16.1.31 -m shell -a "cd /tmp;pwd"实践应用: 利用shell执行脚本 第一个步骤: 编写一个脚本 vim /server/scripts/yum.sh #!/bin/bash yum install -y htop第二个步骤: 将脚本发送到远程主机 scp -rp yum.sh 172.16.1.31:/server/scripts第三个步骤: 将脚本权限进行修改(添加执行权限) ansible 172.16.1.31 -m shell -a "chmod +x /server/scripts/yum.sh"第四个步骤: 运行ansible命令执行脚本 ansible 172.16.1.31 -m shell -a "/server/scripts/yum.sh"rpm -e htop --nodeps 卸载软件8、script (万能模块)第一个步骤: 编写一个脚本第二个步骤: 运行ansible命令执行脚本 ansible 172.16.1.31 -m scripts -a "/server/scripts/yum.sh"PS: scripts模块参数功能和command模块类似9、文件类型模块:copy – Copies files to remote locations将数据信息进行批量分发基本用法: ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root" 172.16.1.31 | CHANGED => { --- 对哪台主机进行操作 "changed": true, --- 是否对主机信息进行改变 "checksum": "6ed7f68a1d6b4b36c1418338b2001e421eeba270", --- 生成一个文件校验码==MD5数值 "dest": "/etc/hosts", --- 显示目标路径信息 "gid": 0, --- 显示复制后文件gid信息 "group": "root", --- 显示复制后文件属组信息 "md5sum": "7afd7b74854f0aaab646b3e932f427c0", --- 生成一个文件校验码==MD5数值 "mode": "0644", --- 显示复制后文件权限信息 "owner": "root", --- 显示复制后文件属主信息 "size": 401, --- 显示文件的大小信息 "src": "/root/.ansible/tmp/ansible-tmp-1557804498.23-26487341925325/source", "state": "file", --- 显示文件的类型信息 "uid": 0 --- 显示复制后文件uid信息 }补充说明: ansible软件输出颜色说明:绿色信息: 查看主机信息/对主机未做改动黄色信息: 对主机数据信息做了修改红色信息: 命令执行出错了粉色信息: 忠告信息蓝色信息: 显示ansible命令执行的过程拓展应用:在传输文件是修改文件是属主和属组信息 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root owner=oldboy group=oldboy"在传输文件时修改文件的权限信息 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root/ mode=1777"在传输数据文件信息时对远程主机源文件进行备份ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root/ backup=yes"创建一个文件并直接编辑文件的信息 ansible 172.16.1.31 -m copy -a "content='oldboy123' dest=/etc/hosts"remote_src If no, it will search for src at originating/master machine.src参数指定文件信息,会在本地管理端服务进行查找If yes it will go to the remote/target machine for the src. Default is no.src参数指定文件信息,会从远程主机上进行查找 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root"这个命令会把远程管理端的hosts文件传输到服务端 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root remote_src=yes"这个命令会把远程服务端的hosts文件移动到/root目录PS: ansible软件copy模块复制目录信息 ansible 172.16.1.31 -m copy -a "src=/oldboy dest=/oldboy" src后面目录没有/: 将目录本身以及目录下面的内容都进行远程传输复制 ansible 172.16.1.31 -m copy -a "src=/oldboy/ dest=/oldboy" src后面目录有/: 只将目录下面的内容都进行远程传输复制10、file – Sets attributes of files设置文件属性信息基本用法: ansible 172.16.1.31 -m file -a "dest=/etc/hosts owner=oldboy group=oldboy mode=666"扩展用法:1、可以利用模块创建数据信息 (文件 目录 链接文件) state 参数 =absent --- 缺席/删除数据信息 =directory --- 创建一个目录信息 =file --- 检查创建的数据信息是否存在 绿色存在 红色不存在 =hard --- 创建一个硬链接文件 =link --- 创建一个软链接文件 =touch --- 创建一个文件信息创建目录信息: ansible 172.16.1.31 -m file -a "dest=/oldboy/ state=directory" ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy01/oldboy02/ state=directory"创建文件信息: ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy.txt state=touch"创建链接文件信息:软链接: ansible 172.16.1.31 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_hard.txt state=hard"硬链接: ansible 172.16.1.31 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_link.txt state=link"2、 可以利用模块删除数据信息 ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy.txt state=absent" ansible 172.16.1.31 -m file -a "dest=/oldboy/ state=absent"
2021年02月23日
141 阅读
0 评论
0 点赞
2021-02-01
LINUX运维学习之综合架构篇——综合架构远程管理服务(SSH)
1、远程管理服务概念SSH是一个安全的远程连接,它的数据信息是加密的,端口号为22,SSH服务默认可以为root用户连接。TELNET是一个不安全的远程连接,它的数据信息为明文,端口号为23,默认不可以用root用户连接。2、SSH服务连接工作原理(数据加密)(1)客户端 执行远程连接命令(2)客户端 服务端 建立三次握手过程(3)服务端 让客户端进行确认是否接收服务端公钥信息(4)客户端 进行公钥确认,接收公钥信息(5)服务端 让客户端确认登录用户密码信息(6)客户端 进行密码信息确认(7)客户端 服务器 远程连接建立成功3、私钥和公钥的作用:利用私钥和公钥对数据信息进行加密处理利用公钥和私钥进行用户身份认证基于密码的方式进行远程连接: 公钥和私钥只能完成数据加密过程基于秘钥的方式进行远程连接: 公钥和私钥可以完成身份认证工作4、SSH远程连接方式基于口令的方式进行远程连接,连接比较麻烦 不太安全基于密钥的方式进行远程连接,连接方便 比较安全基于秘钥方式连接过程(原理)客户端(管理端) 执行命令创建秘钥对客户端(管理端) 建立远程连接(口令),发送公钥信息客户端(管理端) 再次建立远程连接服务端(被管理端) 发送公钥质询信息客户端(管理端) 处理公钥质询信息,将质询结果返回给服务端服务端(被管理端) 接收到质询结果,建立好远程连接5、SSH实现基于密钥连接的部署步骤(1)创建一个密钥对信息 ssh-keygen -t dsa(2)管理端需要将公钥进行分发 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.31(3)远程测试 ssh root@172.16.1.31 hostname ssh 172.16.1.316、如何不用交互输入密码信息(1)安装软件 yum install -y sshpass(2)执行免交互式分发公钥信息 sshpass -p 123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41(3)如何不要输入连接yes或no的确认信息 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 "-o StrictHostKeyChecking=no"(4)服务端口号发生变化 sshpass -p 123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 "-o StrictHostKeyChecking=no"7、分发公钥脚本 vim fenfa_pub_key.sh #!/bin/bash for ip in {7,31,41} do echo "================= host 172.16.1.$ip pub-key start fenfa =======" sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.$ip "-o StrictHostKeyChecking-no" &>/dev/null echo "host 172.16.1.$ip fenfa success" echo "================= host 172.16.1.$ip fenfa end ===================" echo "" done8、SSH服务配置文件 /etc/ssh/sshd_config Port 22 --- 修改服务端口信息 ListenAddress 0.0.0.0 --- 监听地址 指定一块网卡能够接受远程访问请求 PS: 指定监听地址只能是本地网卡上有的地址 PermitEmptyPasswords no --- 是否允许远程用户使用空密码登录,默认不允许 PermitRootLogin yes --- 是否禁止root用户远程连接主机 建议改为no GSSAPIAuthentication no --- 是否开启GSSAPI认证功能 不用的时候关闭 UseDNS no --- 是否开启反向DNS解析功能 建议进行关闭9、SSH远程服务防范入侵的案例1、用密钥登录,不用密码登陆2、牤牛阵法:解决SSH安全问题 a.防火墙封闭SSH,指定源IP限制(局域网、信任公网) b.开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)。3、尽量不给服务器外网IP4、最小化(软件安装-授权)5、给系统的重要文件或命令做一个指纹 /etc/passwd md5sum 11110000aaaabbbb 监控 inotify /bin 监控6、给他锁上 chattr +iPS:SSH相关的命令总结 ssh-keygen ssh-copy-id sshpass ssh scp sftp 172.16.1.41 ls 查看远程ftp服务器信息 cd --- 查看远程ftp服务器信息 lls 查看本地ftp客户端信息 lcd --- 查看本地ftp客户端信息 get --- 下载信息 put --- 上传信息 help --- 查看命令帮助 bye --- 退出ftp连接
2021年02月01日
127 阅读
0 评论
0 点赞
2021-01-25
LINUX运维学习之综合架构篇——综合架构实时同步服务
1、实时同步服务原理/概念1)需要部署好rsync守护进程服务,实现数据传输2)需要部署好inotify服务,实现目录中数据变化监控3)将rsync服务和inotify服务建立联系,将变化的数据进行实时备份传输2、实时同步服务部署1)部署rsync守护进程(之前已配置过:点击送达)服务器端配置操作客户端配置操作2)配置inotify监控服务a、安装软件(在备份服务器的客户端安装(我是在NFS服务器安装的,web服务器也可以)) yum install -y inotify-toolsb、熟悉命令的使用我们先查看以下命令 rpm -ql inotify-tools /usr/bin/inotifywait #监控目录数据信息变化 /usr/bin/inotifywatch #对监控的变化信息进行统计inotifywait命令使用 inotifywait 3.14 Wait for a particular event on a file or set of files. Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ] Options: -h|--help Show this help text. @<file> Exclude the specified file from being watched. --exclude <pattern> Exclude all events on files matching the extended regular expression <pattern>. --excludei <pattern> Like --exclude but case insensitive. -m|--monitor Keep listening for events forever. Without this option, inotifywait will exit after one event is received. -d|--daemon Same as --monitor, except run in the background logging events to a file specified by --outfile. Implies --syslog. -r|--recursive Watch directories recursively. --fromfile <file> Read files to watch from <file> or `-' for stdin. -o|--outfile <file> Print events to <file> rather than stdout. -s|--syslog Send errors to syslog rather than stderr. -q|--quiet Print less (only print events). -qq Print nothing (not even events). --format <fmt> Print using a specified printf-like format string; read the man page for more details. --timefmt <fmt> strftime-compatible format string for use with %T in --format string. -c|--csv Print events in CSV format. -t|--timeout <seconds> When listening for a single event, time out after waiting for an event for <seconds> seconds. If <seconds> is 0, inotifywait will never time out. -e|--event <event1> [ -e|--event <event2> ... ] Listen for specific event(s). If omitted, all events are listened for. Exit status: 0 - An event you asked to watch for was received. 1 - An event you did not ask to watch for was received (usually delete_self or unmount), or some error occurred. 2 - The --timeout option was given and no events occurred in the specified interval of time. Events: access file or directory contents were read modify file or directory contents were written attrib file or directory attributes changed close_write file or directory closed, after being opened in writeable mode close_nowrite file or directory closed, after being opened in read-only mode close file or directory closed, regardless of read/write mode open file or directory opened moved_to file or directory moved to watched directory moved_from file or directory moved from watched directory move file or directory moved to or from watched directory create file or directory created within watched directory delete file or directory deleted within watched directory delete_self file or directory was deleted unmount file system containing file or directory unmounted inotifywait [参数] 监控的目录 -m|--monitor --- 实现一直监控目录的数据变化 -r|--recursive --- 进行递归监控 -q|--quiet --- 尽量减少信息的输出 --format <fmt> --- 指定输出信息的格式 --timefmt --- 指定输出的时间信息格式 -e|--event --- 指定监控的事件信息创建文件监控信息输出 /test/ CREATE user1 --- 一个文件被创建 /test/ OPEN user1 --- 打开创建的文件 /test/ ATTRIB user1 --- 修改文件的属性信息 /test/ CLOSE_WRITE,CLOSE user1 --- 保存关闭一个文件删除文件监控信息输出修改文件监控信息输出sed命令修改文件原理 /test/ OPEN user1 打开文件 /test/ CREATE sedioUSRr 创建一个临时文件(内存) /test/ OPEN sedioUSRr 临时文件打开 /test/ ACCESS user1 读取源文件内容 /test/ MODIFY sedioUSRr 修改临时文件 /test/ ATTRIB sedioUSRr 临时文件属性变化 /test/ CLOSE_NOWRITE,CLOSE user1 不编辑直接关闭源文件 /test/ CLOSE_WRITE,CLOSE sedioUSRr 写入关闭临时文件 /test/ MOVED_FROM sedioUSRr 将临时文件移除 /test/ MOVED_TO user1 移入一个新的user1源文件inotify参数事件说明:inotify监控命令格式: inotifywait -mrq --timefmt "%F" --format "%T %w %f 事件信息:%e" /data -e CREATE主要监控 create创建、delete删除、moved_to移入、close_write修改企业应用:防止系统重要文件被破坏需要用到inotify进行实时一直监控 /etc passwd /var/spool/cron/root3、sersync同步服务a、下载软件,保留上传到linux服务器中sersync或者下载我用的sersync上传linux服务器 rz -y --- 选择需要上传的数据信息PS:软件尽量都统一保存在/server/tools目录中b、解压软件压缩包,将解压的数据进行保存 unzip sersync-master.zip解压之后把sersync目录移动的 /usr/local/ mv sersync /usr/local/c、编写配置文件:vim conf/confxml.xml 6 <filter start="false"> 7 <exclude expression="(.*)\.svn"></exclude> 8 <exclude expression="(.*)\.gz"></exclude> 9 <exclude expression="^info/*"></exclude> 10 <exclude expression="^static/*"></exclude> 11 </filter> 说明:排除指定数据信息不要进行实时传输同步 12 <inotify> 13 <delete start="true"/> 14 <createFolder start="true"/> 15 <createFile start="false"/> 16 <closeWrite start="true"/> 17 <moveFrom start="true"/> 18 <moveTo start="true"/> 19 <attrib start="false"/> 20 <modify start="false"/> 21 </inotify> 说明:定义inotify程序需要监控的事件 24 <localpath watch="/opt/tongbu"> 25 <remote ip="127.0.0.1" name="tongbu1"/> 26 <!--<remote ip="192.168.8.39" name="tongbu"/>--> 27 <!--<remote ip="192.168.8.40" name="tongbu"/>--> 28 </localpath> 29 <rsync> 30 <commonParams params="-artuz"/> 31 <auth start="false" users="root" passwordfile="/etc/rsync.pas"/> 32 <userDefinedPort start="false" port="874"/><!-- port=874 -->修改24到32行内容 <localpath watch="/test"> 25 <remote ip="172.16.1.41" name="backup"/> 26 <!--<remote ip="192.168.8.39" name="tongbu"/>--> 27 <!--<remote ip="192.168.8.40" name="tongbu"/>--> 28 </localpath> 29 <rsync> 30 <commonParams params="-az"/> 31 <auth start="true" users="rsync_backup" passwordfil 32 <userDefinedPort start="false" port="874"/><!-- por=874 -->d、启动sersync服务程序由于这边服务不是通过yum安装的所有不能用systemctl restart xxx 命令启动,要到它的命令目录中(bin)启动服务先赋予目录执行权限 cd bin/ chmod a+x sersync export PATH="$PATH:/usr/local/sersync/bin" echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sersync/bin查看命令文档 sersync -dro /usr/local/sersync/conf/confxml.xml 启动实时同步服务 yum install -y psmisc killall sersync 停止实时同步服务 /etc/rc.local <-- sersync -dro /usr/local/sersync/conf/confxml.xml 开机自动启动 4、实时同步服务概念总结1) 实现实时同步的原理 监控目录数据变化 --- inotify 将数据进行传输 --- rsync 将监控和传输进行整合 --- sersync2) 实现实时同步部署方法部署rsync守护进程部署inotify软件部署sersync软件
2021年01月25日
178 阅读
0 评论
0 点赞
2021-01-18
LINUX运维学习之综合架构篇——NFS存储服务器概念介绍及搭建
1、什么是存储服务NFS是网络文件共享系统它主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录NFS客户端(一般是应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端NFS服务器的目录。NFS属于本地文件存储服务。2、NFS存储服务的作用:(1)实现数据的共享存储(2)编写数据操作管理(3)节省购买服务器磁盘的开销3、NFS工作流程:(1)在NFS服务端创建共享目录(2)通过mount挂载,将NFS服务端共享目录挂载到NFS客户端本地目录上。(3)NFS客户端挂载目录上创建、删除、查询数据操作, 相当于在服务端操作。4、NFS两个重要的服务由于NFS服务启动时产生的进程服务器端口号是随机的,因此NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获得NFS服务的各项功能对应的端口号、pid、NFS在主机所监听的IP等信息,而NFS客户端只能通过RPC服务询问才能找到正确的端口。5、nfs服务部署流程rpc:远程过程调用服务程序服务端部署(1)下载软件 rpm -qa|grep -E "nfs|rpc" #检查软件是否安装,默认是不安装的 yum install -y nfs-uttls rpcbind(2)编写nfs服务配置文件 vim /etc/exports /test 172.16.1.0/24(rw,sync)a b(c)a、设置数据的存储目录 (/test)b、设置网络白名单(允许哪些主机可以连接到存储服务器进行数据存储)c、配置存储目录的权限信息,存储目录一些功能(3)创建一个存储目录 mkdir /test chown nfsnobody.nfsnobody /test ls -ld /test(4)启动服务程序先启动rpc服务 systemctl start rpcbind.service systemctl enable rpcbind.service systemctl status rpcbind.service在启动NFS服务 systemctl start nfs systemctl enable nfs systemctl status nfs客户端(1)安装软件 yum install -y nfs-utils(2)远程挂载目录 mount -t nfs 172.16.1.31:/test /mnt实现多个网段主机进行挂载(1)/test 172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync) (2)/test 172.16.1.0/24(rw,sync) /test 10.0.0.0/24(rw,sync)6、影响NFS服务存储权限的因素(1)服务端本身目录权限exports文件里ro/rw参数(2)服务端本身目录权限(3)服务端共享目录权限存在继承关系。例如:/test, /test/a(4)客户端挂载参数是否为ro7、NFS服务配置参数 NFS配置参数权限 rw -- 存储目录是否有读写权限 ro -- 存储目录是否时只读权限 sync -- 同步方式存储数据 直接将数据保存到磁盘(数据存储安全) async -- 异步方式存储数据 直接将数据保存到内存(提高数据存储效率) no_root_squash -- 不要将root用户身份进行转换 root_squash -- 将root用户身份进行转换 all_squash -- 将所有用户身份都进行转换 no_all_squash -- 不要将普通用户身份进行转换PS:检查NFS服务进程与端口注册信息rpcinfo -p 172.16.1.31
2021年01月18日
192 阅读
0 评论
0 点赞
2021-01-08
守护进程服务在企业应用
1、守护进程多模块功能配置 sa sa_data.txt dev dev_data.txt dba dba_data.txt vim /etc/rsync.conf #添加以下信息 [backup] comment = "backup dir by oldboy" path = /backup [dba] comment = "backup dir by oldboy" path = /dba [dev] comment = "backup dir by oldboy" path = /devdata2、守护进程的排除环境 [root@nfs01 /]# mkdir -p /oldboy [root@nfs01 /]# mkdir -p /oldboy/{a..c} [root@nfs01 /]# touch /oldboy/{a..c}/{1..3}.txt [root@nfs01 /]# tree /oldboy /oldboy ├── 01.txt ├── 02.txt ├── a │?? ├── 1.txt │?? ├── 2.txt │?? └── 3.txt ├── b │?? ├── 1.txt │?? ├── 2.txt │?? └── 3.txt └── c ├── 1.txt ├── 2.txt └── 3.txt01、 需求01: 将/oldboy目录下面 a目录数据全部备份 b目录不要备份1.txt文件 c整个目录不要做备份 --exclude=PATTERN 绝对路径方式: [root@nfs01 /]# rsync -avz /oldboy --exclude=/oldboy/b/1.txt --exclude=/oldboy/c/rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt 相对路径方式: [root@nfs01 /]# rsync -avz /oldboy --exclude=b/1.txt --exclude=c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt sent 502 bytes received 177 bytes 1,358.00 bytes/sec total size is 0 speedup is 0.0002、将/oldboy目录下面 a目录数据全部备份 b目录不要备份1.txt文件 c整个目录1.txt 3.txt文件不要备份 --exclude-from=file --- 批量排除 第一个历程: 编辑好一个排除文件 [root@nfs01 /]# cat /oldboy/exclude.txt b/1.txt c/1.txt c/3.txt exclude.txt第二个历程: 实现批量排除功能 [root@nfs01 /]# rsync -avz /oldboy --exclude-from=/oldboy/exclude.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt oldboy/c/ oldboy/c/2.txt03、守护进程来创建备份目录 [root@nfs01 /]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/10.0.0.31/ --password-file=/etc/rsync.password sending incremental file list created directory 10.0.0.31 hosts sent 226 bytes received 75 bytes 602.00 bytes/sec total size is 371 speedup is 1.23PS: 客户端无法在服务端创建多级目录 3、 守护进程的访问控制配置守护进程白名单和黑名单功能PS: 建议只使用一种名单守护进程的列表功能配置 [root@nfs01 /]# rsync rsync_backup@172.16.1.41:: backup "backup dir by oldboy" dba "backup dir by oldboy" dev "backup dir by oldboy"
2021年01月08日
131 阅读
0 评论
0 点赞
2021-01-08
备份服务器项目需求
1、备份项目需求(1)所有的服务器备份目录统一(/backup)mkdir /backup(2)要备份的系统配置文件包括但不限于: a、定时任务的配置文件(/var/spool/cron/root)(适用于web和nfs服务器) b、开机自启动的配置文件(/etc/rc.local)(适用于web和nfs服务器) c、日常脚本目录(/server/scripts) d、防火墙iptables的配置文件(/etc/sysconfig/iptables) e、等等 tar zcvhf /backup/system_back.tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /etc/sysconfig/iptables-h 将链接文件指向的源文件备份PS:最好用相对路径进行备份 cd / tar zcvhf /backup/system_back.tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables(3)web服务器站点目录假定为(/var/html/www) tar zcvhf /backup/www_back.tar.gz ./var/html/www(4)web服务器A访问日志路径假定为(/app/logs) tar zcvhf /backup/www_log_back.tar.gz ./app/logs(5)web服务器保留打包后七天的备份数据即可(本地留存7天即可,太多硬盘会满) tar zchf /backup/system_backup_$(date +%F).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables find /backup -type f -mtime +7|xargs rm (6)备份服务器上,保留每一周的所有数据副本,其他要保留6个月的数据副本 tar zchf /backup/www_backup_$(date +%F_week%w).tar.gz ./var/html/www tar zchf /backup/www_log_backup_$(date +%F_week%w).tar.gz ./app/logs find /backup -type f -mtime +180!-name "*week1.tar.gz"|xargs rm 2、如何验证数据完整性 利用md5算法进行验证数据完整性 md5sum -c 指纹文件命令执行原理 第一个历程: 打开一个指纹文件,将信息记录到缓存中 第二个历程: 根据指纹文件的路径信息,生成md5数值信息 第三个历程: 将新生成md5数值和原有指纹文件中的数值进行比较 第四个历程: 如果相同显示结果为ok,如果不同显示failed find /backup/ -type f -mtime -1 ! -name "finger*" |xargs md5sum >/backup/10.0.0.31/finger.txt rsync -avz /backup/rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password md5sum -c /backup/10.0.0.31/finger.txt #检查3、如何实现发送邮件a、配置163企业邮箱注册后邮箱打开设置 以下配置b、编写linux服务邮件相关配置文件 vim /etc/mail.rc set from=xxxx@163.com smtp=smtp.163.com set smtp-auth-user=xxxx@163.com smtp-auth-password=授权密码 smtp-auth=login systemctl restart postfix.servicec、 发送邮件测试 echo "邮件发送测试"|mail -s "邮件测试" xxxx@qq.com mail -s "邮件测试" xxxxx@qq.com </etc/hosts 配置完成
2021年01月08日
116 阅读
0 评论
0 点赞
2020-12-28
LINUX运维学习之综合架构篇——架构搭建准备
1、综合架构组成说明用户访问网站是使用HTTP协议80端口,查看80端口是否开启netstat -lntup|grep 80web服务器:让用户访问需要公网IP地址,域名解析,当访问网站的用户较多,同时写入增多消耗IO,服务器磁盘压力,为了缓解压力,用户在网站的注册等某些字符串信息,那就存储到数据库服务器,图片视频附件等存储在存储服务器,不够用是也可以配置多台服务器随着用户使用的增多,数据库,存储服务器可能损坏,就要有一个备份服务器,将数据库及存储服务器中的数据定时备份到备份服务器中,为了防止备份服务器损坏,要考虑多台备份服务器,尽量不要把备份服务器服务器放在同一个地方,用户不断增加,一个web服务器明显不够,就要增加多台web服务器,减缓第一台web服务器的压力。为了防止黑客非法入侵,配置防火墙服务所以这个小型架构用户访问时先访问到防火墙,再到负载均衡设备,再到相应web服务器,根据存储的内容,在分配到数据库或者存储服务器,为了防止负载均衡设备出问题也可以配置多台,叫高可用架构。用户先访问一台,一台出问题了再访问第二台,首先访问的叫主服务器,第二台叫备服务器用户访问网站一般浏览网站比写入数据到网站的行为更多,为了让用户读的更快,加速读取数据,配置缓存服务器,将磁盘重点,热点数据存储到缓存服务器,再存储到内存中,用户就可以从缓存服务器读取数据,写入也可以,如果读取的数据没有,再根据访问的内容访问数据库服务器或者存储服务器,缓存也可以多台。数据分析服务器可以把存储的数据调取过来分析,也可以分析日志,也是分为个小型架构,叫消息队列结构,前端收集数据,后端进行数据分析,将结果以图形的方式展示出来,用awk或者ELK进行数据分析已经部署了很多设备,为了实现对架构更好的管理,可以配置监控服务器,如果有其他多个机房也可以配置多个监控服务器,叫代理监控服务器,一个主的监控服务器,master表示,这样可以对所有企业里的服务器做监控管理。结构的服务器设备太多,需要管理这一堆架构,实现部署配置需要,在配置一个批量管理服务器,跟每台服务器建立联系。对于用户的访问渠道有了,对于运维人员,走另一条路,为了保证安全性,配置VPN服务器,让只有内部的人可以连接进入,类似于一个特殊通道,需要用户名密码验证,通过后就可以连接访问管理任意一台服务器。为了防止内部人员做出破坏性行为,为内部人员访问做出监管,配置跳板机服务器,VPN,跳板机,批量管理,监控等服务器叫做网站运维人员管理网站的架构,通过这个架构,可以更好地方便对网站庞大的服务器监控管理,以及出现问题了可以记录用户的操作行为。以上就完成了一个中小规模的完整企业架构。2、综合架构规划主机名称IP地址规划需要的软件 防火墙服务器(firewalld)10.0.0.81(外网)172.16.1.81(内网) 负载均衡服务器(lb01)10.0.0.5 (外网)172.16.1.5(内网)nginx keepalived负载均衡服务器(lb02)10.0.0.6 (外网)172.16.1.6(内网)nginx keepalivedweb服务器(web01)10.0.0.7 (外网)172.16.1.7 (内网)nginxweb服务器(web02)10.0.0.8 (外网)172.16.1.8 (内网)nginxweb服务器(web03)10.0.0.9 (外网)172.16.1.9 (内网)nginx数据库(db01)10.0.0.51(外网)172.16.1.51(内网)MySQL存储服务器(nfs01)10.0.0.31(外网)172.16.1.31(内网)nfs备份服务器(backup)10.0.0.41(外网)172.16.1.41(内网)rsync批量管理服务器(m01)10.0.0.61(外网)172.16.1.61(内网)ansible跳板机服务器(jumpserver)10.0.0.71(外网)172.16.1.71(内网)jumpserver监控服务器(zabbix)10.0.0.72(外网)172.16.1.72(内网)zabbix由于资源有限,只能用虚拟机进行模拟测试1、优化配置模板主机进行网卡配置之前模板主机第一张网卡IP地址为10.0.0.200所以在添加一张网卡,IP地址为171.16.1.200a、添加网卡b、配置网卡vim /etc/sysconfig/network-scripts/ifcfg-eth1 或者输入 nmtui 图形化界面配置网卡2、系统优化过程1)模板机优化配置——hosts 文件配置先备份一下hosts文件 \cp /etc/hosts{.bak} cat >/etc/hosts<<EOF 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6172.16.1.5 lb01 172.16.1.6 lb02 172.16.1.7 web01 172.16.1.8 web02 172.16.1.9 web03 172.16.1.51 db01 db01.etiantian.org 172.16.1.31 nfs01 172.16.1.41 backup 172.16.1.61 m01 172.16.1.71 jumpserver 172.16.1.72 zabbixEOF2)模板机优化配置——跟新yum源更改yum源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup &&\ curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum install -y wget wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo3)模板机优化配置——关闭selinuxsed -i.bak 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config grep SELINUX=disabled /etc/selinux/config4) 模板机优化配置——关闭iptablessystemctl stop firewalld systemctl disable firewalld systemctl ststus firewalld5) 模板机优化配置——普通用户oldboy可以使用sudouseradd oldboy echo 123456|passwd --stain oldboy echo "oldboy ALL=(ALL) NOPASSWD: ALL ">>/etc/sudoers tail -1 /etc/sudoers visudo -c6) 模板机优化配置——英文字符集先查看一下 echo $LANG 修改 localectl set-locale LANG="en_US.UTF-8" 重启 reboot echo $LANG7) 模板机优化配置——时间同步下载软件 yum install -y ntpdate echo '#time sync by lidao at 2020-12-03' >>/var/spool/cron/root 添加注释 echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' >>/var/spool/cron/root 每隔五分钟同步一次 crontab -l 查看8) 模板机优化配置——加大文件描述yum install -y lsoflsof -i:22 echo '* - nofile 1024' >>/etc/security/limits.conf source /etc/security/limits.conf 说明:一个服务进程运行起来,会打开相应的文件9) 模板机优化配置——安装其他小软件yum install lrzsz nmap tree dos2unix nc telnet bash-completion bash-completion-extras -y当然以上命令,也可以写成一个脚本,方法有很多,这里就不介绍了,可自行百度。
2020年12月28日
215 阅读
0 评论
0 点赞