一键化部署NFS服务
NFS服务基于RPC协议,是采用客户端/服务器结构实现的分布式文件系统。NFS服务器允许NFS客户端将远端NFS服务器的共享目录挂载到本地的NFS客户端中,如此客户端即可像对自己的磁盘分区和目录一样将数据存储到NFS服务器中。
ad-hoc部署NFS服务
服务端部署
- 确认安装软件
ansible 172.16.1.31 -m yum -a “name=nfs-utils state=installed”
ansible 172.16.1.31 -m yum -a “name=rpcbind state=installed” - 分发配置文件
echo “/data 172.16.1.0/24(rw,sync)”>/etc/ansible/ansible-playbook/nfs_file/nfs_server/exports
ansible 172.16.1.31 -m copy -a “src=./nfs_file/nfs_server/exports dest=/etc/” - 创建共享目录
ansible 172.16.1.31 -m file -a “dest=/data state=directory owner=nfsnobody group=nfsnobody” - 启动服务程序
ansible 172.16.1.31 -m service -a “name=rpcbind state=started enabled=yes”
ansible 172.16.1.31 -m service -a “name=nfs state=started enabled=yes”
客户端部署
- 挂载共享目录
ansible 172.16.1.7 -m mount -a “src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted” - 查看共享目录
ansible 172.16.1.7 -m shell -a “df -h”
playbook部署NFS服务
-
准备NFS目录
nfs_file、nfs_client、nfs_server[root@m01 ~]# tree /etc/ansible/ /etc/ansible/ |-- ansible-playbook | |-- nfs_file | | |-- nfs_client | | `-- nfs_server | |-- rsync_file | | `-- rsyncd.conf | `-- rsync_server.yaml |-- ansible.cfg |-- hosts `-- roles
-
配置主机清单
[root@m01 ~]# vim /etc/ansible/hosts [nfs:children] nfs_server nfs_client [nfs_server] 172.16.1.31 [nfs_client] 172.16.1.7
-
编写ansible剧本
[root@m01 ~]# vim /etc/ansible/ansible-playbook/nfs-server.yaml - hosts: nfs tasks: - name: 01-install nfs yum: name: ['nfs-utils' , 'rpcbind'] - hosts: nfs_server vars: Data_dir: /data tasks: - hosts: nfs tasks: - name: 01-install nfs yum: name: ['nfs-utils' , 'rpcbind'] - hosts: nfs_server vars: Data_dir: /data tasks: - name: 01-copy nfs conf file copy: src=/etc/ansible/ansible-playbook/nfs_file/nfs_server/exports dest=/etc/ - name: 02-create data dir file: path={{ Data_dir }} state=directory owner=nfsnobody group=nfsnobody notify: restart nfs server - name: 03-start server service: name={{ item }} state=started enabled=yes with_items: - rpcbind - nfs handlers: - name: restart nfs server service: name=nfs state=restarted - hosts: nfs_client vars: Data_dir: /data tasks: - name: 01-mount mount: src=172.16.1.31:{{ Data_dir }} path=/mnt fstype=nfs state=mounted - name: 02-check shell: df -h|grep {{ Data_dir }} register: mount_info - name: display mount_info debug: msg={{ mount_info.stdout_lines }}
-
测试执行剧本
[root@m01 ~]# ansible-playbook --syntax-check /etc/ansible/ansible-playbook/nfs-server.yaml [root@m01 ~]# ansible-playbook -C /etc/ansible/ansible-playbook/nfs-server.yaml [root@m01 ~]# ansible-playbook /etc/ansible/ansible-playbook/nfs-server.yaml
roles部署NFS服务
部署NFS服务端
-
编写tasks目录中main.yml
[root@m01 roles]# cat nfs-server/tasks/main.yml - name: 01-copy nfs conf file copy: src=exports dest=/etc/ - name: 02-create data dir file: path={{ Data_dir }} state=directory owner=nfsnobody group=nfsnobody notify: restart nfs server - name: 03-start server service: name={{ item }} state=started enabled=yes with_items: - rpcbind - nfs
-
编写vars目录中main.yml
[root@m01 roles]# cat nfs-server/vars/main.yml Data_dir: /data
-
编写files目录中nfs配置文件
[root@m01 roles]# vim nfs-server/files/exports /data 172.16.1.0/24(rw,sync)
-
编写handlers目录中main.yml
[root@m01 roles]# vim nfs-server/handlers/main.yml - name: restart nfs server service: name=nfs state=restarted
部署NFS客户端
- 编写tasks目录中main.yml
[root@m01 roles]# vim nfs-client/tasks/main.yml - name: 01-mount mount: src=172.16.1.31:{{ Data_dir }} path=/mnt fstype=nfs state=mounted - name: 02-check shell: df -h|grep {{ Data_dir }} register: mount_info - name: display mount_info debug: msg={{ mount_info.stdout_lines }}
- 编写vars目录中main.yml
[root@m01 roles]# echo "Data_dir: /data" > nfs-client/vars/main.yml
编写主剧本文件
[root@m01 roles]# vim site.yml
- hosts: nfs_server
gather_facts: no
roles:
- nfs-server
- hosts: nfs_client
gather_facts: no
roles:
- nfs-client
测试运行剧本文件
[root@m01 roles]# ansible-playbook --syntax-check site.yml
playbook: site.yml
[root@m01 roles]# ansible-playbook -C site.yml
[root@m01 roles]# ansible-playbook site.yml
一键化部署rsync服务
ad-hoc部署rsync服务
服务端部署
- 确认安装软件
ansible 172.16.1.41 -m yum -a “name=rsync state=installed” - 分发配置文件
ansible 172.16.1.41 -m copy -a “src=/etc/ansible/ansible-playbook/rsync_file/rsyncd.conf dest=/etc/” - 创建虚拟用户
ansible 172.16.1.41 -m user -a “name=rsync create_home=no shell=/sbin/nologin” - 创建密码文件
ansible 172.16.1.41 -m copy -a “content=‘rsync_backup:redhat’ dest=/etc/rsync.password mode=600” - 创建备份目录
ansible 172.16.1.41 -m file -a “dest=/backup state=directory owner=rsync group=rsync” - 启动服务程序
ansible 172.16.1.41 -m service -a “name=rsyncd state=started enabled=yes”
客户端部署
- 确认安装软件
ansible 172.16.1.31,172.16.1.7 -m yum -a “name=rsync state=installed” - 创建密码文件
ansible 172.16.1.31,172.16.1.7 -m copy -a “content=‘redhat’ dest=/etc/rsync.password mode=600” - 测试服务
ansible 172.16.1.31,172.16.1.7 -m file -a “dest=/tmp/test.txt state=touch”
ansible 172.16.1.31,172.16.1.7 -m shell -a "rsync -avz /tmp/test.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
playbook部署rsync服务
-
准备目录结构
[root@m01 ansible-playbook]# tree |-- rsync_file | `-- rsyncd.conf `-- rsync_server.yaml
-
配置主机清单
[root@m01 ansible-playbook]# vim /etc/ansible/hosts [rsync:children] rsync_server rsync_client [rsync_server] 172.16.1.41 [rsync_client] 172.16.1.31 172.16.1.7
-
编写剧本文件
[root@m01 ansible-playbook]# vim rsync_server.yaml - hosts: rsync remote_user: root tasks: - name: 01-install rsync yum: name=rsync state=installed - hosts: rsync_server remote_user: root vars: Backup_dir: /backup tasks: - name: 01-push rsyncd.conf copy: src=./rsync_file/rsyncd.conf dest=/etc/ notify: restart rsync service - name: 02-create user user: name=rsync create_home=no shell=/sbin/nologin - name: 03-create backup directory file: dest={{ Backup_dir }} state=directory owner=rsync group=rsync - name: 04-create password file copy: content=rsync_backup:redhat dest=/etc/rsync.password mode=600 - name: 05-start rsync service service: name=rsyncd state=started enabled=yes handlers: - name: restart rsync service service: name=rsyncd state=restarted - hosts: rsync_client remote_user: root vars: Rsync_Port: 874 tasks: - name: 01-create password file copy: content=redhat dest=/etc/rsync.password mode=600 - name: 02-create test file file: dest=/tmp/test.txt state=touch - name: 03-test shell: rsync -avz --port={{ Rsync_Port }} /tmp/test.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password ~
-
测试执行剧本
[root@m01 ansible-playbook]# ansible-playbook --syntax-check rsync_server.yaml playbook: rsync_server.yaml [[root@m01 ansible-playbook]# ansible-playbook -C rsync_server.yaml [root@m01 ansible-playbook]# ansible-playbook rsync_server.yaml
roles部署rsync服务
部署rsync服务端
-
编写tasks目录中main.yml
[root@m01 roles]# vim rsync-server/tasks/main.yml - name: 01-install rsync yum: name=rsync state=installed - name: 02-push rsyncd.conf template: src=rsyncd.conf dest=/etc/ - name: 03-create user user: name=rsync create_home=no shell=/sbin/nologin - name: 04-create backup directory file: dest={{ Backup_dir }} state=directory owner=rsync group=rsync - name: 05-create password file copy: content=rsync_backup:redhat dest=/etc/rsync.password mode=600 - name: 06-start rsync service service: name=rsyncd state=started enabled=yes
-
编写vars目录中main.yml
[root@m01 roles]# vim rsync-server/vars/main.yml [root@m01 roles]# cat rsync-server/vars/main.yml Backup_dir: /backup Rsync_Port: 874
-
编写templates目录中rsync配置文件
[root@m01 roles]# vim rsync-server/templates/rsyncd.conf ... port = {{ Rsync_Port }} ...
-
编写handlers目录中main.yml
[root@m01 roles]# vim rsync-server/handlers/main.yml [root@m01 roles]# cat rsync-server/handlers/main.yml - name: restart rsync service service: name=rsyncd state=restarted
部署rsync客户端
- 编写tasks目录中main.yml
[root@m01 roles]# vim rsync-client/tasks/main.yml - name: 01-create password file copy: content=redhat dest=/etc/rsync.password mode=600 - name: 02-create test file file: dest=/tmp/test.txt state=touch - name: 03-test shell: rsync -avz --port={{ Rsync_Port }} /tmp/test.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
- 编写vars目录中main.yml
[root@m01 roles]# vim rsync-client/vars/main.yml [root@m01 roles]# cat rsync-client/vars/main.yml Rsync_Port: 874
编写主剧本文件
[root@m01 roles]# vim site.yml
- hosts: rsync_server
gather_facts: no
roles:
- rsync-server
- hosts: rsync_client
gather_facts: no
roles:
- rsync-client
测试执行主剧本
[root@m01 roles]# ansible-playbook --syntax-check site.yml
[root@m01 roles]# ansible-playbook -C site.yml
[root@m01 roles]# ansible-playbook site.yml
一键化部署sersync
ad-hoc部署sersync服务
服务端部署(rsync守护进程)
- 确认安装软件
ansible 172.16.1.41 -m yum -a “name=rsync state=installed” - 分发配置文件
ansible 172.16.1.41 -m copy -a “src=/etc/ansible/ansible-playbook/rsync_file/rsyncd.conf dest=/etc/” - 创建虚拟用户
ansible 172.16.1.41 -m user -a “name=rsync create_home=no shell=/sbin/nologin” - 创建密码文件
ansible 172.16.1.41 -m copy -a “content=‘rsync_backup:redhat’ dest=/etc/rsync.password mode=600” - 创建备份目录
ansible 172.16.1.41 -m file -a “dest=/backup state=directory owner=rsync group=rsync” - 启动服务程序
ansible 172.16.1.41 -m service -a “name=rsyncd state=started enabled=yes”
客户端部署(rsync+inotiy监控服务+sersync实时同步服务)
- 确认安装rsync软件
ansible 172.16.1.31,172.16.1.7 -m yum -a “name=rsync state=installed” - 确认安装inotify软件
ansible 172.16.1.31,172.16.1.7 -m yum -a “name=inotify-tools state=installed” - 创建rsync密码文件
ansible 172.16.1.31,172.16.1.7 -m copy -a “content=‘redhat’ dest=/etc/rsync.password mode=600” - 分发sersync安装包
ansible 172.16.1.31,172.16.1.7 -m copy -a “src=/etc/ansible/ansible-playbook/sersync_file/sersync.tar.gz dest=/usr/local/” - 创建sersync目录
ansible 172.16.1.31,172.16.1.7 -m file -a “dest=/usr/local/sersync state=directory” - 解压sersync包并将其内容移动到sersync目录
ansible 172.16.1.31,172.16.1.7 -m shell -a “cd /usr/local && tar xf sersync.tar.gz && mv GNU-Linux-x86/* sersync” - 分发confxml.xml
ansible 172.16.1.31,172.16.1.7 -m copy -a “src=/etc/ansible/ansible-playbook/sersync_file/confxml.xml dest=/usr/local/sersync/confxml.xml” - 启动sersync服务
ansible 172.16.1.31,172.16.1.7 -m shell -a “/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml”
playbook部署sersync
[root@m01 ansible-playbook]# vim sersync.yaml
- hosts: rsync_server
remote_user: root
vars:
Backup_dir: /backup
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push rsyncd.conf
copy: src=./rsync_file/rsyncd.conf dest=/etc/
notify: restart rsync service
- name: 03-create user
user: name=rsync create_home=no shell=/sbin/nologin
- name: 05-create password file
copy: content=rsync_backup:redhat dest=/etc/rsync.password mode=600
- name: 06-start rsync service
service: name=rsyncd state=started enabled=yes
handlers:
- name: restart rsync service
service: name=rsyncd state=restarted
- hosts: rsync_client
remote_user: root
tasks:
- name: 01-install soft
yum:
name: ['rsync','inotify-tools']
- name: 02-create rsync password file
copy: content=redhat dest=/etc/rsync.password mode=600
- name: 03-push sersync.tar.gz
copy: src=/etc/ansible/ansible-playbook/sersync_file/sersync.tar.gz dest=/usr/local/
- name: create sersync dir
file: dest=/usr/local/sersync state=directory
- name: uncompress and mv
shell: cd /usr/local && tar xf sersync.tar.gz && mv GNU-Linux-x86/* sersync
- name: push confxml.xml
copy: src=/etc/ansible/ansible-playbook/sersync_file/confxml.xml dest=/usr/local/sersync/confxml.xml
notify: restart sersync service
- name: start sersync service
shell: /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
handlers:
- name: restart sersync service
shell: /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
roles部署sersync
服务端部署
-
编写tasks目录中main.yml
[root@m01 roles]# vim rsync-server/tasks/main.yml - name: 01-install rsync yum: name=rsync state=installed - name: 02-push rsyncd.conf template: src=rsyncd.conf dest=/etc/ - name: 03-create user user: name=rsync create_home=no shell=/sbin/nologin - name: 04-create backup directory file: dest={{ Backup_dir }} state=directory owner=rsync group=rsync - name: 05-create password file copy: content=rsync_backup:redhat dest=/etc/rsync.password mode=600 - name: 06-start rsync service service: name=rsyncd state=started enabled=yes
-
编写vars目录中main.yml
[root@m01 roles]# vim rsync-server/vars/main.yml [root@m01 roles]# cat rsync-server/vars/main.yml Backup_dir: /backup Rsync_Port: 874
-
编写templates目录中rsync配置文件
[root@m01 roles]# vim rsync-server/templates/rsyncd.conf ... port = {{ Rsync_Port }} ...
-
编写handlers目录中main.yml
[root@m01 roles]# vim rsync-server/handlers/main.yml - name: restart rsync service service: name=rsyncd state=restarted
客户端部署
-
编写tasks目录中main.yml
[root@m01 roles]# vim rsync-client/tasks/main.yml - name: 01-install soft yum: name: ['rsync','inotify-tools'] - name: 02-create rsync password file copy: content=redhat dest=/etc/rsync.password mode=600 - name: 03-push sersync.tar.gz copy: src=/etc/ansible/ansible-playbook/sersync_file/sersync.tar.gz dest=/usr/local/ - name: create sersync dir file: dest=/usr/local/sersync state=directory - name: uncompress and mv shell: cd /usr/local && tar xf sersync.tar.gz && mv GNU-Linux-x86/* sersync - name: push confxml.xml copy: src=/etc/ansible/ansible-playbook/sersync_file/confxml.xml dest=/usr/local/sersync/confxml.xml notify: restart sersync service - name: start sersync service shell: /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
-
编写handlers目录中main.yml
[root@m01 roles]# vim rsync-client/handlers/main.yml - name: restart sersync service shell: /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
编写主剧本文件
[root@m01 roles]# vim site.yml
- hosts: rsync_server
gather_facts: no
roles:
- rsync-server
- hosts: rsync_client
gather_facts: no
roles:
- rsync-client
测试执行主剧本
[root@m01 roles]# ansible-playbook --syntax-check site.yml
[root@m01 roles]# ansible-playbook -C site.yml
[root@m01 roles]# ansible-playbook site.yml