IT Notebook

ITについての備忘録的なブログです

ELB配下でのApacheのIPアドレス制限方法

こんにちは。マサルです。 AWSのELB配下のEC2のApacheで送信元IPアドレス制限をかけるにはちょっとした工夫が必要です。

通常のApacheのIP制限

例えばApacheで「/wp-admin」に「999.999.999.999」からのアクセスのみ許可する場合、次のような設定になります。

<Location /wp-admin>
  order deny,allow
  deny from all
  allow from 999.999.999.999
</Location>

しかしながら、ELB配下でEC2のApacheIPアドレス制限を設定する場合は、送信元のIPはELBになってしまうので別の方法で設定する必要があります。

ELB配下でのApacheのIP制限

ELB配下のEC2のApacheで送信元のIPアドレスで制限する場合は、本来の送信元IPアドレスを「X-Forwarded-For」ヘッダーから取得する必要があります。

<Location /wp-admin>
  SetEnvIf X-Forwarded-For "999\.999\.999\.999.*" allowed_ip
  Order Deny,Allow
  Deny from all
  Allow from env=allowed_ip
</Location>

複数の場合は「SetEnvIf」を追加するだけです。例えば、IPアドレス「999.999.999.999」「888.888.888.888」からのリクエストのみ許可する場合はこんな感じ。

<Location /wp-admin>
  SetEnvIf X-Forwarded-For "999\.999\.999\.999.*" allowed_ip
  SetEnvIf X-Forwarded-For "888\.888\.888\.888.*" allowed_ip
  Order Deny,Allow
  Deny from all
  Allow from env=allowed_ip
</Location>

以下の記事を参考にさせて頂きました。

ELB配下のApacheでのアクセス制御

ElastiCacheのRedisのrdbファイルのバックアップ方法

こんにちは。マサルです。 今度システムリプレースでElastiCacheのRedisのデータを移行しなくてはならず、ElastiCacheのRedisのrdbファイルをどのように取得するのか調査しました。サーバ上であればbgslaveで一発なのですが。。。

EC2上にRedisをインストールしてレプリケーション

EC2上にRedisをインストールして、ElastiCacheのRedisからレプリケーションできるのではないか。それが可能であればEC2上でbgslaveでrdbファイルを簡単に取得できると思った。

※こんなイメージ

Master(ElastiCache-Redis) ---> Slave(EC2-Redis)

SlaveのRedisのコンフィグ

■「/etc/redis/6379.conf」にslaveofを追加
slaveof <ElastiCacheのRedisのDNS> 6379

■Redis再起動
service redis_6379 restart

しかしながら、Slaveで以下のようなエラーが出力されつづけてしまう。

[4382] 10 Jun 11:29:57.091 * Connecting to MASTER <ElastiCacheのRedisのDNS>:6379
[4382] 10 Jun 11:29:57.092 * MASTER <-> SLAVE sync started
[4382] 10 Jun 11:29:57.095 * Non blocking connect for SYNC fired the event.
[4382] 10 Jun 11:29:57.097 * Master replied to PING, replication can continue...
[4382] 10 Jun 11:29:57.102 * Partial resynchronization not possible (no cached master)
[4382] 10 Jun 11:29:57.105 * Master does not support PSYNC or is in error state (reply: -ERR unknown command 'PSYNC')
[4382] 10 Jun 11:29:57.105 * Retrying with SYNC...
[4382] 10 Jun 11:29:57.108 # MASTER aborted replication with an error: ERR unknown command 'SYNC'

エラーを調べると、「AWS Developer Forums」でこのような記事を発見! Export redis data - unknown command ‘sync’

よくよく見ると、ElastiCacheのRedisの2.8.22以降はRedisのSYNCコマンドがDisableにされているとのこと。ちーん。

結論

ElastiCacheのRedisの2.8.22以降は、EC2のRedisへのレプリケーションはできない。

ElastiCacheのRedisのバックアップをS3にコピー

ということで他の方法を模索。以下の記事を発見!ElastiCacheのRedisのバックアップをrdbファイルとして、S3にへ転送できるとのこと。

ほんとにこの通りにやるとS3へrdsファイルを作成することができたので、詳細は割愛させて頂きます。

【新機能】Amazon ElastiCache – RedisのスナップショットをS3にエクスポートする

S3のrdbファイルを元にして、ElastiCacheの起動はまだ試したことないがそのあたりは色々情報があるので多分大丈夫。なんとかシステムリプレースを乗り越えられそうで一安心です。

Nginx - Tomcatと連携させた時にハマった件

先日Tomcatで直接受け付けていたサーバをNginxで受け付けるようにして リバースプロキシでTomcatへ渡す設定した時にハマったので、その時の備忘録となります。

ハマったこと

  • リパースプロキシ設定は特に問題なかったが、ログインするとなぜか「 127.0.0.1 で接続が拒否されました。 」と表示されエラーとなる。

対応

  • リバースプロキシの前に「 proxy_set_header Host $http_host; 」を設定する。

初期設定

server {

...

    location / {
    proxy_pass http://127.0.0.1:8080;
  }
}

変更後設定

server {

...

    location / {
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:8080;
  }
}

※参考

Nginx - CSSファイルが更新されない時の対応について

以前CSSファイルが更新されないという減少が発生した時の対応となります。

原因

  • Nginxで「sendfile on;」というパラメータが有効になっていた。

このパラメータを有効にしていると、kernelのシステムコール「sendfile」を使用して、kernel内にファイルを複写するようです。

対応

vi /etc/nginx/nginx.conf
---
    sendfile off;
---
sudo service nginx restart

デフォルトはoffのよう。いつ設定されたのかは不明。。。

Linux - プロンプトにホスト名を表示する方法

Amazon Linuxのデフォルトのプロンプトはこんな感じです

[ec2-user@ip-10-10-10-10 ~]$

このサーバのホスト名を「test1」とした場合、以下のようなコマンドでとりあえず実行すると変更されるのですが

[ec2-user@ip-10-10-10-10 ~]$ sudo hostname test1
[ec2-user@ip-10-10-10-10 ~]$ exec bash
[ec2-user@test1 ~]$

再起動するとまた元に戻ってしまいます

[ec2-user@ip-10-10-10-10 ~]$

以下のように修正すれば再起動後でも反映されます

[ec2-user@ip-10-10-10-10 ~]$ sudo vi /etc/sysconfig/network
----------
HOSTNAME=test1
----------
[ec2-user@ip-10-10-10-10 ~]$ sudo init 6

再起動後ログインしたら変更される

[ec2-user@test1 ~]$

サーバを設定するときにたまにググっていたので、備忘録的な記載となります

sysbench - sysbenchコマンドサンプル

sysbenchのコマンドサンプル。自分用にメモ。

CPU処理性能

sysbench --test=cpu --cpu-max-prime=20000 --num-threads=16 run > sysbench_cpu_16.txt
sysbench --test=cpu --cpu-max-prime=20000 --num-threads=128 run > sysbench_cpu_128.txt

Disk処理性能

sysbench --test=fileio --file-total-size=10G prepare
sysbench --test=fileio --file-total-size=10G --file-test-mode=seqwr --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_seqwr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=seqrewr --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_seqrewr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=seqrd --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_seqrd.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrd --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_rndrd.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndwr --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_rndwr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrw --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_rndrw.txt

sysbench --test=fileio --file-total-size=10G --file-test-mode=seqwr --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_seqwr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=seqrewr --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_seqrewr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=seqrd --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_seqrd.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrd --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_rndrd.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndwr --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_rndwr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrw --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_rndrw.txt
sysbench --test=fileio --file-total-size=10G cleanup

Memory処理性能

sysbench --test=memory --num-threads=16 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=read --memory-access-mode=seq run > sysbench_memory_16_read_seq.txt
sysbench --test=memory --num-threads=16 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=read --memory-access-mode=rnd run > sysbench_memory_16_read_rnd.txt
sysbench --test=memory --num-threads=16 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=write --memory-access-mode=seq run > sysbench_memory_16_write_seq.txt
sysbench --test=memory --num-threads=16 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=write --memory-access-mode=rnd run > sysbench_memory_16_write_rnd.txt

sysbench --test=memory --num-threads=128 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=read --memory-access-mode=seq run > sysbench_memory_128_read_seq.txt
sysbench --test=memory --num-threads=128 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=read --memory-access-mode=rnd run > sysbench_memory_128_read_rnd.txt
sysbench --test=memory --num-threads=128 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=write --memory-access-mode=seq run > sysbench_memory_128_write_seq.txt
sysbench --test=memory --num-threads=128 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=write --memory-access-mode=rnd run > sysbench_memory_128_write_rnd.txt

スレッド処理性能

sysbench --test=threads --num-threads=16 run
sysbench --test=threads --num-threads=128 run

Mutex処理性能

sysbench --test=mutex --num-threads=16 run
sysbench --test=mutex --num-threads=128 run

roadworker - [ERROR] ArgumentError: invalid configuration option `:credential_provider' の対応方法

roadworkerのバッチ処理を別サーバに移行した時にエラーにハマったのでメモ このバッチ処理複数AWSアカウントに対応するため「--profile」を使用している その辺りでエラーがでているようす

環境

対応

roadworkerのバージョンを比較すると前の環境では、roadworker (0.5.4)、新環境ではroadworker (0.5.5)だったので、合わせてみたらエラーが解消された

gem uninstall roadworker -v 0.5.5
gem install roadworker -v 0.5.4

gemバージョンの確認方法

これは便利

gem list