A. アーキテクチャ
keepalivedの+ nginxの可用性負荷分散アーキテクチャでは、実際には、デバイスが故障したときに、ホットスタンバイサーバーが瞬時に自動的にVIPを切り替えることができる、高可用性(HA)機能制御ヘッドエンドVIP(仮想ネットワークアドレス)を実施する責任keepalivedの操作スイッチ時にのみ2秒での経験は、DNSサービスは、フロントエンドの負荷分散のVIPのための責任を負うことができます。
nginxのは、バックエンドWebサーバの負荷分散を制御するための責任がある、クライアントの特定のアルゴリズムに従って処理する実サーバのバックエンドへの要求、および実サーバが直接クライアントに戻し応答します。
Webインターフェイスを提供するために、リアルタイムバックアップ、Webサーバーを行うには、NFSサーバ。
II。単純な原理
NGINX_MASTER、NGINX_BACKUP NGINX_MASTER障害ens33カードにkeepalivedのソフトウェアを介して、両方のサーバーが、現在このVIPサービスは誰ens32にバインドされて運んでいる仮想IP(VIP)アドレス192.168.1.40を、ネクタイ、NGINX_BACKUPハートビート時間はNGINX_MASTER回復keepalivedのパラメータは、優先順位によって優先順位を決定する際に、そして、NGINX_BACKUPが瞬時にバインドVIPがnginx_masterの仕事を引き継ぐことになるNGINX_MASTER通常の状態を取得することはできません/etc/keepalived/keepalived.confファイルadvert_int 1検査によって設定されます。 ens33カードのNGINX_MASTERに右仮想VIPアドレス192.168.1.40再バインド。
この方式で使用することの利点
圧力の上昇が一時的アーキテクチャこれにWebサーバーを追加するために添加することができるときにアーキテクチャを実現するために1.、伸縮することができ、
ロード・バランシングを有する2.upstreamは、自動的に機械の後端を決定することができ、そして自動機械から追い出さ正常にサービスを提供することができない。
3. LVS相対的な用語、正規分布とリダイレクトがより柔軟。そして、単一Keepalvied nginxのロードバランサ、単一障害点の実効性を確保することができます;
4. nginxのは、何も変更せずにマシンの後端には、負荷分散を行うために使用されます。
開発、テスト、展開に多くの時間節約、あり、かつ迅速に障害が発生した場合にはミラーを介してサービスを復元することができるドッキングウィンドウコンテナに配備さ5.nginx。
第三に、システム環境
2つの負荷マシンのインストール:, nginxの+ドッカ+ NFSの名前:NGINX_MASTER、NGINX_BACKUP。
バックエンドのWebサーバは、Webサービスは、どのアーキテクチャで提供することができるように命名した:WEB_1、WEB_2。
任意のバックエンドデータベースマシンアーキテクチャ、限り、あなたはデータベース・サービスを提供することができますよう。
サーバー | IPアドレス | ソフトウェアのインストール |
---|---|---|
NGINX_MASTER | 192.168.1.10 | nginxの+ keepalivedの |
NGINX_BACKUP | 192.168.1.20 | nginxの+ keepalivedの |
WEB_1 | 192.168.1.11 | ドッキングウィンドウ+ nginxの |
WEB_2 | 192.168.1.13 | ドッキングウィンドウ+ nginxの |
nfs_MASTER | 192.168.1.30 | NFS + rsyncの+のinotify |
nfs_BACKUP | 192.168.1.10 | NFS + rsyncの+のinotify |
nginxの展開(両方とも)
nginxのインストール
[root@nginx01 ~]# tar zxf nginx-1.14.0.tar.gz
//解压nginx安装包
[root@nginx01 ~]# cd nginx-1.14.0/
[root@nginx01 nginx-1.14.0]# yum -y install openssl-devel pcre-devel zlib-devel
//安装nginx依赖包
[root@nginx01 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx1.14 --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx && make && make install
//编译安装nginx
[root@nginx01 nginx-1.14.0]# useradd nginx -s /sbin/nologin -M
//创建所需用户
[root@nginx01 nginx-1.14.0]# ln -s /usr/local/nginx1.14/sbin/nginx /usr/local/sbin/
//链接命令
[root@nginx01 nginx-1.14.0]# nginx
//开启nginx
[root@nginx01 nginx-1.14.0]# netstat -anpt | grep nginx
//查看nginx是否开启
nginxの展開
[root@nginx01 ~]# cd /usr/local/nginx1.14/conf/
[root@nginx01 conf]# vim nginx.conf
HTTPモジュールプラス
upstream backend {
server 192.168.1.11:90 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.1.13:90 weight=1 max_fails=2 fail_timeout=10s;
}
location / {
# root html;
# index index.html index.htm;
proxy_pass http://backend; #添加
}
高可用性環境
インストールkeepalivedの
[ルート@ nginx02のnginx-1.14.0]#yumの-y keepalivedのインストール
設定keepalivedの
keepalivedのは、プライマリおよびスタンバイファイルサーバnginxの上の設定ファイルを変更/etc/keepalived/keepalived.conf
主nginxの
メインnginxの中のファイルを変更/Etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.40
}
}
準備nginxの
調製改変nginxのは/ etc / keepalivedの/keepalived.confファイル
BACKUPの状態を変更する必要があり、MASTERよりも低い優先度、マスタとvirtual_router_idの一貫した値:装置nginxのを設定する場合
! Configuration File for keepalived
global_defs {
router_id TWO
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 1
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.40
}
}
テスト(とき済ドッカさん)
Nginxはプライマリとバックアップの両方の開始keepalivedの
systemctl start keepalived
[root@nginx01 conf]# curl 192.168.1.40
wsd666
NFSの展開(ともに)
NFS操作
[root@localhost ~]# yum -y install nfs-utils
//下载nfs服务
[root@nfs ~]# mkdir /database
//创建共享目录
[root@nfs02 ~]# chmod 777 /database/
//设置权限
[root@nfs ~]# vim /etc/exports
//设置权限如下
/database *(rw,sync,no_root_squash)
サービスを開きます。
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl enable rpcbind
[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl enable nfs-server
docker01とdocker02テストNFS
[root@nfs01 ~]# vim /etc/rsyncd.conf
//建立rsync配置文件
uid = nobody
gid = nobody
use chroot = yes
address = 192.168.1.30
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.1.0/24
[wwwroot]
path = /database
read only = no
dont compress = *.gz *.bz2 *.rar *.zip
[root@nfs01 ~]# mkdir /database
//创建共享目录
[root@nfs01 ~]# rsync --daemon
//启动rsync
[root@nfs01 ~]# netstat -anpt | grep rsync
//查看端口
あなたはrsyncのサービスを再起動する必要がある場合は、次のものが必要です。
[root@localhost ~]# kill $(cat /var/run/rsyncd.pid)
//停止服务
[root@localhost ~]# rsync --daemon
//启动服务
[root@localhost ~]# kill -9 $(cat /var/run/rsyncd.pid)
「キル・プロセス番号」同じを使用して、プロセスIDを見つけるためにコマンド|または直接「grepのrsyncのは、netstat -anpt」を使用しています。
rsyncはrsyncのサービスを停止する第一の方法は、ファイルストレージサービスのプロセスを削除する必要があります。
[root@localhost ~]# rm -rf /var/run/rsyncd.pid
使用rsyncのバックアップツール
あなたはrsyncの同期ソースサーバを設定したら、その後、クライアントは、リモート同期ツールのrsyncを実行するために使用することができます。
rsyncのホストとの同期
rsync命令的选项:
-r:递归模式,包含目录及子目录中所有文件
-l:对于符号链接文件仍然复制为符号链接文件
-p:保留文件的权限标记
-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户使用)
-o:保留文件的属主标记(仅超级用户使用)
-D:保留设备文件及其他特殊文件
-a:归档模式,递归并保留对象属性,等同于 -rlptgoD
-v:显示同步过程的详细(verbose)信息
-z:在传输文件时进行压缩(compress)
-H:保留硬连接文件
-A:保留ACL属性信息
--delete:删除目标位置有而原始位置没有的文件
--checksum:根据对象的校验和来决定是否跳过文件
rsyncが高速増分バックアップツールのサポートである:
(1)ローカル複製;
(2)他のSSHと同期し;
(3)rsyncをホストと同期。
rsyncのホストとの手動同期
[root@localhost ~]# rsync -avz 192.168.1.1::wwwroot /root
或者
[root@localhost ~]# rsync -avz rsync://192.168.1.1/wwwroot /root
[root@nfs01 database]# vim index.html
xgp666
//创建测试目录
設定はinotify + rsyncのリアルタイム同期(すべて2)
(1)、ソフトウェアのインストール
rpm -q rsync //查询rsync是否安装,一般为系统自带安装
yum install rsync -y //若没有安装,使用yum安装
インストールパッケージのinotify
[root@nfs02 ~]# tar zxf inotify-tools-3.14.tar.gz
[root@nfs02 ~]# cd inotify-tools-3.14/
[root@nfs02 inotify-tools-3.14]# ./configure && make && make install
(2)調整カーネルパラメータはinotify
[root@nfs02 ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@nfs02 ~]# sysctl -p
//生效
(3)ライトトリガ同期スクリプト
#!/bin/bash
A="inotifywait -mrq -e modify,move,create,delete /database/"
B="rsync -avz /database/ 192.168.1.40::wwwroot"
$A | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -gt 0 ] ; then
$B
fi
done
これは、2台のサーバーが、ディレクトリを同期する必要がある間、ディレクトリは、ディレクトリ自体に権限を与えられている避けるために最大を配置する許可を必要とする、ここで注意しなければなりません。
[root@nfs01 inotify-tools-3.14]# chmod +x /opt/ino.sh
甲斐からセットアップスクリプトの起動
[root@nfs01 database]# vim /etc/rc.d/rc.local
/opt/ino.sh &
/usr/bin/rsync --daemon
ソースサーバー側のテスト
- スクリプトを実行した後、現在の端末は、リアルタイム監視インタフェースとなり、あなたは再オープン端末操作する必要があります。
- ソースサーバ共有モジュールディレクトリのファイル操作で行い、その後、バックアップサーバーに行くには、ファイルが同期されているリアルタイムで観察することができます。
ドッキングウィンドウの配置(両方とも)
[root@docker01 ~]# docker pull nginx
[root@docker01 ~]# mkdir -p /www
//创建挂载目录
あなたが作成した後にNFSがドッキングウィンドウ上のディレクトリをマウント
[root@docker01 ~]# mount -t nfs 192.168.1.30:/database /www
[root@docker01 ~]# docker run -itd --name nginx -p 90:80 -v /www/index.html:/usr/share/nginx/html/index.html nginx:latest
テスト
図1に示すように、正常に動作しているnginxのNGINX_MASTER、NGINX_BACKUPサーバ
NGINX_MASTER上:
NGINX_BACKUP上:
マスターサーバーNIC ens32正常な結合VIPを、バックアップがサイトにアクセスすることができ、通常のブラウザで拘束されませんでした。
2、nginxのコンテナの近くNGINX_MASTERを
コンテナが直ちに停止し、起動nginxの際に、問題はないnginxの起動スクリプト
3、keepalivedのサービスの近くNGINX_MASTER
NGINX_MASTER上:
NGINX_BACKUP上:
ens32カードのNGINX_BACKUPがVIPを結合インスタントを持っています、ウェブサイトの通常のブラウザにアクセスしてください。
4、keepalivedのサービス開始のNGINX_MASTER
NGINX_MASTER上:
NGINX_BACKUP上:
NGINX_MASTER ens32カードがサイトを適切にアクセスするブラウザを介して、VIPを再結合します。
5、通常のブラウザを介してWebサイトを参照してください、WEB_1サーバの電源を切ります。
トラブルシューティング
まず、問題のnginxの設定ファイルかどうかを確認する
通常の2つのkeepakivedのパラメータかどうかを
ドッキングウィンドウのnginxのは、ポートにマッピングされ、NFS共有ディレクトリをマウントします。
NFSは、ディレクトリのパーミッションを設定されています。rsyncを+ inotifyを、リアルタイムバックアップを行うには、シェルを書き込むように構成されています。
要約:
第1のミラーがnginxの引っ張られ、ミラーです。そして、nginxのミラーはそれを再構築入れて、それがメインの設定ファイルを変更することで、私たちが必要なものになることです。そして、港へのすべてのミラーをプッシュします
リバースプロキシを行う、nginxのビルドします。
ドッキングウィンドウを構築し、テスト表面を行うためにテストページを行うにはnginxのミラーをインストールし、NFSから来共有されています。
NFS設定し、データベースなどのデータ共有を実現するためには、永続的です。しかし、また、rsyncの+はinotifyを通じて、リアルタイムバックアップを行います。