新米インフラエンジニアの研修日記

とある会社で研修させて頂いたことを書いてます。

Solr (1台 ver.)

Solrとは


Solr
周りの人は「ソラー」って読んでます。

正式には、Apache Solr

Apacheが作ってるオープンソース全文検索ソフトウェアです。
検索エンジンのライブラリとして、Apache Luceneと呼ばれるものが使われています。

検索エンジンのことやSolrのことを解説されているスライドです。

www.slideshare.net

Solrでできることやできないことが詳しく書いてます。

www.tree-tips.com

構築環境


今回は1台での構成です。

サーバ:1台
OS:CentOS6.7

1台で複数のSolrを動かします。

f:id:the-casket-of-star:20160419081359p:plain

インストール


Zookeeperをインストール・設定できてない場合は、下記のZookeeperのインストールと設定を行います。
但し、単体のSolrなので、zookeeperの設定の
zoo.cfgで
zoo1,zoo2,zoo3はすべて127.0.0.1
portは1つずつずらした数字に設定する必要があります。
clientPort=
1つ目:2183
2つ目:2184
3つ目:2185

server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

the-casket-of-star.hatenablog.com


下記からバージョンを選択し、リンクのアドレスをコピーして、wgetします。
Index of /infosystems/apache/lucene/solr

今回は4.10.4を選択しております。

cd /tmp
wget http://ftp.kddilabs.jp/infosystems/apache/lucene/solr/4.10.4/solr-4.10.4-src.tgz
tar -zxvf solr-4.10.4.tgz
mv /tmp/solr-4.10.4 /opt/
ln -s /opt/solr-4.10.4 /opt/solr
cd /opt/solr

設定・起動


不要なファイル削除

rm -r example/solr/collection1/data/*

ノードをコピー

cp -r example example2

フロントで起動

./bin/solr -f

下記のエラーが出た場合

Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: centos-512mb-sgp1-01: centos-512mb-sgp1-01: unknown error

/etc/hostnameに自分のホスト名を書きます

/etc/sysconfig/network
http://mountainbigroad.jp/linux/host_mod.html

Webブラウザで、 " http:// IPアドレス:8983/solr " を開くと
以下の様な画面になります。
f:id:the-casket-of-star:20160417183452p:plain


左側のメニューの
Core Admin。
f:id:the-casket-of-star:20160417185135p:plain

Add Coreをクリックし、表示されたウィンドウに入力し、Add Coreします。
f:id:the-casket-of-star:20160417185216p:plain

name: <node1の名前>
instanceDIR:<collectionフォルダの絶対パス>
dateDir: <collectionフォルダの中のdataフォルダの絶対パス>
collection: <collectionフォルダ名>
config: <そのまま>
schema: <そのまま>
collection: <collection名>
shard:

f:id:the-casket-of-star:20160419091248p:plain


こんな感じのができます。

以上を3つ分作ります。

今のところは、ここまでしかわかってないので、続きはまた次回。

Zookeeper

  • Zookeeperとは

  • 構成

  • インストール

  • 設定方法


Zookeeperとは

正式にはApache Zookeeper
大規模分散システムでよく使われる、
Hadoopのサブプロジェクト の一つです。

分散アプリケーションを構築する上で必要となる、
設定管理、同期などの機能を提供するサービスです。

自前で同じものを用意しようとしたらすごく大変なので、
すごく助かるミドルウェアです。

構成

今回は、サーバー3台で構築しました。

OSは、CentOS6.7です。
Zookeeperは、3.4.8です。

インストール


Javaで動かすので、JDKをインストールします。
JDK
Java SE Development Kit 8 - Downloads

qiita.com

cd /tmp/
# wget --no-check-certificate --no-cookies - --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm
# rpm -Uhv jdk-8u45-linux-x64.rpm


Zookeeper本体
Apache ZooKeeper - Releases

ダウンロードして任意の場所に解答するだけでOKです。


設定方法

oss.infoscience.co.jp

zoo.cfgを作るように書いてあるのですが、
confの中にzoo_sample.cfgがあるので、コピーしてzoo.cfgを作ります。

conf/zoo.confに以下を追記
※zoo1, zoo2, zoo3 のところは各サーバーのIPアドレスを書きます。

server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888


server.XのX部分の数字を
それぞれzoo1~3の/tmp/zookeeoer/myidに書く。

# mkdir -p   /tmp/zookeeper
# echo '1' > /tmp/zookeeoer/myid

# mkdir -p   /tmp/zookeeper
# echo '2' > /tmp/zookeeoer/myid

# mkdir -p   /tmp/zookeeper
# echo '3' > /tmp/zookeeoer/myid


上記を3台すべてのサーバに用意します。

3台すべてのサーバで

bin/zkServer.sh start

を実行し、

bin/zkServer.sh status

をすると、

1台は

ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader

2台は

ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower

が表示されます。


leaderはランダムで自動的に決まります。
そして、leaderをshutdownした場合、
残り2台のうちどちらかのサーバがleaderになります。

起動時

f:id:the-casket-of-star:20160417023703p:plain


leaderのサーバが壊れたor落ちた

f:id:the-casket-of-star:20160417023957p:plain

Hadoopについて


Hadoopとは・・・

集中管理型の分散システム
並列分散処理を実現するミドルウェアです。

f:id:the-casket-of-star:20160414212930p:plain

2つのコンポーネントで構成されています。
但し、バージョンによって構成が異なります。

分散ファイルシステム
 HDFS(Hadoop FileSystem)
 HDFSは、データを貯める機能

②並列分散処理フレームワーク
 貯めたデータを処理する機能

■0.2 - 1.1系
 MapReduce
 大量の件数のデータがあった時に複数ワーカーで並列に処理できる仕組み

■2.x系
YARN
 (Yet-Another-Resource-Negotiator)
 分散処理のリソースを制御する仕組み

MapReduceからYARNになって・・・

Hadoop 1系(MapReduce)での仕組みでは3000~4000ノードがクラスタの限界でしたが、YARNの仕組みによって10000ノード程度のクラスタも構成することが可能になりました。

分散処理技術「Hadoop」とは:NTTデータのHadoopソリューション


MapReduceの仕組み


Aさん、Bさん、Cさんの数学、国語、英語の成績表があるとします。

f:id:the-casket-of-star:20160415001751p:plain

Mapが科目と成績をKeyとValueの関係でデータをまとめます。

Reduceが出現回数を数えたり、1は4つある等の集計を行います。

エコシステム


Hadoopエコシステムとして使う「エコシステム」は、
連携関係を通じて発展していく状況を指す言葉としての意味で、
中核となる技術を中心とした応用技術や関連プロダクト等の状況全体を指します。

books.google.co.jp

2.x系以降のHadoopの話ですが、
一番上にあるのがコンテナで、その中にMapReduceの処理をするHiveやデータ分析プログラムの作成を支援するPigといったコンポーネントをコンテナに用意し、自由にカスタマイズして処理することができます。

HDFSから最終的な処理結果のデータを貯めておくハード側との通信速度が大量のデータを捌くのに重要だそうです。
f:id:the-casket-of-star:20160415004648p:plain

AWSの監視&DBについて

おしながき

  • AWSの監視

  • DB


AWSの監視

ELB (Elastic LoadBalancer)
ロードバランシング以外にも機能があります。

①メトリクス監視
HTTPCode_ELB_4XX等のメトリクスにより、配下のEC2の状態を判定します。
dev.classmethod.jp



②ヘルスチェック(死活監視)
docs.aws.amazon.com
f:id:the-casket-of-star:20160414002235p:plain
ELBでは、死んでるサーバのトラフィック止めれます。
起動しているけれども、使えないインスタンスを消せます。
AutoScalingで使えないインスタンスを削除し、
有効的に使うことができます。


CloudWatch
AWSが見れるところしか見れません
・Disk容量は見れない
・ CPU、 DiskI/O、 NetWork I/Oは見れる

それ以外のメトリクスが見たい場合は、カスタムメトリクスを使えるように設定する。

qiita.com



DBの種類

①DynamoDB
f:id:the-casket-of-star:20160413205120p:plain


②ElastiCache
f:id:the-casket-of-star:20160413205150p:plain

③RedShift
f:id:the-casket-of-star:20160413205219p:plain

④CloudSearch
f:id:the-casket-of-star:20160413205322p:plain


DBにセッションをもたせる場合
・波がある場合は、ElastiCache
・予測可能でハイトラフィックが続くようであれば、DynamoDB

RDSだけの機能
・リレーショナル
トランザクション

DynamoDB
・高トラフィック
・強い一貫性→CAS操作ができる
・在庫管理にも使える

商品さがす
・DynamoDB
・CloudSearch

すぐオンプレからの移行をしたい場合
RDSとElastiCache

EBSとネットワーク

EC2を作成するときに関連することをまとめます。

  • EBSの種類

  • ストレージタイプの種類

  • ネットワーク周りの上限値

  • セキュリティグループ


EBSの種類

f:id:the-casket-of-star:20160413200440p:plain

  • マグネティック(磁気ディスク)
     →スピードを求めない時に選ぶ

  • Provisioned IOP →入力出力パフォーマンスを制御できる
    →RDSとして使うときに選ぶ

    ストレージタイプの種類

    インスタンスの作成を行う時に、
    rootデバイスとして
    ①EBS
    インスタンスストア
    の2種類があります。

    ①EBS
     インスタンスをstopしてもデータが保持されます。

    インスタンスストア
     インスタンスをstopすることができません。
     terminateするしかできないので、データが消えてしまいます。
     S3-backed AMIというAMIなので、裏側はS3です。

    d.hatena.ne.jp


ネットワーク周りの上限値

インスタンスに付随するインターフェイスIPアドレスには上限があります。
ENI (Elastic Network Interface)
EIP (Elastic IP)

上限値の一覧はこちら↓
docs.aws.amazon.com

セキュリティグループ

インスタンスにアタッチしたIPアドレスをつけかえたい場合、
EIPだけを移動するのではなく、
ENIと一緒にインスタンスに移動することでセキュリティグループがくっついているので良いです。

セキュリティグループを見れば、
通信経路がわかり、どこからどこに対して許可しているのかがわかります。

IAMで誰がセキュリティグループを見れるかも制御できるので、
きちんと管理していく必要があります。

AWS の mBaaS

mBaaS(mobile backend as a Service)
「エムバース」と読みます。

バックエンドのコードをほとんど書かなくてもアプリを開発できるようにするサービスです。

  • SNS

  • Cognite

  • DeviceFarm

  • Mobile Analytics


SNS

f:id:the-casket-of-star:20160412214257p:plain
プッシュ通知サービスです。

Topic:メッセージを送信し、通知を受信するチャネル
subscriber:受信するアプリケーション

subscriberとして用意されているのが2種類あります。

f:id:the-casket-of-star:20160413081209p:plain

①HTTP endpoint
1 つ以上の HTTP または HTTPS endpointに通知メッセージを送信できます。
docs.aws.amazon.com


②SQS
Topicにメッセージを発行することができ、SNS が SQS メッセージをサブスクライブされたキューに送信します。
docs.aws.amazon.com


Cognite

f:id:the-casket-of-star:20160412214829p:plain
ユーザーの個人データを同期する機能を提供します。

dev.classmethod.jp


1. Sync
同一ユーザーが別の端末から使用したゲームのスコアを同期できます。
SyncがIDをもっているから機種変しても大丈夫です。

他のクラウドサービスと一緒に使用し、クラスタ管理ができます。
AWSとMicrosoftAzureとGoogleCloudPlatformでクラスタ構成を組んだ時にSyncがマスタになります。
これだけで単純にDisasterRecovery対策になります。
料金が安くなったら、どれかだけを増やして一番コストパフォーマンスの良い構成にすることもできます。

2. Auth
IAMで 一時的なAccess SecretKeyを発行して、
直接DynamoDBにアクセスができるようになります。
負荷が各ユーザのデバイス側になるのでサーバー側の影響が少なくて助かります。

AWS Security Token Service(AWS STSdocs.aws.amazon.com


Googleアカウントを使用したOATH認証の場合は、

Googleアカウントに紐付いたIAMロールを作っておく
STSを通して、AccessSecretKEYを発行し、認証する
③終わったらSNS subscriberに登録する

という流れになります。

f:id:the-casket-of-star:20160413093300p:plain


qiita.com

以降はあまり情報がありませんでしたので、簡単に紹介だけです。
別の機会に詳しく書けたらと思います。

DeviceFarm

f:id:the-casket-of-star:20160412214600p:plain
スマホタブレットを使ったアプリのテストをクラウド上でできるサービスです。
テストデバイス一覧はこちら↓

aws.amazon.com


dev.classmethod.jp

qiita.com


Mobile Analytics

f:id:the-casket-of-star:20160412214842p:plain

アプリケーション分析の収集、表示、エクスポートをするサービス

aws.typepad.com

dev.classmethod.jp

AWS の DaaS

DaaSとは、Desktop as a Serviceです。
クラウド上でPCと同じ作業ができる環境がAWSにも用意されています。

  • WorkSpace

  • WorkDocs

  • WorkMail

  • Directory Service

f:id:the-casket-of-star:20160412101436p:plain



WorkSpace

f:id:the-casket-of-star:20160412022812p:plain

クラウドで動作する管理型デスクトップコンピューティングです。
構造としては、VPC上にデスクトップが立ち上がるそうです。

recipe.kc-cloud.jp

  1. VPNが使える。
    回線速度が512kbpsあれば、繋がるそうです。

  2. 料金
    スペックが
    2 vCPU、4 GiB メモリ、50 GB ユーザーストレージ
    だと1台 6,000円/月くらい
    office等のアプリケーションを追加するのに+2,000円/月くらい

  3. クライアント側はWin/Macからしか使えない
    Linuxが使えないので、どちみちWindowsMacのPCが必要になります。

WorkDocs

f:id:the-casket-of-star:20160412022839p:plain
文書管理クラウドサービス
SharePointに近いものだそうです。

blog.nedia.ne.jp

WorkMail

f:id:the-casket-of-star:20160412022849p:plain

Gmailのようなものです。

recipe.kc-cloud.jp


Directory Service

f:id:the-casket-of-star:20160412022934p:plain
ActiveDrectoryのホスト管理を行います。

recipe.kc-cloud.jp

recipe.kc-cloud.jp


VPCをDirectConnectで繋いで
オンプレのActiveDirectoryにも繋ぐことができるそうです。