作者:独笔孤行
官网:http://anyamaze.com
公众号:云实战
前言
Nginx是一个轻量级、高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。
nginx 常用于七层代理,四层代理一般使用 lvs 或者haproxy,但 nginx 从1.9.0 版本开始支持四层代理,做四层代理时,源码编译需要添加--with-stream模块,或通过yum安装nginx1.21或更高的版本,默认是支持stream功能的。
NFS共享由于安全和网络等多种因素,无法直接提供对外访问,需通过代理服务器进行端口转发,以实现对外访问。
一、环境架构
代理服务器有2个网卡,一个网卡与NFS存储直连,另外一个网卡与NFS客户端相连接,代理服务器中部署nginx,通过nginx将nfs存储进行反向代理,对nfs客户端提供nfs访问接口。
二、环境信息
服务器 | 主机名 | IP地址 | 部署软件 | 备注 |
NFS存储 | nfs-server | 192.168.0.102 | nfs-utils | |
代理服务器 | nginx | 192.168.0.254,192.168.1.254 | nginx | |
NFS客户端 | nfs-client | 192.168.1.101 | nfs-utils |
三、NFS存储配置
所有操作在NFS存储节点进行
1.安装nfs
yum install nfs-utils -y
2.配置nfs共享
mkdir /data
cat <<EOF> /etc/exports
/data *(rw,insecure)
EOF
参数说明:/data是nfs存放数据目录,可自行定义。 *是允许所有IP访问。
3.防火墙放开nfs端口
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent
firewall-cmd --zone=public --add-port=20048/tcp --permanent
firewall-cmd --zone=public --add-port=20048/udp --permanent
firewall-cmd --reload
通过配置防火墙规则,放开nfs的111、2049、20048三个端口,允许tcp和udp两种协议进行访问。也可以通过关闭防火墙来实现。
四、代理服务器配置
所有操作在代理服务器进行
代理服务器可以通过两种方法进行NFS端口转发,即通过nginx和firewalld。本环境因为只有1台NFS存储,所以两种方法都可以采用,如果后端有多台NFS存储,是集群模式的,那么建议使用nginx,因为nginx除反向代理外还有负载均衡能力。
nginx反向代理nfs
1.关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
2.配置nginx的yum源
cat <<EOF> /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
必须配置nginx的yum源,以保证是nginx 1.21以上的最新版本,否则低版本nginx不支持stream功能,不能实现四层的端口转发功能。
3.安装nginx
yum install nginx -y
4.修改nginx配置文件
修改nginx主配置文件,加入straem功能,stream功能与http属于平级功能
cat <<EOF>> /etc/nginx/nginx.conf
stream {
include /etc/nginx/nfs/*.conf;
}
EOF
生成NFS端口转发文件
mkdir /etc/nginx/nfs/
cat <<EOF> /etc/nginx/nfs/nfs.conf
upstream nfs {
server 192.168.0.102:111;
}
upstream rpc {
server 192.168.0.102:2049;
}
upstream mountd {
server 192.168.0.102:20048;
}
server {
listen 111 udp;
proxy_connect_timeout 5s;
proxy_timeout 300s;
proxy_pass nfs;
}
server {
listen 111;
proxy_connect_timeout 5s;
proxy_timeout 300s;
proxy_pass nfs;
}
server {
listen 2049 udp;
proxy_connect_timeout 5s;
proxy_timeout 300s;
proxy_pass rpc;
}
server {
listen 2049;
proxy_connect_timeout 5s;
proxy_timeout 300s;
proxy_pass rpc;
}
server {
listen 20048 udp;
proxy_connect_timeout 5s;
proxy_timeout 300s;
proxy_pass mountd;
}
server {
listen 20048;
proxy_connect_timeout 5s;
proxy_timeout 300s;
proxy_pass mountd;
}
EOF
参数说明:192.168.0.102是NFS存储IP地址,可根据实际情况修改。通过tcp和udp两种协议监听111、2049、20048三个端口,将该3个端口的请求转发到NFS存储端的对应端口,实现NFS反向代理。
5.启动nginx服务
systemctl start nginx
systemctl enable nginx
如果启动失败,可通过查看nginx服务状态,根据信息提示处理配置文件的语法错误。
6.查看转发效果
netstat -anp |grep nginx
查看端口111、2049、20048是否被nginx转发。
firewalld转发NFS端口
如果已通过nginx进行NFS端口转发,可直接忽略此部分,此方法与“nginx反向代理nfs”二选一即可。
启动防火墙
systemctl start firewalld
配置端口转发规则,并将转发的端口放开允许访问
firewall-cmd -add-forward-port=port=111:proto=tcp:toport=222:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=111:proto=tcp:toport=111:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=111:proto=udp:toport=111:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=2049:proto=tcp:toport=2049:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=2049:proto=udp:toport=2049:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=20048:proto=tcp:toport=20048:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=20048:proto=udp:toport=20048:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --add-port=111 --permanent
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent
firewall-cmd --zone=public --add-port=20048/tcp --permanent
firewall-cmd --zone=public --add-port=20048/udp --permanent
firewall-cmd --reload
参数说明:192.168.0.102是NFS存储IP,根据实际情况进行替换即可。
五、NFS客户端配置
所有操作在NFS客户端节点进行
1.安装nfs
yum install nfs-utils -y
2.通过代理服务器访问nfs共享
查找nfs列表
showmount -e 192.168.1.254
挂载nfs存储
mount -t nfs 192.168.1.254:/data /mnt/
查看挂载状态
df -hT -t nfs4
测试结果