nfs

Posted syy1757528181

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nfs相关的知识,希望对你有一定的参考价值。

使用roles实现一键部署nfs

环境准备

主机名 安装服务 wan lan
web01 nfs客户端 10.0.0.7 172.16.1.7
web02 nfs客户端 10.0.0.8 172.16.1.8
nfs nfs服务端 10.0.0.9 172.16.1.9
backup backup服务端 10.0.0.41 172.16.1.41

流程分析

1.安装ansible
2.优化ansible
3.推送公钥
4.开启防火墙
5.开启80 443 873 nfs等端口和服务白名单
6.关闭selinux
7.创建同一的用户

    1.安装nfs-utils
    2.拷贝nfs配置文件
    3.创建共享目录
    4.启动nfs服务端
    	1.在nfs服务端安装sersync
    	2.拷贝sersync配置文件到nfs服务端
    	3.nfs服务端配置rsync密码文件
    	4.启动sersync

主机清单

[root@m01 ~]# vim /root/ansible/hosts 
#[]标签名任意,但是最好不要用特殊符号(- | &)和大写字母,中文(不能是nginx)
#端口是22的时候可以省略
[web_group]
172.16.1.7 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘
172.16.1.8 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘
172.16.1.9 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘

[db_group]
172.16.1.51 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘
172.16.1.52 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘
172.16.1.53 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘
172.16.1.54 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘

[nfs_group]
172.16.1.31 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘

[redis_group]
172.16.1.81 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘

[lb_group]
172.16.1.5 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘
172.16.1.6 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘

[backup_group]
172.16.1.41 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘

[zabbix_group]
172.16.1.71 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘

[m01_group]
172.16.1.61 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘

[mtj_group]
172.16.1.202 ansible_ssh_port=22 asible_ssh_user=root ansible_ssh_pass=‘1‘

################################服务端

nfs配置文件


{% for i in nfs_data_dir %}
/data/{{ i }} 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
{% endfor %}

#可以对nfs_data_dir定义多个值
#nfs_data_dir这个位置可以是变量·数组·range()
参考bash循环
pp="1 11 88 44 00"
for n in $pp;do
	echo "${n}"
done

使用ansible-galaxy命令创建角色目录

[root@m01 roles]# ansible-galaxy init nfs_server

编辑tasks目录

1.安装
[root@m01 nfs_server]# vim tasks/install.yml 
- name: Install nfs-utils
  yum:
    name: "{{ item }}"
    state: present
  loop:
    - nfs-utils
2.创建目录
[root@m01 nfs_server]# vim tasks/dir.yml 
- name: Create Directory
  file:
    path: "{{ item }}"
    state: directory
    owner: "{{ ww_w }}"
    group: "{{ ww_w }}"
    mode: 0755
    recurse: yes
  loop:
    - "{{ nfs_data_dir }}"
3.copy配置文件
[root@m01 nfs_server]# vim tasks/config.yml 
- name: content NFS Server
  template:
    src: exports.j2
    dest: /etc/exports
    owner: root
    group: root
    mode: 0644
  notify:
        - restart nfs
4.启动
[root@m01 nfs_server]# vim tasks/start.yml 
- name: start nfs
  service:
    name: nfs
    state: started
    enabled: yes
5.编辑main.yml
[root@m01 nfs_server]# vim tasks/main.yml 
- include: install.yml
- include: dir.yml
- include: config.yml
- include: start.yml
6.触发器
[root@m01 nfs_server]# vim handlers/main.yml 
- name: restart nfs
  systemd:
    name: nfs-server
    state: restarted
    enabled: yes
7.编辑jinjia模板
[root@m01 nfs_server]# vim templates/exports.j2 
{% for i in nfs_data_dir %}
{{ i }} 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
{% endfor %}
8.变量
[root@m01 nfs_server]# vim vars/main.yml 
#nfs服务端被挂载的目录
nfs_data_dir:
  - "/data"
  - "/data/wowdpress"
  - "/data/WeCenter"
#统一的用户
ww_w: www

编辑入口文件

[root@m01 roles]# vim site.yml 
- hosts: all
  roles:
    #- { role: base }
    #- { role: rsync_client,when: ansible_fqdn is match ‘web*‘ }
    #- { role: rsync_client,when: ansible_fqdn is match ‘nfs*‘ }
    #- { role: rsync_server,when: ansible_fqdn is match ‘backup*‘ }
    - { role: nfs_server,when: ansible_fqdn is match ‘nfs*‘ }

执行

[root@m01 roles]# ansible-playbook site.yml 

#####################客户端

使用ansible-galaxy命令创建角色目录

[root@m01 roles]# ansible-galaxy init nfs_client

编辑tasks目录

1.安装
[root@m01 nfs_client]# vim tasks/install.yml 
- name: install nfs-utils
  yum:
    name: "{{ item }}"
    state: present
  loop:
    - "nfs-utils"
2.创建目录
[root@m01 nfs_client]# vim tasks/dir.yml 
- name: Create Directory
  file:
    path: "{{ item }}"
    state: directory
    owner: "{{ ww_w }}"
    group: "{{ ww_w }}"
    mode: 0755
    recurse: yes
  loop:
    - "{{ mount_point}}"
3.启动
[root@m01 nfs_client]# vim tasks/start.yml 
- name: start nfs
  systemd:
    name: nfs-server
    state: started
    enabled: yes
4.使用inclunde包含
[root@m01 nfs_client]# vim tasks/main.yml 
- include: install.yml
- include: dir.yml
- include: start.yml
5.变量
[root@m01 nfs_client]# vim vars/main.yml 
#统一用户
ww_w: www
#挂载点
mount_point:
  - "/code/wordpress/wp-content/uploads/"
  - "/code/WeCenter/uploads"

编辑入口文件

[root@m01 roles]# vim site.yml 
- hosts: all
  roles:
    #- { role: base }
    #- { role: rsync_client,when: ansible_fqdn is match ‘web*‘ }
    #- { role: rsync_client,when: ansible_fqdn is match ‘nfs*‘ }
    #- { role: rsync_server,when: ansible_fqdn is match ‘backup*‘ }
    #- { role: nfs_server,when: ansible_fqdn is match ‘nfs*‘ }
    - { role: nfs_client,when: ansible_fqdn is match ‘web*‘ }

执行

[root@m01 roles]# ansible-playbook site.yml

以上是关于nfs的主要内容,如果未能解决你的问题,请参考以下文章

NFS错误代码-110的确切含义

如何在 C 代码中检查目录是不是在 NFS 文件系统上?

java保存nfs

NFS

rsync nfs 实时同步,结合实战

Linux NFS服务