部署NFS服务端
心急可以直接看剧本,剧本有注释,步骤是分解过程
hosts
[nfs]
172.16.1.56
[web]
172.16.1.51
172.16.1.52
步骤
1. 部署nfs服务端软件
对应的命令
yum install -y nfs-utils nfs-utils-lib
对应的模块
- yum模块
就是执行yum命令
2. 修改配置文件
对应的命令
/etc/exports
/data 172.16.1.0/24(rw)
对应的模块
- lineinfile模块
常用于修改配置文件或其他文本文件,支持正则
3. 创建对应目录权限
对应的命令
mkdir -p /data
chown nfsnobody:nfsnobody /data
对应的模块
- file模块
文件、目录相关的操作
4. 启动服务
对应的命令
注意nfs是基于rpc的,所以需要先启动rpcbind,再启动nfs
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs
systemctl enable nfs
对应的模块
- systemd模块
剧本
---
- name: 安装并配置NFS服务器 # 剧本的名称,描述了剧本的主要目的
hosts: nfs # 指定此剧本将在名为 'nfs' 的主机组上执行
become: yes # 提升权限,相当于在命令前加上sudo,用于执行需要管理员权限的操作
tasks: # 任务列表开始
- name: 安装NFS服务器所需的软件包 # 任务描述
yum: # 使用yum模块安装软件包
name: # 指定要安装的软件包列表
- nfs-utils # NFS工具包
- nfs-utils-lib # NFS工具库
state: installed # 确保软件包被安装
- name: 在/etc/exports文件中添加NFS共享配置(其实事先写好配置文件使用copy也可以) # 任务描述
lineinfile: # 使用lineinfile模块修改文件内容
path: /etc/exports # 指定要修改的文件
# 这里的 IP 地址 172.16.1.0/24 是一个网络地址,
# 用于指定哪些客户端可以访问这个NFS共享。
# 172.16.1.0/24:这是一个CIDR(无类别域间路由)表示法,
# 用于描述一个IP网络而非单一的IP地址。
# 这个特定的地址和掩码组合表示从 172.16.1.0 到 172.16.1.255 的所有IP地址。
# 这个范围内的任何设备都被允许访问这个NFS共享。
line: "/srv/nfs 172.16.1.0/24(rw,sync,no_root_squash,no_subtree_check)" # 添加的行内容
state: present # 确保这行内容存在于文件中
backup: yes # 在修改前备份原文件
- name: 创建一个用于共享的目录 # 任务描述
file: # 使用file模块管理文件和目录
path: /srv/nfs # 指定目录路径
owner: nfsnobody # 设置目录的所有者
group: nfsnobody # 设置目录的所属组
state: directory # 确保这是一个目录
mode: '0777' # 设置目录的权限
- name: 启动rpc服务 # 任务描述
systemd: # 使用systemd模块管理服务
name: rpcbind # 指定服务名称
state: started # 确保服务已启动
enabled: yes # 确保服务在系统启动时自动启动
- name: 启动nfs服务 # 任务描述
systemd: # 使用systemd模块管理服务
name: nfs # 指定服务名称
state: started # 确保服务已启动
enabled: yes # 确保服务在系统启动时自动启动
- name: 应用NFS导出配置更改 # 任务描述
command: exportfs -arv # 使用command模块执行命令,应用NFS导出设置
- name: 配置防火墙允许NFS流量 # 任务描述
firewalld: # 使用firewalld模块管理防火墙规则
service: nfs # 指定服务名称
permanent: true # 设置规则为永久
state: enabled # 启用规则
immediate: yes # 立即应用更改
- name: 打印NFS服务器的IP地址
debug:
msg: "NFS服务器的IP地址是 {{ hostvars['nfs_server']['ansible_default_ipv4']['address'] }}"
检查&执行
检查:
ansible-playbook -i hosts -C xxx.yml
没问题,执行:
ansible-playbook -i hosts xxx.yml
查看是否正常开启nfs服务
showmount -e ip
客户端挂载NFS
其实就是把mount命令细化
mount -t nfs 172.16.1.51:/srv/nfs /mnt
步骤
1.安装NFS客户端软件包
yum install -y nfs-utils
2.创建本地挂载点
mkdir -p /data
3.挂载NFS共享
mount -t nfs 172.16.1.51:/srv/nfs /mnt
4.确保fstab文件中包含NFS挂载配置
cat /etc/fstab | grep /srv/nfs
其实就是看看配置是否生效
剧本
---
- name: 在web服务器上挂载NFS共享 # 剧本的名称,描述了剧本的主要目的
hosts: web # 指定此剧本将在名为 'web' 的主机组上执行
become: yes # 提升权限,相当于在命令前加上sudo,用于执行需要管理员权限的操作
vars:
nfs_server_to_mount: "{{ mount_server }}"
tasks: # 任务列表开始
- name: 安装NFS客户端软件包 # 任务描述
yum: # 使用yum模块安装软件包
name: # 指定要安装的软件包列表
- nfs-utils # NFS工具包
state: installed # 确保软件包被安装
- name: 创建本地挂载点 # 任务描述
file: # 使用file模块管理文件和目录
path: /mnt # 指定目录路径
state: directory # 确保这是一个目录
- name: 挂载NFS共享 # 任务描述
mount: # 使用mount模块挂载文件系统
path: /mnt/nfs_share # 指定挂载点的路径
src: "{{ nfs_server_to_mount }}:/srv/nfs" # 指定NFS服务器的共享路径
fstype: nfs # 文件系统类型为NFS
opts: defaults # 使用默认挂载选项
state: mounted # 确保文件系统已挂载
- name: 确保fstab文件中包含NFS挂载配置 # 任务描述
lineinfile: # 使用lineinfile模块修改文件内容
path: /etc/fstab # 指定要修改的文件
line: "{{ nfs_server_to_mount }}:/srv/nfs /mnt nfs defaults 0 0" # 添加的行内容
state: present # 确保这行内容存在于文件中
backup: yes # 在修改前备份原文件
检查&执行
检查:
ansible-playbook -i hosts -C -e mount_server=172.16.1.56 xxx.yml
没问题,执行:
ansible-playbook -i hosts -e mount_server=172.16.1.56 xxx.yml
注意
在windows上编辑的yml、shell等放到linux执行之前记得要使用下面的命令去做一下转换
dos2unix xxx.yml # 没有dos2unix可以安装一下 yum install -有dos2unix
原因是windows和linux的格式不同,使用cat -A查看会发现windows的每行结尾是^M$
而linux下的文件结尾是$
如果发现有哪里写的不对的地方还望指正