自动化运维工具-Ansible学习与playbook编写与变量系列_playbook学习文档

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

黄色表示执行正常,并作出了改变

红色表示错误,输出错误信息

紫色表示警告,建议

三,Ansible基础学习

1.Ansible的命令格式
ansible [主机分组] -m(module) [指定模块] -a(action) [指定模块中的选项]
例:
[root@localhost ~]# ansible test -m command -a 'hostname'
192.168.2.3 | CHANGED | rc=0 >>
localhost.localdomain
192.168.2.2 | CHANGED | rc=0 >>
localhost.localdomain
2.Ans配置文件的优化
[root@localhost ~]# vi /etc/ansible/ansible.cfg
host_key_checking = False						#关闭ansible的认证
3.ansible主机清单
[root@localhost ~]# cat /etc/ansible/hosts	#默认的主机清单
[test]		#组名
192.168.2.2	#主机地址
192.168.2.3
或者192.168.2.[1:10]
4.登录主机的几种方法(密码)
1.本地生成密钥(SSH密钥对)
2.主机清单指定
192.168.2.2 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
3.多主机指定相同密码(指定主机组)
[all:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass='1'
5.主机清单子组
子组创建
[web]
192.168.2.2
[data]
192.168.2.3

多组合并
[test:children]
web
data
[root@localhost ~]# ansible test -m command -a 'hostname'
192.168.2.3 | CHANGED | rc=0 >>
data_01
192.168.2.2 | CHANGED | rc=0 >>
web_01

四,Ansible模块

一,模块分类
1.命令
命令和脚本描述
command默认的模块,执行简单的命令,不支持特殊的字符
shell执行命令 ,支持特殊的字符
script分发脚本执行
2.文件
文件描述
file创建目录,文件,软链接
copy远程分发文件,修改权限,所有者,备份
3.服务
服务管理描述
systemd服务管理,开启关闭,状态查询
service服务管理(了解)
4.yum
软件包下载描述
yum安装软件包,卸载软件包
get_url下载软件包(wget命令)
5.系统管理
系统管理模块描述
mount挂载磁盘,镜像文件
cron定时任务
6.调试
调试模块描述
ping检查主机是否存活
debug用于检测显示 变量 函数
7.用户管理
用户管理描述
user管理用户 创建用户 权限管理
group管理组 创建组
8.其他模块
其他模块描述
docker容器
zabbix监控
mysql数据库
rsync远程同步
二,Ansible-命令与脚本
1.command模块(使用简单的命令 不支持特殊字符)
[root@localhost ~]# ansible all -a 'hostname'		#默认加command
192.168.2.3 | CHANGED | rc=0 >>
data_01
192.168.2.2 | CHANGED | rc=0 >>
web_01
2.shell模块 (支持特殊字符)
[root@localhost ~]# ansible all -m shell -a 'ip a s ens33 | sed -n 3p'	#shell支持特殊字符 如果使用command会报错
192.168.2.3 | CHANGED | rc=0 >>
    inet 192.168.2.3/24 brd 192.168.2.255 scope global ens33
192.168.2.2 | CHANGED | rc=0 >>
    inet 192.168.2.2/24 brd 192.168.2.255 scope global ens33
3.script(传输脚本到被管理端并执行脚本)
[root@localhost ~]# vi /server/scripts/install-sl.sh
#!/bin/bash
yum -y install sl

[root@localhost ~]# ansible all -m script -a '/server/scripts/install-sl.sh'

测试:

[root@web_01 ~]# sl
三,文件管理
1.file模块
file模块中的选项描述
path路径(目录,文件)
src源文件(一般用于link创建软连接模式用于指定源文件)
state状态(模式)state=directory(创建目录) state=file(默认,更新文件,如果文件不存在也不创建)state=link(创建软链接) state=touch(创建文件) state=absent(删除)
owner指定所有者(属主)
group指定所有组(属组)
mode设置权限
案例1:创建目录
[root@localhost ~]# ansible all -m file -a "path=/test state=directory"
[root@localhost ~]# ansible all -a "ls -ld /test"
192.168.2.3 | CHANGED | rc=0 >>
drwxr-xr-x 2 root root 6 2月  20 20:10 /test
192.168.2.2 | CHANGED | rc=0 >>
drwxr-xr-x 2 root root 6 2月  20 20:10 /test
案例2:创建文件
[root@localhost ~]# ansible all -m file -a 'path=/test/file1.txt state=touch'
[root@localhost ~]# ansible all -a "ls -l /test"
192.168.2.3 | CHANGED | rc=0 >>
总用量 0
-rw-r--r-- 1 root root 0 2月  20 20:13 file1.txt
192.168.2.2 | CHANGED | rc=0 >>
总用量 0
-rw-r--r-- 1 root root 0 2月  20 20:13 file1.txt
案例3:创建软链接
[root@localhost ~]# ansible all -m file -a 'src=/test/file1.txt path=/tmp/file.txt state=link'
[root@localhost ~]# ansible all -a "ls -l /tmp/file.txt"
192.168.2.3 | CHANGED | rc=0 >>
lrwxrwxrwx 1 root root 15 2月  20 20:15 /tmp/file.txt -> /test/file1.txt
192.168.2.2 | CHANGED | rc=0 >>
lrwxrwxrwx 1 root root 15 2月  20 20:15 /tmp/file.txt -> /test/file1.txt
案列4:删除文件目录/软链接
[root@localhost ~]# ansible all -m file -a 'path=/test/file1.txt state=absent'
[root@localhost ~]# ansible all -m file -a 'path=/test state=absent'
[root@localhost ~]# ansible all -m file -a 'path=/tmp/file.txt state=absent'
案例5:创建文件(所有者root 用户组root 权限755)
[root@localhost ~]# ansible all -m file -a 'path=/tmp/test.txt owner=root group=root mode=755 state=touch'
[root@localhost ~]# ansible all -a 'ls -l /tmp/test.txt'
192.168.2.3 | CHANGED | rc=0 >>
-rwxr-xr-x 1 root root 0 2月  20 20:23 /tmp/test.txt
192.168.2.2 | CHANGED | rc=0 >>
-rwxr-xr-x 1 root root 0 2月  20 20:23 /tmp/test.txt
2.copy模块
选项描述
srcsource源文件
destdestination目标位置
backupbackup=yes 则会在覆盖前进行备份
mode修改权限
owner修改为指定所有者
group指定所有组
案例1:传输/etc/hosts文件到目标主机
[root@localhost ~]# ansible all -m copy -a "src=/etc/hosts dest=/etc/hosts"
[root@localhost ~]# ansible all -a 'cat /etc/hosts'
192.168.2.2 | CHANGED | rc=0 >>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.1 server
192.168.2.2 web1
192.168.2.3 data1
192.168.2.3 | CHANGED | rc=0 >>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.1 server
192.168.2.2 web1
192.168.2.3 data1
案例2:再次传输hosts文件,到目标主机的源文件自动备份一下
[root@localhost ~]# ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes'
[root@localhost ~]# ansible all -m shell -a 'ls -l /etc/hosts*'
192.168.2.3 | CHANGED | rc=0 >>
-rw-r--r--  1 root root 229 2月  20 20:37 /etc/hosts
-rw-r--r--  1 root root 212 2月  20 20:29 /etc/hosts.21223.2023-02-20@20:37:39~
-rw-r--r--. 1 root root 370 6月   7 2013 /etc/hosts.allow
-rw-r--r--. 1 root root 460 6月   7 2013 /etc/hosts.deny
192.168.2.2 | CHANGED | rc=0 >>
四,系统管理
1.systemd服务管理
选项描述
name用于指定服务器的
enabled控制主机的开机自启动 enabled=yes enable=no
daemon-reloadyes是否重新加载对应的服务的管理配置文件
state表示指定操作服务器的状态的 state=started(开启) state=stopped(关闭) state=reloaded(重读配置文件的) state=restarted(重启)
案例1:关闭firewalld
[root@localhost ~]# ansible all -m systemd -a 'name=firewalld enabled=no state=stopped'
[root@localhost ~]# ansible all -a "systemctl status firewalld"
192.168.2.3 | FAILED | rc=3 >>
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)non-zero return code
192.168.2.2 | FAILED | rc=3 >>
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)non-zero return code
例2:开启sshd服务
[root@localhost ~]# ansible all -m systemd -a 'name=sshd enabled=yes state=started'
[root@localhost ~]# ansible all -a "systemctl status sshd"
案例3:重启data这台机器上的mysql服务
[root@localhost ~]# ansible data -m systemd -a 'name=mysqld state=restarted'
2.service模块
选项描述
开机自启enabled
服务器名称name
服务开关重启state
运行级别runlevel
五,软件包管理
1.yum源配置管理模块
yum_repository源选项yum源配置文件内容作用
name[epel]yum源中名字(中括号 里面的名字即可)
descriptionname=xxxxxyum源的注释说明
baseurlbaseurl=yum源中下载软件包的地址(可以直接访问到repodata目录)
enable=yes/noenable=1/0是否启动这个源
gpgcheck=yes/nogpgcheck=0是否启动gpgcheck功能
file(可以不加)指定yum源文件,自动添加.repo
案例1:批量添加nginx源
[root@localhost ~]# ansible all -m yum_repository -a 'name=nginx description="nginx" baseurl="http://nginx.org/packages/centos/$releasever/$basearch/" gpgcheck=no enabled=yes'
192.168.2.2 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "repo": "nginx",
    "state": "present"
}
192.168.2.3 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "repo": "nginx",
    "state": "present"
}
2.yum模块
选项描述
name指定软件包名字
stateinstalled安装 removed(删除) latest(如果安装就检查更新 没安装则安装)
案例1:安装lrzsz
[root@localhost ~]# ansible all -a 'rpm -e lrzsz'
[root@localhost ~]# ansible all -m yum -a 'name=lrzsz state=installed'
案例2:安装cowsay,aalib
[root@localhost ~]# ansible web -m yum -a 'name=sl,cowsay,aalib state=installed'
3.get_url模块
选项描述
url指定要下载的地址
dest下载到那个目录
案例1:下载tengine源码包到/server/tools(不存在)目录下
[root@localhost ~]# ansible web -m file -a 'path=/server/tools/ state=directory'
[root@localhost ~]# ansible web -m get_url -a "url=https://tengine.taobao.org/download/tengine-2.3.3.tar.gz dest=/server/tools/"
[root@localhost ~]# ansible web -a 'ls /server/tools'
192.168.2.2 | CHANGED | rc=0 >>
tengine-2.3.3.tar.gz
六,系统工具管理
1.mount模块
选项描述
fstype指定文件类型
src源地址
path挂载点
statestate=absent(卸载并修改fstab(清理配置)) state=unmounted(卸载不修改/etc/fstab) state=present(仅修改/etc/fstab不挂载) state=remounted(重新挂载)
案例1:挂载NFS磁盘
[root@localhost ~]# ansible web -m file -a 'path=/nfs-data state=directory'

[root@localhost ~]# ansible web -m mount -a 'fstype=nfs src="192.168.2.3:/data" path=/nfs-data state=mounted'
2.cron定时任务模块
cron的选项定时任务配置中的内容描述
name#及后面的内容定时任务名字
minute*/2分钟minute=“*/2”,如果没有用到不用填写即可
hour小时
day
month月份
week
job命令(脚本)指定命令或脚本
statepresent默认是添加 添加定时任务 absent删除
案例1:添加自动同步时间的定时任务
* / 2 * * * * / sbin / ntpdat e ntp

[root@localhost ~]# ansible all -m cron -a 'name="sync time by" minute="*/2" job="/sbin/ntpdate ntp1.aliyun.com &> /dev/null state=present"'
七,用户管理模块
1.user用户模块
选项描述
name用户名
uid指定uid
group知道用户组
shell指定命令解释器
create_home是否创建家目录
statestate=present(添加) state=absent(删除)
案例1:创建用户
[root@localhost ~]# ansible web -m user -a 'name=www'
案例2:创建程序用户
[root@localhost ~]# ansible web -m user -a 'name=cjx uid=10085 shell=/shell/nologin create_home=no state=present'
2.group组模块
选项描述
name指定用户组名字
gid指定组的gid
statestate=present(添加)state=adsent(删除)

五,Ansible模块实验-部署rsync服务端

1.部署流程
  • 服务部署:yum安装(更新)rsync

  • 配置文件

  • 创建虚拟用户rsync

  • 创建密码和分配权限

  • 同步对应目录,改所有者

  • 重启服务

2.根据流程写出命令
  • yum -y install rsync

  • 配置好rsync文件然后scp上传替换

  • 创建虚拟用户:useradd -s /sbin/nologin -M rsync

  • 密码文件和权限:echo ‘rsync_back:1’ > /etc/rsync.password 修改权限:chmod 600 /etc/rsync.password

  • 创建共享目录:mkdir /data 分配所有者 chown rsync.rsync /data

  • 重启服务:systemctl restart rsync

3.ansible部署rsync
1.在ansible服务器上创建rsync配置文件用于上传
[root@localhost ~]# mkdir /data/
[root@localhost ~]# vi /data/rsyncd.conf
uid = root
gid = root
port 873
address = 192.168.2.2
hosts allow = 192.168.2.0/24
max connections = 4
pid file = /var/run/rsyncd.pid
timeout = 900
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[data]
        path = /data
        read only = no
        auth users = test
        secrets file = /etc/rsync.password
2.安装rsync
[root@localhost ~]# ansible rsync -m yum -a 'name=rsync state=installed'
3.配置文件分发
[root@localhost ~]# ansible rsync -m copy -a 'src=/data/rsyncd.conf dest=/etc/rsyncd.conf backup=yes'
4.创建虚拟用户
[root@localhost ~]#  ansible rsync -m user -a 'name=rsync shell=/sbin/nologin create_home=no state=present
5.创建密码文件和权限
[root@localhost ~]# ansible rsync -m file -a 'path=/etc/rsync.password mode=600 state=touch'
[root@localhost ~]# ansible rsync -m shell -a "echo 'test:1' >  /etc/rsync.password"
6.创建rsync同步的目录,和分配属组
[root@localhost ~]# ansible rsync -m file -a 'path=/data owner=rsync group=rsync state=directory'
7.重启服务
[root@localhost ~]# ansible rsync -m systemd -a 'name=rsyncd enabled=yes state=started'
8.测试
[root@localhost ~]# rsync -avz --password-file=/etc/server.pass /test/ test@192.168.2.2::data
sending incremental file list
./

sent 47 bytes  received 23 bytes  140.00 bytes/sec
total size is 0  speedup is 0.00

六,Ansible-playbook(剧本)

一.ansible中Hoc与playbook的区别
命令含义应用场景
ad-hocans命令运行对应模块与选项临时使用,测试使用
playbook通过文件执行(类似脚本)用于批量管理,部署,收集信息,分发(文件重复执行)
二.playbook与shell的区别
剧本与脚本应用场景
playbook剧本批量管理,批量部署,批量分发
shell脚本某一台,服务脚本,系统巡查,定时备份
三.playbook编写规则
  • 剧本格式叫yaml格式(yml)

  • 缩进(不要使用Tab,使用空格)

  • 核心格式剧本中所有的内容要对齐

  • 对齐的时候不能使用Tab

  • 在不同层级中需要使用两个空格来分层

  • hosts:用于指定那些主机

  • tasks:用于对这些主机,运行什么模块

四.案例

参数:

参数描述
-i指定hosts文件(默认/etc/ansible/hosts)
-C检测yml文件是否有误
–list-hosts列出清单
–list-tasks列出任务
–list-tags列出标签
–syntax-check语法检查
案例1:所有机器的/tmp下面创建test.txt
[root@localhost playbook]# vi touch.yml
- hosts: all
  vars:
    filename: test1.txt
  tasks:
    - name: touch file
      shell: touch /tmp/{{filename}}
      
案例2:添加定时同步时间的定时任务
[root@localhost playbook]# vi cron.yml
- hosts: all
  tasks:
   - name: add cron sync time
     cron:
       name: "sync time by"
       minute: "*/2"
       job: "/sbin/ntpdate ntp1.aliyun.com &> /dev/null"
       state: present
      
[root@localhost playbook]# ansible-playbook -C cron.yml
案例3:批量下载zabbix-agent2-6.0客户端并启动
[root@localhost playbook]# vi zabbix_agent.yml
- hosts: all
  tasks:
    - name: download zabbix agent2
      get_url:
        url: https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent2-6.0.0-1.el7.x86_64.rpm
        dest: /tmp/
        validate_certs: no
    - name: install zabbix agent2
      yum:
        name: /tmp/zabbix-agent2-6.0.0-1.el7.x86_64.rpm
        state: installed
    - name: start zabbix agent2
      systemd:
        name: zabbix-agent2
        enabled: yes
        state: started
        
[root@localhost playbook]# ansible-playbook -C zabbix_agent.yml

案例4:配置rsync服务器端

[root@localhost playbook]# vi rsync_backup.yml
- hosts: rsync
  tasks:
    - name: install rsync
      yum:
        name: rsync
        state: latest
    - name: config
      copy:
        src: /data/rsyncd.conf
        dest: /etc/rsyncd.conf
        backup: yes
    - name: virtual user
      user:
        name: rsync
        shell: /sbin/nologin
        create_home: no
        state: present
    - name: password txt
      shell:
        'echo "rsync_backup:1" > /etc/rsync.password'
    - name: password
      file:
        path: /etc/rsync.password
        owner: rsync
        group: rsync
        state: file
    - name: reload rsync
      systemd:
        name: rsyncd
        enabled: yes
        state: started
     
[root@localhost playbook]# ansible-playbook -C  rsync_backup.yml
五,综合案例
1.安装ansible
yum -y install ansible
2.ssh公钥
ssh-keygen -t rsa
ssh-copy-id root@IP
3.创建ansible-playbook文件目录
[root@localhost ~]# mkdir -p /etc/ansible/ansible_playbook/{conf,file,scripts,tools}
4.准备资料
1.创建ansible清单
[root@localhost ~]# vi /etc/ansible/hosts
[rsync]
192.168.2.2

[data]
192.168.2.3

[web]
192.168.2.4
2.准备程序配置文件
#NFS共享
[root@localhost conf]# vi /etc/ansible/ansible_playbook/conf/exports
/data 192.168.2.0/24(rw,sync,all_squash)

#httpd文件
cp /etc/httpd/httpd.conf /etc/ansible/ansible_playbook/conf/

#rsync配置文件
[root@localhost conf]# vi /etc/ansible/ansible_playbook/conf/rsyncd.conf
uid = www
gid = www
port 873
address = 192.168.2.2
hosts allow = 192.168.2.0/24
max connections = 4
pid file = /var/run/rsyncd.pid
timeout = 900
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[backup]
                path = /backup
                read only = no
                auth users = rsync_backup
                secrets file = /etc/rsync.password
3.运行脚本
#设置rsync执行文件权限
[root@localhost conf]# vi /etc/ansible/ansible_playbook/scripts/rsync_backup.sh
#!/usr/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#1.定义变量
Host=$(hostname)
Addr=$(ifconfig ens33|awk 'NR==2{print $2}')
Date=$(date +%F)
Dest=${Host}_${Addr}_${Date}
Path=/backup

#2.创建备份目录
[ -d $Path/$Dest ] || mkdir -p $Path/$Dest

#3.备份对应的文件
cd / && \
[ -f $Path/$Dest/system.tar.gz ] || tar czf $Path/$Dest/system.tar.gz etc/fstab etc/rsyncd.conf && \
[ -f $Path/$Dest/log.tar.gz ] || tar czf $Path/$Dest/log.tar.gz  var/log/messages var/log/secure && \

#4.携带md5验证信息
[ -f $Path/$Dest/flag ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag_${Date}

#4.推送本地数据至备份服务器
export RSYNC_PASSWORD=1
rsync -avz $Path/ rsync_backup@rsync1::backup

#5.本地保留最近7天的数据
find $Path/ -type d -mtime +7|xargs rm -rf

#检查rsync状态
[root@localhost conf]# vi /etc/ansible/ansible_playbook/scripts/rsync_check.sh
#!/usr/bin/bash

#1.定义全局的变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#2.定义局部变量
Path=/backup
Date=$(date +%F)

#3.查看flag文件,将校验的结果保存至result_时间
find $Path/*_${Date} -type f -name "flag$Date"  >$Path/result_${Date}

#4.将校验的结果发送邮件给管理员
mail -s "Rsync Backup $Date" 1793594335@qq.com <$Path/result_${Date}

#5.删除超过7天的校验结果文件, 删除超过180天的备份数据文件
find $Path/ -type f -name "result*" -mtime +7|xargs rm -f
find $Path/ -type d -mtime +180|xargs rm -rf
4.准备sersync部署
(1)在ansible服务器先下载sersync
(2)解压到/etc/ansible/ansible_playbook/并修改配置文件
(3)推送到nfs
(4)启动sersync
5.基础环境部署
  • (1)网络环境(关闭firewall selinux)

  • (2)epel仓库

  • (3)安装rsync,nfs-utils

  • (4)创建组

  • (5)创建用户

  • (6)创建目录,并修改权限

  • (7)推送脚本

  • (8)推送rsync客户端密码文件,修改权限

  • (9)计划任务

[root@localhost ~]# cd /etc/ansible/ansible_playbook/
[root@localhost ansible_playbook]# vi base.yaml
- hosts: all
  tasks:
    - name: clear repos.d
      file: path=/etc/yum.repos.d/ state=absent

    - name: create repos.d
      file: path=/etc/yum.repos.d/ state=directory

    - name: install base repo
      get_url: url=http://mirrors.aliyun.com/repo/Centos-7.repo 
      dest: /etc/yum.repos.d/CentOS-Base.repo

    - name: install epel repo
      get_url: url=http://mirrors.aliyun.com/repo/epel-7.repo 
      dest: /etc/yum.repos.d/epel.repo

    - name: install rsync nfs-utils
      yum: name=rsync,nfs-utils state=installed
crea
    - name: create group www
      group: name=www gid=666

    - name: create user www
      user: name=www uid=666 create_home=no shell=/sbin/nologin

    - name: create rsync client password
      copy: content='1' dest=/etc/rsync.pass mode=600

    - name: create scripts directory
      file: path=/server/scripts/ recurse=yes state=directory

    - name: push scripts
      copy: src=./scripts/rsync_backup.sh dest=/server/scripts

    - name: crontab
      cron: name="backup scripts" hour=01 minute=00 job="/usr/bin/bash /server/scripts/rsync_backup.sh &> /dev/null"
6.rsync安装
[root@localhost ansible_playbook]# vi rsync.yaml
- hosts: rsync
  tasks:

    - name: install rsync
      yum: name=rsync state=installed

    - name: config rsync
      copy: src=/etc/ansible/ansible_playbook/conf/rsyncd.conf dest=/etc/rsyncd.conf
      notify: restart rsync

    - name: create rsync local user
      copy: content='rsync_backup:1' dest=/etc/rsync.password mode=600

    - name: create data
      file: path=/data state=directory recurse=yes owner=www group=www mode=755

    - name: create backup
      file: path=/backup state=directory recurse=yes owner=www group=www mode=755



![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)


最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

ckup
      file: path=/backup state=directory recurse=yes owner=www group=www mode=755



![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)


最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值