ログローテーション:
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台に分配され、デフォルトでラウンドロビン方式です。
#注: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 です)。
#注:ネットワークの問題
ブリッジモード VMnet0 同じネットワークセグメント
NAT モード VMnet8 同じネットワークセグメント