ホームページ >運用・保守 >Nginx >Nginx を使用して Mogilefs 分散ストレージを置き換える方法

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

WBOY
WBOY転載
2023-05-12 13:55:17978ブラウズ

1. 分散ストレージ システムの概要

情報技術の継続的な発展により、情報技術は私たちに利便性をもたらすだけでなく、データ量や情報間のつながりも増大しています。情報技術が急速に発展し続けるにつれて、ますます複雑化する関連付け、増加するデータ アクセスの同時実行性、ますます高度になる I/O 要件、ますます複雑になるデータ型などの問題は、解決する必要がある緊急の問題となっています。分散ストレージ システムの出現により、上記の問題のほとんどは大幅に解決されました。

分散ストレージ システムは、データを複数の独立したデバイスに分散して保存します。従来のネットワーク ストレージ システムでは、集中管理されたストレージ サーバーを使用してすべてのデータを保存していましたが、ストレージ サーバーはシステム パフォーマンスのボトルネックとなり、信頼性とセキュリティの焦点となり、大規模ストレージ アプリケーションのニーズを満たすことができませんでした。分散ストレージ システムは、スケーラブルなシステム構造を採用し、複数のストレージ サーバーを使用してストレージ負荷を共有し、ロケーション サーバーを使用してストレージ情報を検索することで、システムの信頼性、可用性、アクセス効率が向上するだけでなく、拡張も容易です。 。

分散ストレージシステムは、インターフェースの種類によって一般分散ストレージと専用分散ストレージに分類できます。一般的な分散ストレージとは、ファイル システム インターフェイスがなく、API インターフェイスを介してアクセスする必要があることを意味します。専用分散ストレージは、分散ファイル システムとも呼ばれます。通常、ファイル システム インターフェイスがあり、直接マウントできます。一般的な分散ストレージには mogilefs、fastdfs などが含まれ、専用の分散ストレージ システムには moosefs などが含まれます。

2. mogilefs

mogilefs は、オープン ソースの分散ファイル ストレージ システムです。mogilefs は、大量の小さなファイルが保存される作業シナリオに適しています。 livejournal 開発傘下の danga interactive 会社のチームは、memcached、mogilefs、perlbal などを含む多くの有名なオープンソース プロジェクトを開発してきました。

1. Mogliefs アーキテクチャ図:

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

##2. Mogliefs を構成するコンポーネント:

1.trackers(mogilefsd): mogliefs のコア コンポーネント。その主な機能は、(レプリケーション) ノード ファイルのレプリケーション、(削除) ファイルの削除、(クエリ) メタデータ クエリ、(モニター) ヘルス モニタリング、(リーパー) ストレージ障害のリセットです。等メタデータ サーバーと呼ばれることが多いですが、メタデータを保存するのではなく、mysql などのデータベースにメタデータを保存します。アーキテクチャの信頼性を確保するために、通常は複数のトラッカーが存在します。トラッカーは、メタデータ情報の処理のみを担当する並列エージェントとみなすことができます。

2. データベース: データベースはモグリフのメタデータを保存するために使用され、トラッカーがデータを管理します。したがって、通常はhaを行うことが推奨されます。

3.mogstored (ストレージ ノード): 実際のファイルが保存される場所。実際の文書のコピーを少なくとも 2 部保管するのが一般的です。

3. デモンストレーション トポロジ図の例

トラッカーと mogstored を 3 つのノードに同時にインストールし、いずれかのノードを選択して mysql をインストールします。運用環境では、MySQL を個別にデプロイし、マスター/スレーブ レプリケーションを実行することが最善です。 trackers と mogstored は異なるノードに個別にデプロイすることもできますが、実際の運用環境に応じて決定する必要があります。ここでの主な目的は、mogilef をデモンストレーションすることであり、mysql のマスター/スレーブ レプリケーションをデモンストレーションすることではありません。 mogilef をマウントしたい場合は、fuse を使用してそれを実現できます。

次の点に注意してください: mogilefs によって保存されるファイル URL は非常に特殊です (mogilefs のファイル名の生成プロセスについては後で説明します)。ファイル URL は 6060/ に似ている可能性があります。0000/0000/0000/00000021.jpg のような形式はユーザー フレンドリーではないため、ユーザーは image.hello.com/21.jpg のような直感的な URL を必要とする場合があります。したがって、通常、nginx は mogilef の代わりに使用されます。

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

4. システム環境とインストール

mogilefs は、互換性の問題がある可能性があることを考慮すると、比較的古いですが成熟した分散ストレージです。 centos7. ここではcentos6でのデモを行います。

オペレーティング システム: centos リリース 6.6

mogilefs: 2.46

nginx: 1.10

mysql: 5.1

ip 割り当て:

n1:192.168.29.111、n2:192.168.29.112、n3:192.168.29.113、n4:192.168.29.114

構造は上の図に示されています。

1. mysql、mogilefsd、および mogstored を n1 ノードにインストールし、n1 をトラッカーおよびストレージ ノードとして構成します

Mysql は yum を使用して直接インストールされます。

~]# yum install -y mysql mysql-server

mogilefs のトラッカーとストレージ ノード コンポーネントをインストールします。インストール中に、perl 関連の依存関係パッケージをインストールする必要があります。依存関係パッケージは次のとおりです:

perl-danga-socket-1.61-1.el6.rf.noarch.rpm
perl-io-stringy-2.110-1.2.el6.rfx.noarch.rpmperl-net-netmask-1.9015-8.el6.noarch.rpm
perlbal-1.78-1.el6.noarch.rpmperl-perlbal-1.78-1.el6.noarch.rpm
perlbal-doc-1.78-1.el6.noarch.rpmperl-io-aio-3.71-2.el6.x86_64.rpm

上記の依存関係パッケージは、mogilefs の前にインストールする必要がありますインストールすることができます。コンポーネントのインストール:

yum install -y mogilefs-server-mogstored-2.46-2.el6.noarch.rpm mogilefs-server-mogilefsd-2.46-2.el6.noarch.rpm mogilefs-server-2.46-2.el6.noarch.rpm

mogilefs-server-mogilefsd の構成:

~]# vim /etc/mogilefs/mogilefsd.conf #mogilfs trackers的主配置文件
# enable daemon mode to work in background and use syslog
daemonize = 1 #是否以守护进程的方式运行。
# where to store the pid of the daemon (must be the same in the init script)
pidfile = /var/run/mogilefsd/mogilefsd.pid #pid文件路径
# database connection information
db_dsn = dbi:mysql:mogilefs:host=192.168.29.111 #数据库的地址
db_user = moguser #配置数据库的用户名及密码
db_pass = 123456
# ip:port to listen on for mogilefs client requests
listen = 0.0.0.0:7001 #监听的地址与端口
# optional, if you don't define the port above.
conf_port = 7001 #默认端口
# number of query workers to start by default.
query_jobs = 10 #查询进程数量
# number of delete workers to start by default.
delete_jobs = 1 
# number of replicate workers to start by default.
replicate_jobs = 5
# number of reaper workers to start by default.
# (you don't usually need to increase this)
reaper_jobs = 1
# number of fsck workers to start by default.
# (these can cause a lot of load when fsck'ing)
#fsck_jobs = 1
# minimum amount of space to reserve in megabytes
# default: 100
# consider setting this to be larger than the largest file you
# would normally be uploading.
#min_free_space = 200
# number of seconds to wait for a storage node to respond.
# default: 2
# keep this low, so busy storage nodes are quickly ignored.
#node_timeout = 2
# number of seconds to wait to connect to a storage node.
# default: 2
# keep this low so overloaded nodes get skipped.
#conn_timeout = 2
# allow replication to use the secondary node get port,
# if you have apache or similar configured for get's
#repl_use_get_port = 1

構成を変更した後、データベースに入ってリモート接続できる root ユーザーを作成するか、mogdbsetup を使用してデータベースを初期化します。

mysql> grant all on mogilefs.* to 'moguser'@'192.168.29.%' identified by '123456'; #创建用户moguser,拥有管理mogilefs库的所有权限,并允许192.168.29.*的用户远程连接。
mysql> flush privileges;
mysql> quit
~]# mogdbsetup --dbhost=127.0.0.1 --dbuser=moguser --dbpass=123456

初期化が完了すると、作成された mogilefs ライブラリとその内部のテーブルが mysql で確認できます。

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

mogilefs を起動し、ポート 7001 を確認します。リスニング状態です:

~]# service mogilefsd start
starting mogilefsd      [ ok ]
~]# ss -lnt

注:可以在n2、n3节点都安装trackers服务,从而消除单点故障风险也能平均i/o压力。

3.在n1上配置storage node

storage node配置文件路径为/etc/mogilefs/mogstored.conf:

~]# vim /etc/mogilefs/mogstored.conf
maxconns = 10000 #最大并发连接数
httplisten = 0.0.0.0:7500 #mogilefs数据的传输是通过http协议实现的,这里是监听的地址和端口
mgmtlisten = 0.0.0.0:7501 #健康监测的监听地址和端口
docroot = /mogliefs/mogdata #数据的存储路径,目录的属组和属主必须是mogilefs

创建数据存储目录并修改属组和属主为mogilefs:

~]# mkdir -pv /mogliefs/mogdata
~]# chown -r mogilefs.mogilefs /mogliefs/

启动mogstored,查看进程是否正常启动端口是否监听:

~]# service mogstored start
~]# ss -lnt #监听端口为7500、7501

4.按照n1的步骤在节点n2、n3上安装mogilefs,并将n1上的配置文件复制到n2、n3。

~]# scp /etc/mogilefs/*.conf root@192.168.29.112:/etc/mogilefs/
~]# scp /etc/mogilefs/*.conf root@192.168.29.113:/etc/mogilefs/

启动mogstored服务并确认监听:

~]# service mogstored start
~]# ss -lnt #监听端口为7500、7501

5.用在n1上用mogadm命令将所有节点整合成集群。

添加存储节点,并检查:

1 ~]# mogadm host add 192.168.29.111 --ip=192.168.29.111 --port=7500 --status=alive
2 ~]# mogadm host add 192.168.29.112 --ip=192.168.29.112 --port=7500 --status=alive
3 ~]# mogadm host add 192.168.29.113 --ip=192.168.29.113 --port=7500 --status=alive
~]# mogadm check

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

若想让mogilefs集群中的存储被识别成不同设备,需要在创建的/mogliefs/mogdata目录下再创建名为dev*的目录,使每个节点被当做存储设备使用。mogilefs是将冗余存储在不同设备中的,每一个节点都应该被识别为不同的设备。

在n1、n2、n3上的/mogliefs/mogdata/目录下分别创建dev1,dev2,dev3目录,并在trackers上添加设备:

1 ~]# mogadm device add 192.168.29.111 1
2 ~]# mogadm device add 192.168.29.112 2
3 ~]# mogadm device add 192.168.29.113 3

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

6.创建domain和class

在mogilefs中,在多个节点上为了方便文件副本管理,通常在设备中不会以文件为单位进行管理,而是以class(类)做管理,复制删除等操作都是以class为最小单位进行的。每个class中可以放很多文件,class的容积也不是固定的。

在mogilefs的存储空间中,所有数据文件都在同一平面,所以不能有同名的情况发生,这样会影响mogilefs的灵活性,所以引入了domain(名称空间)的概念。domain包含class,在不同的domain中可以有相同的文件名。

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

~]# mogadm domain add imgs #创建名为imgs的domain
~]# mogadm domain add text #创建名为text的domain
~]# mogadm domain list #查看domain list

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

可以自定义class的属性,格式为:mogadm class add [opts]

~]# mogadm class add imgs png --mindevcount=3 --hashtype=md5 #在domain imgs中定义名为png的class,在不同设备中复制3份,并用md5做校验
~]# mogadm class add imgs jpg --mindevcount=3 --hashtype=md5 #在domain imgs中定义名为jpg的class,在不同设备中复制3份,并用md5做校验
~]# mogadm domain list

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

7.使用mogilefs做上传下载测试

mogilefs可以用自建的api接口进行交互,其中有很多用于管理存储数据的命令。例如上传数据命令为mogupload,查看数据命令为mogfileinfo等。

例:测试将文件/test/123.png上传至mogilefs集群(文件事先在本地准备好):

~]# mogupload --trackers=192.168.29.111 --domain=imgs --class=png --key='/111.png' --file='/test/123.png' #通过ip为192.168.29.111的trackers将123.png文件上传,并保存至domain为imgs,class为png的空间中,并重命名为111.png
~]# mogfileinfo --trackers=192.168.29.111 --domain=imgs --class=png --key='/111.png' #查看domain为imgs,class为png中key为111.png的文件的存储情况。

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

至此,mogilefs分布式储存集群就搭建完成了,但若想要使客户端能与之通信,就需要在接口上进行编程,这样就很麻烦了,好在我们能用nginx做反代进行通信。下面来演示nginx反代mogilefs的步骤。

5.nginx反代mogilefs

1.打开n2,n3的mogilefsd服务,将3个节点全部设置为trackers(保证配置文件与n1相同):

~]# service mogilefsd start

2.在n4节点编译安装nginx

安装依赖包:

~]# yum install gcc gcc-c++ perl pcre-devel openssl openssl-devel

下载nginx编译安装包nginx-1.10.3.tar.gz与nginx_mogilefs模块nginx_mogilefs_module-1.0.4.tar.gz并展开:

~]# ls
nginx-1.10.3   nginx_mogilefs_module-1.0.4
nginx-1.10.3.tar.gz nginx_mogilefs_module-1.0.4.tar.gz
~]# cd nginx-1.10.3
./configure \
> --prefix=/usr \
> --sbin-path=/usr/sbin/nginx \
> --conf-path=/etc/nginx/nginx.conf \
> --error-log-path=/var/log/nginx/error.log \
> --http-log-path=/var/log/nginx/access.log \
> --pid-path=/var/run/nginx/nginx.pid \
> --lock-path=/var/lock/nginx.lock \
> --user=nginx \
> --group=nginx \
> --with-http_ssl_module \
> --with-http_flv_module \
> --with-http_stub_status_module \
> --with-http_gzip_static_module \
> --http-client-body-temp-path=/var/tmp/nginx/client/ \
> --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
> --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
> --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
> --http-scgi-temp-path=/var/tmp/nginx/scgi \
> --with-pcre \
> --with-debug \
> --add-module=../nginx_mogilefs_module-1.0.4/ #一定记得添加mogilefs模块所在的路径,不可少。
~]# make & make install

  添加nginx用户并启动nginx:

~]# useradd -s /sbin/nologin -m nginx
~]# /usr/sbin/nginx

3.配置nginx

单trackers示例:

location /imgs/ {
   mogilefs_tracker 192.168.29.111:7001; #单trackers示例
   mogilefs_domain imgs; #指定domain
   mogilefs_class png jpg; #指定class

   mogilefs_pass { #传输相关配置
    proxy_pass $mogilefs_path;
    proxy_hide_header content-type;
    proxy_buffering off;
   }
  }

多trackers示例:

在nginx配置中的http配置段添加调度模块:

1 upstream mogsvr {
2   server 192.168.29.111:7001;
3   server 192.168.29.112:7001;
4   server 192.168.29.113:7001;
5   }

在nginx配置中的server配置段添:

location /imgs/ {
    mogilefs_tracker mogsvr;
   mogilefs_domain imgs;
   mogilefs_class png jpg;

   mogilefs_pass {
    proxy_pass $mogilefs_path;
    proxy_hide_header content-type;
    proxy_buffering off;
   }
  }

重新启动nginx,并通过nginx访问之前上传的图片:

Nginx を使用して Mogilefs 分散ストレージを置き換える方法

以上がNginx を使用して Mogilefs 分散ストレージを置き換える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。