zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

【さくらのクラウド】マイアーカイブからのサーバ作成時のディスク修正機能について

さくらのクラウドの「マイアーカイブ」からサーバ立てたらIPは衝突するわresolv.confは書き換えられるわでハマった。

【ひとまずの結論】

アーカイブ元のサーバでネットワークの設定をカスタマイズしている場合、そもそも[ディスク修正]機能は利用するべきではない。

□ディスク修正対象ファイルは以下にまとめられている。

cloud-news.sakura.ad.jp

3. ディスク修正機能により修正される項目(指定可能な修正項目)

例えば、スイッチ配下のインナーネットワークの端末のifcfg-eth0に

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
GATEWAY0=192.168.1.100
NETMASK=255.255.255.0
IPADDR0=192.168.1.101

みたいにセカンダリありきの書式で設定してしまっていると(CentOS7の例)、アーカイブから起動するときに「ディスク修正」で
GATEWAY=192.168.0.100
IPADDR=192.168.1.102
で書き換えを指定したとき

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
GATEWAY0=192.168.1.100
IPADDR0=192.168.1.101
GATEWAY=192.168.1.100
PREFIX=24
DNS2=210.188.224.11
IPADDR=192.168.1.102
DNS1=210.188.224.10

みたいになって、アーカイブ元のIPが生きたままになってしまい、既存サーバ群と衝突する(衝突した……)
ネットワークの設定をカスタマイズしている場合、そもそもディスクの修正機能は利用するべきではない。
逆にクラウドで運用するメリット(スケールのしやすさなど)を享受するためには、できるだけクラウド提供側の設定を遵守すべき。

4. ディスク修正機能により修正される項目(自動的に行う修正項目)

メモまで。

【さくらのレンタルサーバ】RewriteCond %{HTTP_HOST} でwww.hogehogeとhogehogeを分岐

【概要】

さくらのレンタルサーバの[サイトに関する設定]-[ドメイン設定]で

マルチドメインとして使用する(推奨)

を選択している場合
http://hogehoge.jp/
http://www.hogehoge.jp/
は同一のHTTP_HOSTとして扱われる模様
http://www.hogehoge.jp/ でアクセスしても、%{HTTP_HOST}はhogehoge.jp(wwwがない)。
.htaccessでwww.hogehoge.jpにアクセスに来たらhogehoge.jpに301リダイレクトしたいとき、

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www\.hogehoge\.jp)$ [NC] 
RewriteRule (.*) http://hogehoge.jp%{REQUEST_URI} [R=301,L] 

では動いてくれない。

【回避策】

1)ServerName www.hogehoge.jp に当たる設定を追加する

[ドメイン設定]-[新しいドメインの追加]-[5. 他社で取得したドメインを移管せずに使う]
ドメイン名:www.hogehoge.jp で[送信する]。
※ネームサーバの設定は、ルートドメインの設定時に行われている前提。

2)hogehoge.jpのマルチドメイン設定を変更
wwwを付与せずマルチドメインとして使用する(上級者向け)

に変更

これで、www.hogehoge.jpから流入したときの{HTTP_HOST}に入る値がwww.hogehoge.jpとなるため、上記.htaccessが動作する。

前にも同じことでハマった気がするのでメモしておく。

【参考】

www.harukas.org

【MySQL】レプリケーション時のスレーブでread_only設定するかどうか問題

【メモ】

MySQLレプリケーションするとき、間違ってスレーブを更新してしまわないよう、スレーブのmy.cnfに

[mysqld]
(省略)
read_only

を追記してる例を見た。今までやってなかった。slaveでupdateが無くもない人生なので、今後つけるかどうか検証

nippondanji.blogspot.jp
”スレーブを参照専用にするには、my.cnfファイルでread_onlyオプションを指定しておくと良い。read_onlyを指定しておけば、SUPER権限のないユーザは更新が出来なくなる。”
「SUPER権限を持つアカウント以外の更新クエリーは実行できなくなる」はず

【結論】

SUPER権限のあるユーザでやってしまえば更新処理ができちゃうけど、習慣としてはつけておくべき、とのこと。
ただ、フェイルオーバーを考えると、read_onlyはつけない方向で。
(Masterが死んだとき、hostsの向き先変更だけでSLAVEに書き込み開始したい)


【結論に至る調査メモ】

■SUPER権限って?
→SUPER権限の有無は以下で確認可能

mysql> SELECT user, Super_priv FROM mysql.user ;
+-----------+------------+
| user      | Super_priv |
+-----------+------------+
| root      | Y          |
| mysql.sys | N          |
| repl      | N          |
+-----------+------------+

→replはレプリケーションユーザだけど、必要ないの?
MySQL :: MySQL 5.6 リファレンスマニュアル :: 17.1.1.3 レプリケーション用ユーザーの作成
レプリケーションの目的にだけアカウントを作成する場合、そのアカウントには REPLICATION SLAVE 権限だけが必要です。”
ということらしい。

【試してみた】

Super権限じゃないユーザを作成
GRANT ALL PRIVILEGES ON `testdb`.* TO 'nosuper'@'localhost' IDENTIFIED BY 'パスワード';
FLUSH PRIVILEGES;


# マスターにnosuperユーザでログインし、insert
→insertできた

# スレーブにnosuperユーザでログインし、insert
→ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
→マスタでinsertした値はレプリケーションされている。


■その他大変ありがたい参考記事

http://blog.hypermkt.jp/my-conf_readony/

WordpressのMySQLがoom_killerで落とされた

【状況】

Wordpressのサイトが
データベース接続確立エラー
とか
Error establishing a database connection
とか言ってきた。

サーバに入ってMySQLのプロセスを確認
ps aux | grep mysql
→ない。
→ログ確認
/var/log/messages

May 22 14:46:25 hogehoge kernel: [36271139.069945] php-fpm-5.5 invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0

cat /var/log/messages | grep Killed

May 22 14:46:25 hogehoge kernel: [36271139.527800] Killed process 2559 (mysqld) total-vm:2066588kB, anon-rss:761800kB, file-rss:0kB

MySQLがoom-killerにより落とされた模様。

mysqlのoom_killerの優先度を下げる

【参照】
http://hacknote.jp/archives/8356/hacknote.jp


強制終了プロセスの優先順位を以下の様にすることで
mysqlは殺されないようになる

vi /srv/bin/oom_update.sh

#!/bin/sh
 
# down mysql score 
mysql_pid=`cat /var/run/mysqld/mysqld.pid`
 
if [ "$mysql_pid" != "" ]; then
  echo "-17" > /proc/${mysql_pid}/oom_adj
else
  echo "can't get pid number"
fi


chmod +x /srv/bin/oom_update.sh
/srv/bin/oom_update.sh

# 確認
dstat --top-oom

--out-of-memory---
    kill score
php-fpm: pool  52

PHP-FPMの子プロセス数を減らす

なおメモリのほとんどはphp-fpmが食っているので、プロセス数を減らした。

/etc/php-fpm.d/www.conf

;pm.max_children = 25
pm.max_children = 15

service php-fpm restart
service nginx restart

これで様子見・・・・・・

G-RAID (Removable)が初期状態ではRAID0だったのでRAID1(ミラーリング)にしたメモ

【本作業の該当商品】

G-Technology (HGST) G-RAID Removable 8TB USB3.0&FireWire 800 対応 外付けハードディスク

【G-RAID Removable UtilityでRAID1に変更】

公式ウェブサイト
support.g-technology.com

ダウンロードタブから、「G-RAID Removable Utility」をDLしてinstall
ソフトウェアおよびファームウェアのダウンロード | G-Technology
f:id:zuntan02:20170522121708p:plain

解凍して実行
f:id:zuntan02:20170522121735p:plain
f:id:zuntan02:20170522121743p:plain

RAID1に変更
f:id:zuntan02:20170522121749p:plain

警告に[はい(Y)]
f:id:zuntan02:20170522121816p:plain

完了。
f:id:zuntan02:20170522121809p:plain

以上でRAID1化完了です。

あとは、WindowsPCなら[管理ツール]-[コンピュータの管理]-[ディスクの管理]で割り当てて利用可能。

【その他マニュアルなど】
support.g-technology.com

以上

ラズパイ2(RaspberryPi2)にCentOS7を入れてみる

■作業概要

1)(WindowsPCで)ラズパイ用CentOS7のイメージをDL、SDカードに書き込み
2)CentOS起動+ログイン
3)初期設定
4)ディスクスペースの拡張

1)(WindowsPCで)ラズパイ用CentOS7のイメージをDL、SDカードに書き込み

DD for windowsをインストー

WindowsPCで実施する場合、事前に以下のツールをインストールしておく

CentOSパッケージのダウンロード

https://buildlogs.centos.org/centos/7/isos/armhfp/
より、RaspberryPi2用パッケージ
CentOS-Userland-7-armv7hl-Minimal-1611-test-RaspberryPi2.img.xz
をDLし、解凍します。
CentOS-Userland-7-armv7hl-Minimal-1611-test-RaspberryPi2.img

DD for Windowsを起動してSDカードに書き込み

ディスク選択でusb(micro-SD)を選択
(SDカードが選択できないときはexeの互換モードを使って起動するとよい)

ファイル選択で先ほど解凍したcentosを選択
CentOS-Userland-7-armv7hl-Minimal-1611-test-RaspberryPi2.img

で[<<書込<<]
f:id:zuntan02:20170521114350p:plain

2)CentOS起動+ログイン

micro-SDをRaspberry Pi 2に差し込んで起動

初期ID/PWは
login : root
password: centos

3)初期設定

109キー日本語レイアウトのキーボードの設定をします。

■ラズパイのCentOS側で
localectl set-keymap jp106
localectl set-keymap jp-OADG109A

##System Localeを変更もしておきます
localectl set-locale LANG=ja_JP.utf8

##localectlで確認
localectl

#System Locale: LANG=ja_JP.utf8
#       VC Keymap: jp-OADG109A
#      X11 Layout: jp
#       X11 Model: jp106
#     X11 Options: terminate:ctrl_alt_bksp

4)ディスクスペースの拡張

ルート領域をSDカードいっぱいまで拡張したい

cat /root/README

== CentOS 7 userland ==

If you want to automatically resize your / partition, just type the following (as root user):
/usr/local/bin/rootfs-expand

→以前の.rootfs-repartitionとは変わっている模様。
/usr/local/bin/rootfs-expand
で拡張された。

df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         57G  907M   54G    2% /
devtmpfs         458M     0  458M    0% /dev
tmpfs            462M     0  462M    0% /dev/shm
tmpfs            462M   12M  450M    3% /run
tmpfs            462M     0  462M    0% /sys/fs/cgroup
/dev/mmcblk0p1   500M   49M  452M   10% /boot
tmpfs             93M     0   93M    0% /run/user/0

初期状態では外部からのSSH接続などは制限されていないため、DHCPで付与されたIPを使ってSSH接続ができる。


yum updateできない問題対策

yum update で以下のエラーメッセージが出た

http://mirror.centos.org/altarch/7/kernel/armhfp/kernel-rpi2/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found

【参照URL】
http://qiita.com/Leonardo-mbc/items/2fb67a6f860aa33fd9bd

cd /etc/yum.repos.d
続きを読む