アカマイの本を読みました
アカマイの事業内容がわかるのと、意外とインターネットの仕組みについて、簡単だけど知れたところがよかったです。
アカマイって基本的にCDNの業者なんですね。ただその世界中にサーバを持っているというスケールをうまく活かしてよいサービスを提供しているという。
クライアント側からどうやって近くの拠点にリクエストさせるのかという仕組みも実に興味深かったです。
簡単に書くとCNAMEを使って、アカマイの権威DNSサーバに誘導し、そこからはtracerouteとpingを使用して作成した情報に従って、一番近いリージョンのエッジサーバを案内するという仕組みでした。
たぶん全然わからないと思うので、詳しくは本を読んでください。。。
また、BGP とかトランジットとか、ASとかtier1とかよくわかっていなかったインターネットの仕組みを入り口だけでも知れたのもよかったかなぁと。
このあたりは普段はまかせっぱなしなので、LAN側しかさわらないですもんね。
ただここを知っているとNW障害のときとかわかりやすい気もします。
あと、平易な文で書かれているので読みやすかったです。
全然まわしものじゃないですが、興味がある方は是非。
mdでRAID構築後、再起動すると/dev/md127などのデバイス名がふられる
mdでRAID構築後、vmの母艦を再起動すると、ゲストOSを自動起動にしているにもかかわらず、起動してこないことに気づいた。 どうやら、RAID構築後のdevice名が/dev/md1とかではなく/dev/md125とかになっているみたい。 そのときのメモ。
/dev配下のファイルは以下のような感じ。 mv127とかにリンクが貼られていた。
[root@vm01 test]# ls -l /dev/md/ 合計 4 -rw------- 1 root root 228 7月 20 22:31 2015 md-device-map lrwxrwxrwx 1 root root 8 7月 20 22:31 2015 vm01.test.local:1 -> ../md127 lrwxrwxrwx 1 root root 8 7月 20 22:31 2015 vm01.test.local:2 -> ../md125 lrwxrwxrwx 1 root root 8 7月 20 22:31 2015 vm01.test.local:3 -> ../md126
/etc/mdadm.confを作成していなかったことに気付いて、作成してみる。
[root@vm01 test]# mdadm --detail --scan >> /etc/mdadm.conf
リブート。 今度はうまくいっていた。
[root@vm01 test]# ls -l /dev/md 合計 4 -rw------- 1 root root 222 7月 20 22:52 2015 md-device-map lrwxrwxrwx 1 root root 6 7月 20 22:52 2015 vm01.test.local:1 -> ../md1 lrwxrwxrwx 1 root root 6 7月 20 22:52 2015 vm01.test.local:2 -> ../md2 lrwxrwxrwx 1 root root 6 7月 20 22:52 2015 vm01.test.local:3 -> ../md3
md-device-mapファイルの中身はいかのような感じ。
[root@vm01 test]# cat /dev/md/md-device-map md2 1.2 320bdc1a:064bf1f4:d59f1bc5:aa04bc16 /dev/md/vm01.test.local:2 md3 1.2 9db6208b:f19c62e9:f8be6c74:2803a158 /dev/md/vm01.test.local:3 md1 1.2 405025a2:4ee28ae4:6d8394e8:917f46b9 /dev/md/vm01.test.local:1
作成日付をみるとリブートした時間になっていた。 ここのファイルは毎回作成しなおされるのかな。 そのときに見ているのが、/etc/mdadm.conf ? /etc/mdadm.confがなければ、ランダムにデバイス名が決定されるとか?
以下とかそれっぽいことを言ってた。
http://ubuntuforums.org/showthread.php?t=1764861&p=10953357#post10953357
assembleするときに/etc/mdadm.confをみるとか情報もあったので、あながち間違ってはいなさそう。 boot時に毎回assembleしているイメージなのかな。。。
子供版NISAで5年後の扱いがよくわからないのでもう一度整理する
そろそろ子供の貯金用の口座を作って、頂いた出産祝いをまとめておこうかなとおもったときに、子供版NISAの活用を考えました。 ただ子供版NISAの5年間の投資枠を使い切ったあとがいまいちよくわかっていなかったので、調べてみました。
子供版NISAの基本情報は、いろいろなまとめがあるのですが、
上記のサイトとかわかりやすかったです。
あとこんな資料もありました。(要望だから位置づけがよくわからないけれど。。)
http://www.fsa.go.jp/news/26/sonota/20140829-9/01.pdf
結局通常のNISAと違うところは以下かなと。
・20歳未満が対象 ・80万円×5年間の非課税の投資枠がある ・18歳になるまで引き出せない(引き出したら過去分にさかのぼって課税される)
よくわからないのは、5年間の非課税期間が終わった後、どうなるのかです。
特別な口座に移されるのか?
ロールオーバーしたとして、ロールオーバー先の投資期間が終わっても20歳になっていなかったら?
とかいろいろ考えながら、調べていたら、以下のサイトが見つかりました。
http://www.jsda.or.jp/sonaeru/oshirase/files/jr_nisa_qa.pdf
ポイントとしては以下のとおり。
・課税ジュニア口座と非課税ジュニア口座が作られる。 ・課税ジュニア口座も非課税ジュニア口座も18歳まで引き出せないという払い出し制限がある。 ・非課税ジュニア口座での売却代金や配当などは、課税ジュニア口座へ。 ・売却代金や配当などで得た課税ジュニア口座の現金は、年80万円の範囲で再投資可能。 ・非課税ジュニア口座の5年後は新しい非課税枠か、継続管理勘定へロールオーバーすることができる。 ・継続管理勘定は、1月1日時点で20歳になる前年の12月31日まで非課税にて運用可能。
つまり、継続管理勘定を使えば、0歳時点で購入した80万円の商品はずっと大人版NISAに移すまでずっと非課税!!!!ってことですね!
このサイトとかのイメージがわかりやすいかも。
NISA制度改正について : NISAポータルサイトトップ : 三井住友銀行
たとえば、以下のような感じかなと思います。
2016年ジュニアNISAの開始時点でみずほの株を80万円分買いました。 計算の都合上3000株。1株あたり7.5円の配当として、年間22500円。 通常の口座だと、20%の課税で、4500円取られていましたが、それが0! 18年間運用したとして、81000円得することに!
ロールオーバーできるのは80万円の枠以内らしいので、値上がりしてロールオーバーするときに評価額が100万になっていたときとか想定どおりいかないですけどね。。(いや、値上がりだから嬉しい悲鳴ですね。)
デメリットはやっぱり途中で引き出せないことですよね。。
あと新規の非課税枠がなくなる2014年以降、継続管理勘定の期間は、再投資できないのもあると思います。これぞ本当の塩漬け。。ここが売り時だ!!ってときに売るとか?でもその後は1円も増えないから、定期貯金より利率が低い。。。
なんやかんや調べましたが、結局、よく考えたら我が家では大人版のNISAの投資枠も使いきれていないので、自由が利くそちらを使って運用しようかなぁとか考えています。制度も変わる可能性が高いですし、課税の20%もどうなるかわからないですしね。ちょっと前まで10%でしたし。
どうでもいいけど、このブログは技術ブログだったような。。まぁいいか。。
既存のdiskをソフトウェアRAIDに組み込む
子供のいたずらでPCの強制停止が頻繁に行われる昨今、いつHDDがお亡くなりになるかわからないので、自作PCでソフトウェアRAIDを組んで、冗長化することにしました。
そのときのメモ。
まず、いま動いているHDDと同じ型のディスクを買ってきて、自作PCに組み込む。 (どうでもよいけれど、同じ型の2TBのディスクが2年前と同じ値段でした。)
partedで現状のディスクと同じパーティションを新しいディスクで区切る
[root@sv01 ~]# parted /dev/sda GNU Parted 2.1 /dev/sda を使用 GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。 (parted) print モデル: ATA WDC WD20EZRX-00D (scsi) ディスク /dev/sda: 2000GB セクタサイズ (論理/物理): 512B/4096B パーティションテーブル: gpt 番号 開始 終了 サイズ ファイルシステム 名前 フラグ (parted) (parted) mkpart primary 1049kB 600GB (parted) (parted) mkpart primary 600GB 1200GB (parted) (parted) mkpart primary 1200GB 2000GB
raidフラグをONに。
(parted) set 1 raid on (parted) set 2 raid on (parted) set 3 raid on (parted) (parted) print モデル: ATA WDC WD20EZRX-00D (scsi) ディスク /dev/sda: 2000GB セクタサイズ (論理/物理): 512B/4096B パーティションテーブル: gpt 番号 開始 終了 サイズ ファイルシステム 名前 フラグ 1 1049kB 600GB 600GB primary raid 2 600GB 1200GB 600GB primary raid 3 1200GB 2000GB 800GB primary raid (parted)
raidを組む。
※ここでは既存のディスクを組み込む準備をするため、初期をfault状態とする。 missingオプションがそれに当たるのだと思う。RAIDは1。デバイス数は2。
[root@sv01 ~]# mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sda1 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? Continue creating array? (y/n) y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started. [root@sv01 ~]# [root@sv01 ~]# [root@sv01 ~]# mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sda2 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? Continue creating array? (y/n) y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md2 started. [root@sv01 ~]# [root@sv01 ~]# mdadm --create /dev/md3 --level=1 --raid-devices=2 missing /dev/sda3 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? Continue creating array? (y/n) y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md3 started.
RAIDの状態表示(片方faultした状態になっている。)
[root@sv01 ~]# cat /proc/mdstat Personalities : [raid1] md3 : active raid1 sda3[1] 781508416 blocks super 1.2 [2/1] [_U] md2 : active raid1 sda2[1] 585805632 blocks super 1.2 [2/1] [_U] md1 : active raid1 sda1[1] 585805632 blocks super 1.2 [2/1] [_U] unused devices: <none>
RAIDを組んだディスクをフォーマットする。
mkfs -t ext4 /dev/md1 mkfs -t ext4 /dev/md2 mkfs -t ext4 /dev/md3
先ほどRAIDを組んだ新しいディスクと古いディスクの両方をmountして古いディスクからデータをコピーする
# 新しいディスク(RAID)のmount mount /dev/md1 /mnt/hdd1 mount /dev/md2 /mnt/hdd2 mount /dev/md3 /mnt/hdd3 # 現行のディスクのmount mount /dev/sdb1 /mnt/hdd11 mount /dev/sdb2 /mnt/hdd12 mount /dev/sdb3 /mnt/hdd13 # 現行のディスクからデータをコピーする cp -rvp /mnt/hdd11/* /mnt/hdd1/. cp -rvp /mnt/hdd12/* /mnt/hdd2/. cp -rvp /mnt/hdd13/* /mnt/hdd3/.
現行のディスクをRAIDに組み込む
[root@sv01 ~]# mdadm --manage /dev/md1 -a /dev/sdb1 mdadm: added /dev/sdb1 [root@sv01 ~]# [root@sv01 ~]# [root@sv01 ~]# cat /proc/mdstat Personalities : [raid1] md3 : active raid1 sda3[1] 781508416 blocks super 1.2 [2/1] [_U] md2 : active raid1 sda2[1] 585805632 blocks super 1.2 [2/1] [_U] md1 : active raid1 sdb1[2] sda1[1] 585805632 blocks super 1.2 [2/1] [_U] [>....................] recovery = 0.0% (508992/585805632) finish=95.8min speed=101798K/sec unused devices: <none> [root@sv01 ~]# [root@sv01 ~]# [root@sv01 ~]# mdadm --manage /dev/md2 -a /dev/sdb2 mdadm: added /dev/sdb2 [root@sv01 ~]# [root@sv01 ~]# [root@sv01 ~]# mdadm --manage /dev/md3 -a /dev/sdb3 mdadm: added /dev/sdb3
リビルドが終わったらこんな感じ。放置して寝てたからわからないけれど、数時間かかった模様。
# 完成 [root@sv01 ~]# cat /proc/mdstat Personalities : [raid1] md3 : active raid1 sdb3[2] sda3[1] 781508416 blocks super 1.2 [2/2] [UU] md2 : active raid1 sdb2[2] sda2[1] 585805632 blocks super 1.2 [2/2] [UU] md1 : active raid1 sdb1[2] sda1[1] 585805632 blocks super 1.2 [2/2] [UU] unused devices: <none>
以上!
iptablesのnatテーブルとはなんぞや
やっとiptablesのnatテーブルがわかった。
いままで、名前の通り、nat的なことをしているんだろうってことはわかっていたし、
書かれている内容もsnatなら送信元アドレスの書き換えかとか、単語から意味を理解してた。
google先生に聞いて、真似すれば書けるし、読みもできる。ただ、漠然としていた。
言うなれば、英単語を知っているから、英文法を知らなくても、英語の文章が何となく理解できる感じ。
それが以下の記事の一言をみて、すっと腑に落ちた。
「NATとはパケット中のIPアドレスを書き換える技術です」
習うより慣れろ! iptablesテンプレート集(2):natテーブルを利用したLinuxルータの作成 (1/6) - @IT
当たり前やろって思われる方もいるかもしれないけれど、この一言でなんか納得がいった。
送信元のアドレスや送信先アドレス、はたまた送信先ポートとか、なんか通信をいじろうと思ったら、NATテーブルに書けばいいのかと。
-j のターゲットオプションのところで、送信元アドレスを書き換えたければSNATを指定、送信先ならDNAT、送信元ポートなら--sportという風に指定してあげればよい。
アドレスとポートの両方同時も以下のように書けばいけそう。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1:8080
POSTROUTINGとかPREROUTINGとかの-Aオプションは理解にちょっと癖があるけど、L3スイッチのACLとかと同じ感じかな。
iptablesを一つのスイッチとみなして、通り抜ける前ならPREROUTING。通り抜けた後ならPOSTROUTINGだし、ホストから自発的に発生した通信がOUTPUTかな。
そのほか、iptablesへの書き方とは、以下のサイトがわかりやすかったと思うので、メモ!
ゼロから始めるLinuxセキュリティ(4):Linuxで作るファイアウォール[NAT設定編] (1/2) - @IT
gdb で Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.149.el6.x86_64 のエラー
珍しく、Cでちょっとしたプログラムを書いて、gdbでデバッグしようとしたら、以下のエラー
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.149.el6.x86_64
gdbから抜けて、rootで「debuginfo-install glibc-2.12-1.149.el6.x86_64」を実行すればよいと記事があったので、実行してみるも以下のエラー。
Could not find debuginfo for main pkg: glibc-2.12-1.149.el6.x86_64 Could not find debuginfo pkg for dependency package glibc-2.12-1.149.el6.x86_64
このエラーが出た時は、/etc/yum.repos.d/CentOS-Debuginfo.repo の enbledを0から1 ( 無効から有効 )にしてあげればよいらしい。
[root@dev001 C]# cat /etc/yum.repos.d/CentOS-Debuginfo.repo | grep enable enabled=1
このあと、再度「debuginfo-install glibc-2.12-1.149.el6.x86_64」を実行すれば、無事にパッケージがインストールされ、gdbが通るようになりました。 私はCentOS-Debuginfo.repo自体を消していたので、他のサーバから持ってきました。。 同じような方のためにメモ
[root@dev001 C]# cat /etc/yum.repos.d/CentOS-Debuginfo.repo [debug] name=CentOS-6 - Debuginfo baseurl=http://debuginfo.centos.org/6/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-6 enabled=1
yum の エラー
ローカル環境をいじっているときに何気なくyum updateしてみたら、エラーが。。。 yumの設定はdefaultのcentのリポジトリ。
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os error was 14: PYCURL ERROR 7 - "couldn't connect to host"
あれ?なんか変な風にいじったままだったかなぁと思い、rikenのリポジトリに変更してみてもエラー。
http://ftp.riken.jp/Linux/centos/6/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://ftp.riken.jp/Linux/centos/6/os/x86_64/repodata/repomd.xml: (28, 'connect() timed out!') Trying other mirror. Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again
rikenもダメだったので、クライアント側がおかしいと判明。 ダメ元でiptablesを落としてみたら、yum listが通った。。 ログを確認するとがっつり弾いていたみたい。
Apr 18 18:08:36 vm01 kernel: IPTABLES_INPUT_LOG : IN=br0 OUT= MAC= SRC=134.160.38.1 DST=192.168.1.10 LEN=60 TOS=0x00 PREC=0x00 TTL=52 ID=0 DF PROTO=TCP SPT=80 DPT=36410 WINDOW=5792 RES=0x00 ACK SYN URGP=0 Apr 18 18:08:44 vm01 kernel: IPTABLES_INPUT_LOG : IN=br0 OUT= MAC= SRC=134.160.38.1 DST=192.168.1.10 LEN=60 TOS=0x00 PREC=0x00 TTL=52 ID=0 DF PROTO=TCP SPT=80 DPT=36410 WINDOW=5792 RES=0x00 ACK SYN URGP=0
たしかにping以外はローカルしか通してないけど、応答はOKだと思っていたんだけどなぁ。。。 iptablesの設定かな。
ググったら以下のような記事が。