Posts

Showing posts from 2015

Keepalivedで作るMySQLフェイルオーバーシステム

Image
1. はじめに この記事は MySQL Casual Advent Calendar 2015 の22日目のエントリです。 先日、 MySQL Casual Talks という勉強会で登壇してきました。その時の内容をまとめておきたいと思います。 MySQLデータベースサーバに障害が起きた時、サービスを続けるには幾つかの方法があります。障害発生時にSlaveサーバーを手作業でMasterに昇格させる方法、 MySQL Utilities に含まれるmysqlfailoverというユーティリティーを利用する方法などです。 今回、Keepalivedというソフトウェアと、MySQLの双方向レプリケーションを使って、ほぼ無停止でフェイルオーバーする構成を試してみたので、それについてまとめておきたいと思います。 2. システム構成 db1、db2という二つのサーバで、それぞれmysqldとkeepalivedを動かします。mysqldはお互いがMasterとなる双方向レプリケーションを行います。keepalivedはそれぞれのサーバで mysqldのヘルスチェック を行い、どちらかがVRRPのMasterもう一方がBackupの状態となり、MasterにVirtual IP(VIP)を付与します。上の図ではdb1が現在のVRRP Masterということになります。双方向レプリケーションを行う場合に同時に両方のサーバへの書き込みを許可すると、データの不整合や、レプリケーションの停止を引き起こしてしまうことが知られています。今回VRRPスレーブに誤って書き込みが行われないようにスレーブにreadonly=1のフラグを立てておきます。 もしdb1のmysqldが停止ししkeepalivedのヘルスチェックに失敗した場合、db1のkeepalivedはFAULTステートに移行します。一方db2のkeepalivedはVRRP Masterステートに移行しVIPが付与され、クライアントからのアクセスはdb2に向かうようになります。db2のkeepalivedがMasterに昇格する際には、 スクリプトによりreadonly=0となり書き込みが可能になるようにしています 。 この構成では、Keepalivedを使うことで迅

マイKVM環境を晒しておきます。My Jessie on Jessie KVM environment.

皆さん、こんにちは。もうすっかり秋ですね。 最近、寒暖差が激しいので、お体には気をつけてくださいね。 さてさて、本日は、弊社で使っているDebian Jessie用のKVM環境をご紹介します。 KVMとはKernel Virtual Machineの略で、Linuxのカーネルで実装された仮想マシンハイパーバイザーのことです。一般的には、ハイパーバイザー自体を指すよりも、それを用いた仮想マシンの方式のことを指す場合も多いかと思います。 弊社ではKVMによる仮想環境を用い、各種サーバプログラム、WEBクラスターなどの検証を行っています。最近のLinuxディストリビューションでは、すでに簡単な操作で仮想マシンを立ち上げることが可能です。しかし、kvmが最初にバニラカーネルに組み込まれたlinux-2.6.20の頃から自家製スクリプトでkvm仮想マシンを利用しており、それが使い易く、興味を持ってくれる人もいるかもしれないのでここに公開する次第です。 仮想マシンの抽象化ライブラリであるlibvirtを介さずGUIなども無いので、比較的仕組みが理解しやすくカスタマイズが簡単であることがメリットかと考えています。カーネルの最新機能や最新のqemuに追従することもたやすくできます。 それでですね、ものはここにおいてあります。 https://github.com/ktaka-ccmp/kvm-setup-jessie Debian jessieで以下のように、 sudo apt-get install make aptitude git -y git clone git@github.com:ktaka-ccmp/kvm-setup-jessie.git sudo make all gitとmakeとaptitudeをaptでインストール githubからツールをクローン make allする を行えばオッケーです。busyboxとkernelのコンパイル時にmenuconfig画面が表示されますが、通常はそのままExitしてください。 何か思うところがあってカスタマイズしたい場合は、そこでカスタマイズを行ってください。 仮想マシンの実行は、/kvm/sbin/kvmスクリプトで行います。中身を見てもらえばわか

Lessons of Steve Jobs: Guy Kawasaki at TEDxUCSD の要点

Image
Guy Kawasakiのもう一つのビデオ"Lessons of Steve Jobs" 2013年UCSDでのTEDx です。 May he rest in peace, but may his influence continue to inspire us. Experts are clueless. Listen to your heart. Customer cannot usually tell you what they want. Get the next curve. Big challenges beget the best work. Design counts. Use big graphics and big fonts. Changing your mind is sign of intelligence. Value not equal to price. A players hire A+ players. Real CEOs demo. Real entrepreneurs ship. Marketing = unique value. Bonus: Some things need to be believed to be seen. I can tell you right now. In heaven Steve Jobs is telling God what to do.

The art of innovation | Guy Kawasaki | TEDxBerkeley の要点メモ

Image
こんにちは、今日はいい天気にもかかわらず、自宅に引きこもってSNS眺めたり、Youtube見てました。本当はやらなきゃいけないお仕事があったんですが ^^;) 前からちょくちょく見ていたGuy KawasakiのTalkの一つの「The art of innovation(イノベーションの技術)」分用メモです。書き出しておかないと内容忘れて何度も見る羽目になってしまうので。 Make meaning as opposed to make money. If you start off with the sole desire to make money, you won’t make money, you won’t make meaning, you won’t change the world, and you’ll probably fail. お金よりもそれをやる意味が大事。 Make Mantra. Two or three explanation why your meaning should exist. Nike: authentic athletic performance, Fedex: Peace of mind, Wendy: (should be) Healthy fast food. その意味が存在する必要を、2、3、4語のマントラにしておくと良い。 Jump to the next curve. Great innovation occurs when you get to the next curve. 10%の進歩ではなく次のカーブに乗ることが大事。 Roll the DICEE. Deep, Intelligent, Complete, Empowering, Elegant 深い進歩、賢さ(マスタングは鍵ごとに最高速がプログラムされいる)、完全さ(レクサス)、可能性を与えるもの(Macbook Air)、エレガントさなどの要素が必要。 参考 Don’t worry be crappy. If you waited for perfect world, you would never ship. 完璧さを求めたらいつまでたっても出荷できない。革新的なプロダクトは多少のクラッピネスを恐れずにまず

debian jessieをdebootstrapでインストールした時のメモ

こんばんは。 ブログを書くのは苦手だけど、なんでもいいから書いてみようシリーズです。 会社ではディスクレスのネットブート環境を作ってあって、新しいOSをインストールする時には、まずディスクレスでOSを立ち上げそのOS上でdebootstrapやyum groupinstallなどを使ってファイルシステムの中身を作成することが多いです。あるいはディスクレスでブートして、あらかじめ作成しておいた標準システムをネットワーク越しrsyncやddでコピーしたりすることもあります。 このようにすることで、毎回ブレの少ない、あるいは全くブレのないイメージを作成することができ、非常に便利です。 今回は、ネットブートした後にDebian jessieをdebootstrapした時のメモです。 そして想定読者は、未来の自分です。(最近前にやったことをすぐに忘れてしまうので^^;) 1. ネットブートしたOS上でやること。 apt.h.ccmp.jp:3142がMIRROR元のURLに挟んであるのは、apt-cacher-ngを間に挟んでaptの転送量を節約するためです。 parted /dev/sda mkfs.ext4 /dev/sda1 mkswap /dev/sda2 mount /dev/sda1 /mnt/ apt-get install debootstrap time debootstrap --include=openssh-server,openssh-client,rsync,pciutils,tcpdump,strace,libpam-systemd,ntpdate,openntpd jessie /mnt/ http://apt.h.ccmp.jp:3142/ftp.jp.debian.org/debian mount -t proc none /mnt/proc/ mount -t devtmpfs none /mnt/dev/ mount -t sysfs none /mnt/sys/ rsync -av ~/.ssh/ /mnt/root/.ssh/ vi /mnt/etc/network/interfaces vi /mnt/etc/fstab echo &qu

pppoe接続のインターフェース名を変更する How to rename pppoe interface name.

フレッツ回線などで、linuxルーターからpppoeセッションを張る場合、インターフェース名がppp0、ppp1などとなり、どのプロバイダへの接続なのか判別しづらく不便に感じることがあります。 # ip add show dev ppp0 8: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1454 qdisc pfifo_fast state UNKNOWN qlen 3 link/ppp inet x.x.x.x peer x.x.x.x/32 scope global ppp0 valid_lft forever preferred_lft forever ここで、ppp0の部分を任意の名前、例えば接続先のプロバイダ名などにしておけば便利でしょう。Debian Wheezyの場合は次のようにしてやれば、そういうことが可能です。 /etc/network/interfaces auto irevo iface irevo inet ppp provider irevo /etc/ppp/peers/irevo noipdefault hide-password lcp-echo-interval 20 lcp-echo-failure 3 connect /bin/true noauth persist mtu 1492 noaccomp default-asyncmap linkname "irevo" plugin rp-pppoe.so eth0.10 user "xxxxx@i-revonet.jp" /etc/ppp/ip-up.d/02ifrename #!/bin/bash ifrename(){ if [ "$LINKNAME" != "" ]; then ip link set $IFNAME down ip link set $IFNAME name $LINKNAME

デスクトップパソコン新調

Image
みなさん、こんにちは。そろそろブログを書かなきゃなと思いつつ10ヶ月以上もブログ更新していないことに気づきました。もう何でもいいから書いてみようと思います(笑) 先日、会社で使っているデスクトップパソコンを新しくしました。パソコンのモデルは、Intelの NUC BOXDN2820FYKH0 というやつで、 Celeron N2820 というデュアルコアHTなCPUが乗っています。このCPUはTDPがわずか7.5Wととても低消費電力で、電気代が安く済むので、各拠点のルーターとしても重宝しています。今回はルータ用に買ったあまりをデスクトップ用に転用しました。 主なインターフェースは、HDMI、1G LAN(Realtek)、usb 2.0 x2 、usb 3.0 x 1などです。他にwifi/bluetooth用のチップも内蔵しています。 OSはもちろんLinux。今回はDebian jessieをインストールしました。 最近のLinuxはインストールするだけで、特に苦労もせずXや日本語入力環境が使えるので、非常に助かります。(Macイラねんじゃね?とはいえMacbook Air愛用しておりますが…) 備忘録 chrome音が出ない件。 以下のコマンドで見ると、HDA Intel PCHというデバイスが搭載されており、ALC283とHDMIの2つの出力デバイスがある。 ktaka@jessie:~$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: PCH [HDA Intel PCH], device 0: ALC283 Analog [ALC283 Analog]   Subdevices: 1/1   Subdevice #0: subdevice #0 card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]   Subdevices: 1/1   Subdevice #0: subdevice #0 次のコマンドで、音が出るかどうか試してみるとちゃんと出る。 aplay -D plughw:0,3 /usr/share/sound