mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

25_Linux基礎-NFSサービス

ログローテーション:

https://blog.csdn.net/weixin_43265596/article/details/85469405

https://www.cnblogs.com/liangyuxing/p/11962863.html

https://blog.csdn.net/dhxaohei/article/details/8014764


一. NFS の概要#

**NFS(Network File System の略、ネットワークファイルシステム)** は、ネットワークを介して異なるマシンや異なるオペレーティングシステムが互いのファイルを共有できるようにします。NFS は、リモートコンピュータのディスクをローカルにマウントし、ファイルをローカルディスクにアクセスするかのように読み書きできます。

前提:selinux を無効にする
iptables を無効にする

1、インストール
[root@cPen_A lianxi]# yum install nfs-utils
--------------------------------------------------------------------------------------------
2、設定ファイルを変更する	/etc/exports
[root@cPen_A lianxi]# vim /etc/exports		#注:設定ファイル
/opt/www 192.168.255.0/24(rw,no_root_squash)				
#注:192.168.255.0/24を共有し、rw権限で読み書き、no_root_squashはリモートのrootユーザーをローカルのrootユーザーとして扱う、つまりrootを抑制しない
まず/opt/wwwディレクトリを作成し、その下にindex.htmlファイルを作成し、ファイル内容は「this is test nfs」とします。
次にexports設定を追加し、nfsの設定:vim /etc/exports
以下の行を追加します:
/opt/www 192.168.255.0/24(rw)
これは/opt/wwwディレクトリを共有し、192.168.255.0/24ネットワークのホストがnfsを介してローカルの/opt/wwwディレクトリにアクセスできることを示します。
括弧()内はオプションを示し、rwは読み書きを意味します。

設定を有効にする:
exportfs -a またはサービスを再起動します。

[root@cPen_A opt]# cd /opt
[root@cPen_A opt]# mkdir www
[root@cPen_A opt]# cd www
[root@cPen_A www]# vim index.html
this is test nfs
[root@cPen_A www]# pwd
/opt/www

#注:/optは追加のソフトウェアパッケージのディレクトリです。
--------------------------------------------------------------------------------------------
3、nfsサービスを起動する
[root@cPen_A www]# service nfs start		#注:サービスを起動します。
[root@cPen_A www]# showmount -e			#注:接続できるか確認します。
Export list for cPen_A:
/opt/www 192.168.255.0/24
#注:centos8では起動します [root@cPen_B ~]# service nfs-server start
---------------------------------------------------------------
NFSの接続確認
サーバー側で接続できるか自己テストできます。
コマンド:showmount [-ae] [hostname  | IP]
-a:現在のホストとクライアントのNFS接続共有の状態を表示します。
-e:特定のホストの/etc/exportsで共有されているディレクトリデータを表示します。
---------------------------------------------------------------
4、別のマシンでテストする
戻り値が表示されるとokを示します。
[root@cPen_C ~]# showmount -e 192.168.255.28	#注:後ろに分析するマシンのipアドレスを指定します。
Export list for 192.168.255.28:					#注:このような状況が表示されると、接続できることを示します。接続性に問題はありません。
/opt/www 192.168.255.0/24

5、ネットワークファイルをマウントする
別のマシンで
[root@cPen_C ~]# mkdir /mnt2
[root@cPen_C ~]# mount -t nfs 192.168.255.28:/opt/www /mnt2		#注:ネットワークファイルをマウントします。
[root@cPen_C ~]# df			#注:dfコマンドを使用してディスクのマウント状況を確認します(これはネットワークディスクのマウントです)。
192.168.255.28:/opt/www 17811456 2165760 15645696   13% /mnt2

[root@cPen_C ~]# cd /mnt2
[root@cPen_C mnt2]# ls
index.html
[root@cPen_C mnt2]# cat index.html 
this is test nfs
[root@cPen_C mnt2]# ls
index.html
[root@cPen_A ~]# cd /opt/www/					#注:サーバー側Aホストの操作
[root@cPen_A www]# touch index2.html			#注:サーバー側の操作
[root@cPen_C mnt2]# ls
index2.html  index.html
[root@cPen_C mnt2]# mkdir index2.html
mkdir: ディレクトリ「index2.html」を作成できません:権限が不足しています。
#注:クライアントCはサーバーAのファイルを操作する権限がありません。
#権限がない場合は、/etc/exportsを設定してno_root_squashにすれば操作できます。
no_root_squashはリモートのrootユーザーをローカルのrootユーザーとして扱い、つまりrootを抑制しません。
#注:サーバーがリモートのrootユーザーをローカルのrootユーザーとして認識するようにします。
#注:設定ファイルを変更した後は、exportfs -aを使用して設定を有効にする必要があります;再度マウントします(先にアンマウントしてから再マウントします)。

#例:アンマウントする
[root@cPen_C mnt2]# cd ..			#注:まずmnt2ディレクトリを退出します。そうしないと、ビジーエラーが表示されます。
[root@cPen_C /]# umount /mnt2		#注:その後アンマウントします。

#設定ファイルを変更した後は、exportfs -aを使用して有効にする必要があります。
#再マウント:
    まず/mnt2ディレクトリを退出し、次に実行します:
    umount /mnt2
    その後マウントを実行します。

二. rpcbind と nfs#

nfs を起動する前に、rpcbind サービスが起動していることを確認してください。
nfs が起動すると、rpcbind サービスにポートを登録し、nfs が使用するポートを返します。
次のコマンドを使用して
rpcinfo -p コマンド nfs ポートが正常に登録されているか確認します。
rpcbind は家主のようなもので、nfs は借り手です。
#注:nfs は自分でポートを起動できず、rpcbind が nfs のためにポートを登録します。
#注:nfs が起動する前に rpcbind が起動していることを確認してください。
[root@cPen_A www]# rpcinfo -p # 注:rpcbind が nfs のために 2049 ポートを起動します。
100003 3 tcp 2049 nfs


三。実験:nfs と nginx の組み合わせ 使用負荷分散とファイル共有#

A: 192.168.0.73 nfs 実機
B: 192.168.0.79 プロキシ機 + 実機
C: 192.168.0.53 実機

前提:
三台のホストに nginx がインストールされており、そのうちの一台で nfs サービスを起動します。
A マシンで nfs サービスを起動し、ウェブサイトのディレクトリは /opt/www に保存され、B、C は A の /opt/www ディレクトリをローカルにマウントできます。
A マシンで nfs サービスを設定し、nfs サービスを起動した後、A、C の両方で次のコマンドを実行します:
[root@cPen_B ~]# mount -t nfs 192.168.0.73:/opt/www /opt/www
[root@cPen_C ~]# mount -t nfs 192.168.0.73:/opt/www /opt/www

Bマシンはプロキシマシンになります。
第1ステップ:8080ポートを起動します。
A、B、Cの三台のホストのnginx設定を変更し、8080ポートを起動し、ドメイン名www.sc.comにバインドします。
#注:設定ファイルのディレクトリ:/etc/nginx
#注:/etc/nginx/conf.dディレクトリに入り、sc.confを作成します。
以下の内容を入力します。
[root@cPen_A ~]# cd /etc/nginx/
[root@cPen_A nginx]# cd conf.d/
[root@cPen_A conf.d]# vim sc.conf		#注:拡張子は.confでなければならず、自動的に読み込まれます。
server {
    listen  8080;						#注:8080ポートをリッスンします。
    server_name  www.sc.com;			#注:指定されたドメイン名。

    root /opt/www;						#注:指定されたウェブサイトのホームディレクトリ、デフォルトではホームディレクトリでindex.htmlを探します。

}
[root@cPen_A conf.d]# nginx -t			#注:構文チェックを行います。
[root@cPen_A conf.d]# nginx -s reload		#注:設定を有効にします。
[root@cPen_A conf.d]# lsof -i:8080		#注:8080ポートが起動しました。
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   3193  root    6u  IPv4  50354      0t0  TCP *:webcache (LISTEN)
nginx   3194 nginx    6u  IPv4  50354      0t0  TCP *:webcache (LISTEN)
nginx   3195 nginx    6u  IPv4  50354      0t0  TCP *:webcache (LISTEN)

lsof -i:8080を使用してポートが起動しているか確認します。
curl -H "Host: www.sc.com" http://192.168.0.73:8080を使用して返される内容が一致するか確認します。
192.168.0.68の8080ポートにアクセスし、www.sc.comドメイン名でアクセスします。
[root@cPen_A ~]# curl -H "Host: www.sc.com" http://192.168.0.73:8080
this is test nfs
#注:三台のマシンが返す内容はすべて同じで、すべてthis is test nfsです。

--------------------------------------------------------------------------------------------
#注:Bマシンにリバースプロキシを追加します。
Bマシンで負荷分散を行います:リクエストを他のマシンに転送します(プロキシ転送)(高可用性)。
[root@cPen_B conf.d]# vim sc.conf 
server {
    listen  8080;
    server_name  www.sc.com;	

    root /opt/www;

}

upstream sc {						#注:プロキシ転送のため、upstreamにscという名前を付けます。
    server 192.168.0.73:8080;
    server 192.168.0.53:8080;
    server 192.168.0.79:8080;
}
#注:仮想ホストとして、異なるドメイン名が異なる処理を行います。
server {							
    listen  80;
    server_name  www.sc.com;		

    root /opt/www;

    location / {						#注:ウェブサイトの/ディレクトリにアクセスすると、すべてscに転送されます。
        proxy_set_header Host $host;	#注:ヘッダー情報、これを加えないと、Bのホストアドレスに変わる可能性があります。
		#注:クライアントから送られたヘッダーhostフィールド情報と転送パケットのヘッダーhostフィールド情報を一致させます。
        proxy_pass http://sc;			#注:バックエンドプロキシサーバーを設定します。
    }
}

server {
    listen  80;
    server_name  www.sc1.com;

    root /usr/share/www;

    location / {
        proxy_set_header Host $host;
        proxy_pass http://sc;
    }
}

#注:www.sc.comを出力する際、リクエスト時にデータパケットがhostヘッダー情報を保持します:www.sc.com、80ポートがこのパケットを受け取ると、8080ポートに転送する必要があることを知っています。BマシンがA、B、Cの8080ポートへのリクエストを処理します。
#注:クライアントがwww.sc.comにリクエストを送信すると、hostヘッダー情報www.sc.com(リクエストパケット内の、クライアントが持っているヘッダー情報)がBホストに渡され、Bホストの80ポートで処理され、8080ポートに転送されます。Bホストがリクエストを処理します。この時、Aが発起したこのパケットのヘッダー情報はBのipアドレスかもしれません(www.sc.comではなく)。8080ポートがリクエストを受け取ったとき、Bのipアドレスのserver_nameがないと、転送に失敗します。したがって、proxy_set_header Host $hostはそれらのヘッダー情報を一致させます。

--------------------------------------------------------------------------------------------
#設定を有効にする
[root@cPen_B conf.d]# nginx -t
[root@cPen_B conf.d]# nginx -s reload

--------------------------------------------------------------------------------------------
#その後、80ポートに何度もアクセスし、返される内容が一致するか、各マシンの/var/log/nginx/access.logログに新しいリクエストが来ているかを確認します。tail -f  /var/log/nginx/access.log

[root@cPen_B conf.d]# curl -H "Host: www.sc.com" http://192.168.0.79
this is test nfs
#注:プロキシ転送、80ポートにアクセスし、8080ポートに転送し、3台のマシンに実行されました(負荷分散)。

[root@cPen_C conf.d]# tail -f  /var/log/nginx/access.log 	#注:Cホストで、Bホストがリクエストを処理します。
192.168.0.79 - - [01/Dec/2020:17:21:54 +0800] "GET / HTTP/1.0" 200 17 "-" "curl/7.61.1" "-"
#注:平均して3台に分配され、デフォルトでラウンドロビン方式です。

image-20221011191610524

#注:killall nginx を使用してすべてを終了できます。

#注:404 が見つかりません、403 禁止

#注:A、B を B、A に変更します。
nginx プロキシマシン + 実機

A

nginx 実機

B nfs

nginx 実機

C

クライアントが www.sc.com にアクセスし、A nginx プロキシマシンの 80 ポートにアクセスします(プロキシの意味は転送です)。
A マシンは自分の 8080 を処理するか、B マシンの 8080 を処理するか、C マシンの 8080 を処理します。
負荷分散:2 万人が A マシンの 80 ポートにアクセスし、80 ポートはリクエストを処理せず、単にプロキシ転送を行い、ローカルの 8080 を処理するか、B マシンの 8080 を処理するか、C マシンの 8080 を処理します。A、B、C の 3 台が返すページはすべて一致する必要があります。
B マシンの /opt/www ディレクトリを A と C にマウントします(ファイルの一貫性を保つため、変更されるのは B マシンの nfs です)。

image-20221011191803355

#注:ネットワークの問題

ブリッジモード VMnet0 同じネットワークセグメント

NAT モード VMnet8 同じネットワークセグメント

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。