2015年12月22日火曜日

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

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を使うことで迅速かつ安定的にフェイルオーバーが実行できること、あらかじめ双方向レプリケーションが行われているので障害発生時にCHANGE MASTER をする必要がなくシンプルであることがメリットだと考えられます。


3. VRRPってなに?


VRRP(Virtual Router Redundancy Protocol)は、もともと2台のルーターの冗長化のために作られたプロトコルで、RFCで規定されています。。下の図は、今回利用したKeepalived v1.2.13 が準拠しているVRRP version 2の動きを説明するものです。


VRRP v2では、プライオリティに基づいてMasterとBackupサーバーが決定され、MasterのみがVRRPアドバタイズパケットを予め定められた間隔、例えば1秒間隔で送信します。Masterからのアドバタイズパケットが一定期間途切れると、BackupサーバがMasterサーバに状態遷移します。

ヘルスチェック

KeepalivedのVRRPデーモンには、RFCで規定されたVRRPプロコルの機能に加え、おまけとしてヘルスチェック機能があります。これによりスクリプトでmysqldの死活を監視し、監視が失敗するとKeepalivedのステータスをFAULTに遷移させることができます。この場合プライオリティ=0のVRRPアドバタイズパケットが送信され、直ちにBackupサーバがMasterに昇格します。

以下の設定は、keepalivedの設定ファイルの一部ですが1秒に一回ヘルスチェックスクリプト"/etc/keepalived/vrrp/mysqlchk.sh"を実行し、二回失敗したらFAULTステートにし、2回成功するとBACKUPかMASTERに戻しています。

 vrrp_script mysqlchk {  
     script "/etc/keepalived/vrrp/mysqlchk.sh"   
     interval 1                    ← 1秒ごとにチェック  
     fall 2                          ← 2回失敗したらFAULT  
     rise 2                         ← 2回成功でBACKUP or MASTER  
 }  

ヘルスチェックファイル"mysqlchk.sh"の内容は、今回は次のようになっていて、ソケット経由で、"show variables like 'server_id';"に応答できるかどうかを確認しています。

 mysql -S $SOCK --connect-timeout=$TIMEOUT -e "show variables like 'server_id';"  

VRRPのフェイルオーバー時間

障害時にVRRPのフェイルオーバーにかかる時間は、大まかに以下のふた通りに分けることができます。

  • mysqldのみ死んだ場合
    • keepalivedがFAULTステートになりpriority=0のVRRP Advertパケットを送信します。
    • これを受信したBACKUPステートにいるkeepalivedは直ちにMASTERに昇格します。
    • フェイルオーバーにかかる時間は、FAULTステート遷移に必要な2秒程度です。

  • サーバごと死んだ場合
    • 元のサーバからのVRRPパケットが途絶え、BACKUPステートにいるkeepalivedがMASTERステートに昇格します。
    • BACKUPステートにいるkeepalivedが状態遷移を開始する時間はVRRPプロトコルで決まっており、(3 * Advertisement_Interval) + ( (256 - Priority) / 256 )になります。
    • VRRPアドバタイズパケットの間隔、すなわちAdvertisement_Intervalが1秒の場合は4秒程度でフェイルオーバーが完了します。
以上により、この仕組みを利用する場合、2秒または4秒程度でフェイルオーバーが完了することになり、かなり速いと言って良いのではないでしょうか。

4. 双方向レプリケーションの注意点


今回のシステム構成では、db1とdb2の間で双方向のレプリケーション構成にしています。この構成には落とし穴があるので、まず簡単にレプリケーションの仕組みをおさらいしておきたいと思います。

次の図で、db1でコミットされたトランザクションはbinlogに記録されます。binlogに記録されたトランザクションは、ネットワークを介してdb2に送られIOスレッドによりrelaylogに書き込まれ、SQLスレッドによりテーブルスペースに順次コミッされていきます。


したがって、db1で完了したコミットはすぐにSlaveのテーブルスペースに書き込まれるわけではなく、有限時間の遅延が発生します。特にレプリケーションのSQLスレッドは、mysqld-5.6までは1スキーマに対して1スレッドでしか実行できないので、SQLスレッドによるテーブルスペースへのコミットが追いつかずrelaylogにデータが溜まっていく場合が、時々見られます。

レプリケーションが遅延している時に、VRRPのフェイルオーバーが起こると以下の図のような状態になります。relaylogに溜まっているデータはSQLスレッドにより順次コミットされていきますが、同時にクライアントからの書き込みが行われると、データに不整合が起こりレプリケーションが停止する場合があります。


今回の構成ではこれを防ぐために、フェイルオーバー時にVIPがdb2に移った時、すぐに書き込み可能な状態にするのではなく、レプリケーションの遅延がなくなるのを待っててreadonly=0をセットするようにしています。

 #!/bin/bash  
 SOCK=/var/run/mysqld/mysqld.sock  
 while true ; do  
 mysql -S $SOCK -e "show slave status\G;"|egrep "Seconds_Behind_Master: 0|Seconds_Behind_Master: NULL"  
 if [ "$?" = "0" ] ; then   
      break  
 else  
      echo Waiting until sql thread finish.  
 fi  
 sleep 1  
 done  
 mysql -S $SOCK -e "set @@global.read_only=0;"  

5. まとめ


今回、keepalivedのVRRP機能と、MySQLの双方向レプリケーションを組み合わせた、MySQLサーバの冗長化について試してみました。

良いところ
  • およそ4秒以内、ほぼ瞬時にフェイルオーバーする。
  • フェイルオーバー時にレプリケーション関連のオペレーションが入らないので、シンプルである。
課題
  • マルチマスターなので不整合に気をつける
  • repが遅いとなかなか昇格できない。MySQL5.7に期待。


2015年10月29日木曜日

マイ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   
  1. gitとmakeとaptitudeをaptでインストール
  2. githubからツールをクローン
  3. make allする
を行えばオッケーです。busyboxとkernelのコンパイル時にmenuconfig画面が表示されますが、通常はそのままExitしてください。
何か思うところがあってカスタマイズしたい場合は、そこでカスタマイズを行ってください。

仮想マシンの実行は、/kvm/sbin/kvmスクリプトで行います。中身を見てもらえばわかりますが、このスクリプトでやっていることは、qemuコマンドの実行と、unix domainソケットを通してのqemuプロセスの制御です。

ではまず、v001という仮想マシンを起動してみます。

 root@jessie64:~# kvm create v001   
 booting v001 ....  

v001が生きているかどうかは、次のように確認できます。

 root@jessie64:~# kvm chk v001   
 QEMU 2.4.0.1 monitor - type 'help' for more information  
 (qemu) info status  
 VM status: running  
 (qemu)   

次にv002を起動し、状態を確認してみます。

 root@jessie64:~# kvm create v002  
 booting v002 ....  
 root@jessie64:~# kvm chk v002  
 QEMU 2.4.0.1 monitor - type 'help' for more information  
 (qemu) info status  
 VM status: running  
 (qemu)   

稼働中の仮想マシンの一覧は、以下のように確認できます。conのカラムはコンソールソケット、monのカラムはモニターソケット、imgのカラムはVMのイメージファイルの状態を表しています。v001の行を見るとv001 o o uとなっていますが、これはコンソール、モニターの両ソケットが接続可能で、イメージファイルが使用中(VMが稼働中)であることを表しています。

 root@jessie64:~# kvm list   
 id   con   mon   img  
 test  -    -    -  
 v001  o    o    u  
 v002  o    o    u  

今度は、v001のコンソールに接続してみます。コンソールに接続するとログインプロンプトが表示されるのでroot/rootでログインします。rootのパスワードはMakefileにベタ書きしてあり、イメージtemplate作成時に設定されます。コンソール接続を終了するには"Ctrl+]"をタイプします。

 root@jessie64:~# kvm con v001  
 Debian GNU/Linux 8 v001 ttyS0  
 v001 login: root  
 Password:   
 Linux v001 4.2.4-64kvmg01 #1 SMP Wed Oct 28 03:50:51 UTC 2015 x86_64  
 The programs included with the Debian GNU/Linux system are free software;  
 the exact distribution terms for each program are described in the  
 individual files in /usr/share/doc/*/copyright.  
 Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent  
 permitted by applicable law.  
 root@v001:~# logout  
 Debian GNU/Linux 8 v001 ttyS0  
 v001 login:  

テンプレートイメージ作成時には、/root/.ssh/authorized_keysもコピーしていますので、ホストのマシンと同じ鍵でsshログインすることが可能です。

v001のIPアドレスはinitrdの中で172.16.1.1を決め打ちで設定しています。v002の場合は172.16.1.2、v250の場合は172.16.1.250が割り当てられ、v250を上限にしてあります。
これらのホスト名、IPは、セットアップ時にホストの/etc/hostsに追記してあります。

 root@jessie64:~# ssh v001   
 The programs included with the Debian GNU/Linux system are free software;  
 the exact distribution terms for each program are described in the  
 individual files in /usr/share/doc/*/copyright.  
 Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent  
 permitted by applicable law.  
 Last login: Thu Oct 29 16:42:31 2015 from 172.16.1.254  
 root@v001:~# 

ゲストマシンからは、ホストマシンのNATを介して外部のネットワークと通信が可能です。

 root@v001:~# ping yahoo.jp  
 PING yahoo.jp (183.79.227.111) 56(84) bytes of data.  
 64 bytes from yjpn110.mobile.vip.ogk.yahoo.co.jp (183.79.227.111): icmp_seq=1 ttl=54 time=13.2 ms  
 64 bytes from yjpn110.mobile.vip.ogk.yahoo.co.jp (183.79.227.111): icmp_seq=2 ttl=54 time=13.3 ms  
 64 bytes from yjpn110.mobile.vip.ogk.yahoo.co.jp (183.79.227.111): icmp_seq=3 ttl=54 time=13.9 ms  
 ^C  
 --- yahoo.jp ping statistics ---  
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms  
 rtt min/avg/max/mdev = 13.224/13.515/13.986/0.349 ms  

また、同じホスト上の仮想マシン間で通信することも可能です。

 root@v001:~# ping v002   
 PING v002 (172.16.1.2) 56(84) bytes of data.  
 64 bytes from v002 (172.16.1.2): icmp_seq=1 ttl=64 time=1.33 ms  
 64 bytes from v002 (172.16.1.2): icmp_seq=2 ttl=64 time=1.89 ms  
 64 bytes from v002 (172.16.1.2): icmp_seq=3 ttl=64 time=5.51 ms  
 ^C  
 --- v002 ping statistics ---  
 3 packets transmitted, 3 received, 0% packet loss, time 2003ms  
 rtt min/avg/max/mdev = 1.331/2.914/5.519/1.856 ms  

別ホストからは、直接仮想マシンにアクセスできないようになっていますので、別ホスト上の仮想マシンとは通信できません。もしそうしたい場合は、ブリッジとvlanの設定を工夫することで、通信可能になるでしょう。

仮想マシンを停止したいときは、仮想マシンにログインしpoweroffを実行するか、以下のようにshutdownコマンドを発行します。

 root@jessie64:~# kvm shutdown v001  
 QEMU 2.4.0.1 monitor - type 'help' for more information  
 (qemu) system_powerdown  
 (qemu)  
 root@jessie64:~# kvm chk v001  
 2015/10/29 17:04:52 socat[17586] E connect(5, AF=1 "/kvm/monitor/v001.sock", 24): Connection refused  

kvm listコマンドで見ると、停止しているv001は以下のように見えます。

 root@jessie64:~# kvm list   
 id   con   mon   img  
 test  -    -    -  
 v001  -    -    -  
 v002  o    o    u  

v001のイメージを完全に消したいときは、仮想マシンが停止した状態で、/kvm/data/v001.imgを消してください。

だいたい使い方は以上になります。
どうぞ、よろしくお願いいたします。

2015年10月19日月曜日

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

Guy Kawasakiのもう一つのビデオ"Lessons of Steve Jobs" 2013年UCSDでのTEDx です。



May he rest in peace, but may his influence continue to inspire us.
  1. Experts are clueless. Listen to your heart.
  2. Customer cannot usually tell you what they want.
  3. Get the next curve.
  4. Big challenges beget the best work.
  5. Design counts.
  6. Use big graphics and big fonts.
  7. Changing your mind is sign of intelligence.
  8. Value not equal to price.
  9. A players hire A+ players.
  10. Real CEOs demo.
  11. Real entrepreneurs ship.
  12. 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.

2015年10月18日日曜日

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


こんにちは、今日はいい天気にもかかわらず、自宅に引きこもってSNS眺めたり、Youtube見てました。本当はやらなきゃいけないお仕事があったんですが ^^;)

前からちょくちょく見ていたGuy KawasakiのTalkの一つの「The art of innovation(イノベーションの技術)」分用メモです。書き出しておかないと内容忘れて何度も見る羽目になってしまうので。



  1. 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. お金よりもそれをやる意味が大事。
  2. 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語のマントラにしておくと良い。
  3. Jump to the next curve. Great innovation occurs when you get to the next curve. 10%の進歩ではなく次のカーブに乗ることが大事。
  4. Roll the DICEE. Deep, Intelligent, Complete, Empowering, Elegant 深い進歩、賢さ(マスタングは鍵ごとに最高速がプログラムされいる)、完全さ(レクサス)、可能性を与えるもの(Macbook Air)、エレガントさなどの要素が必要。参考
  5. Don’t worry be crappy. If you waited for perfect world, you would never ship. 完璧さを求めたらいつまでたっても出荷できない。革新的なプロダクトは多少のクラッピネスを恐れずにまず出荷することが大事。
  6. Let 100 flowers blossom. One of the reasons why I believe in God is there is no other explanations for Apple’s continued survival than the existence of God. When the customer use your product if they say it’s the desktop publishing machine, haleluya, declare the victory, it is now a desktop publishing machine. Positioning branding ultimately comes down to what the customer decides, not to what you decides. マックはワープロ、スプレッドシート、データベースではダメだったけど、DTPマシンとして成功した。ポジショニング、ブランディングは究極的には、顧客が決めるものである。
  7. Polarize people.The great product polarize people. Don’t be afraid of polarizing people. 偉大なプロダクトは時に敵を作るが恐れてはいけない。ただし、敵を作れと言っているのではない。
  8. Churn, baby churn. As soon as you ship the product, you need to start listening people and keep evolving the product. 出荷するまではエキスパートの声を無視しなければいけないが、出荷されたら直ちにユーザーの声に耳を傾け、商品を進化させ続けなければならない。
  9. Niche yourself. ユニーク、価値の2x2マトリックス、右上を取らなければいけない。
  10. Perfect your pitch. Customize your introduction. 10 20 30 rules of presentation. 10 slides 20 minutes 30 point fonts. ピッチのTips。イントロを聴衆に合わせてカスタマイズ。10スライド、20分のトーク、30ポイントフォント。聴衆年齢の半分のフォントサイズ。
  11. Don’t let the bozos grind you down. “I think there is a world of market for maybe five computers. Thomas Watson, IBM, 1943” 成功したbozo達の言葉に騙されるな。

2015年10月15日木曜日

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 "root:root" | chpasswd --root /mnt/
 echo "Asia/Tokyo" >  /mnt/etc/timezone 
 cp /mnt/usr/share/zoneinfo/Japan /mnt/etc/localtime 
 chroot /mnt/  

/etc/fstabの中身
 /dev/sda1       /       ext4   defaults       1   1  
 /dev/sda2       swap     swap   defaults       0   0  

/etc/network/interfacesの中身

auto lo
iface lo inet loopback

auto eth0
#iface eth0 inet dhcp

iface eth0 inet static
        address         192.168.60.31
        network         192.168.60.0
        broadcast       192.168.63.255
        netmask         255.255.252.0
        gateway         192.168.60.1

source-directory /etc/network/interfaces.d/

2. chroot後にイメージ内でやること

 apt-cache search linux-image  
 apt-get install linux-image-3.16.0-4-amd64  grub-pc
 apt-get clean  
 grub-install /dev/sda  
 update-grub  

以上で、jessieのミニマム環境がインストールできます。 リブートしてちゃんと立ち上がればOKです。

そんなこんなで、立ち上がったOSの容量は。。。

 root@jessie64:~# df -h   
 Filesystem   Size Used Avail Use% Mounted on  
 /dev/root       107G  585M  101G   1% /

うーん、こんなもんかなー。

2015年10月14日水曜日

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  
     ip link set $LINKNAME up  
 else   
     exit   
 fi  
 }  
 if [ "$IFNAME" == "$(/sbin/ip route |grep default | cut -f 3 -d " ")" ]; then  
     ifrename  
     /sbin/ip route add default dev $LINKNAME  
 else  
     ifrename  
 fi  

試してみると確かにインターフェース名がirevoになっていることがわかりました。

 # ip add show dev irevo  
 5: irevo: <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 irevo  
     valid_lft forever preferred_lft forever  

Debian Jessie以降ではpppdに以下のページの修正が入っていて、上記の/etc/ppp/peers/irevoで「linkname "irevo"」とあるところを「ifname "irevo"」
などに変更することで、インターフェースの名前を任意に設定することができるそうです。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=458646

おそらく、こちらの方がpppdが知っている名前を変えずに済み問題が少いでしょう。
早く、ルーターのOSをDebian jessieにしようと思います。

2015年10月3日土曜日

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

みなさん、こんにちは。そろそろブログを書かなきゃなと思いつつ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/sounds/alsa/Front_Center.wav 

次のファイルを書き換えXを再起動したところ、chromeでyoutubeなどの音声が聞こえるようになりました。
/etc/asound.conf
pcm.!default { type hw; card 0 ; device 3; }
ctl.!default { type hw; card 0 ; device 3; }
以上、オチもまとめもないんですけど、
最近のLinuxはデスクトップとしても簡単に使えるので、皆さん使ってみましょう!