このべん第4回に行ってきました。

ソースの下に追記しました。(12/16,08:00)

このべん第4回「ConoHa VPSとHAProxyでロードバランサーを構築してみよう!」 - ConoHa | Doorkeeper

に行ってきました。当日の資料は以下になります。


このべん第4回 ハンズオン手順 - ConoHa

Wi-Fiにつながりにくかったり、反応が遅いVPSがあったりと多少のトラブルはありましたが、ちゃんとWebサーバーとロードバランサーが構築出来ました。

この勉強会の内容を思いつきでFabricに起こしました。解説とかこのべんのレポートとかも書こうかと思いましたが、思ったよりFabricを書くのに時間がかかってしまったため、ひとまずソースをはるだけにしておきます。 WEBサーバーはうまく行きますが、ロードバランサーがうまく構築できてません。後日修正します。とりあえず寝まする。

from fabric.api import run, cd, env
def webserver_1():
    env.user = "root"
    env.hosts = ['hoge.hoge.hoge.226']
    env.key = ["~/.ssh/fuga.key"]
def webserver_2():
    env.user = "root"
    env.hosts = ['hoge.hoge.hoge.227']
    env.key = ["~/.ssh/fuga.key"]
def roodbarance():
    env.user = "root"
    env.hosts = ['hoge.hoge.hoge.225']
    env.key = ["~/.ssh/fuga.key"]
def yum_update():
    run("yum update")
    
#2-3
def test_eth1_1():
    run("ip link")
#2-4
def set_eth1(server_type):
    with cd("/etc/sysconfig/network-scripts"):
        run("echo 'DEVICE=\"eth1\"' >> ifcfg-eth1")
        run("echo 'BOOTPROTO=\"none\"' >> ifcfg-eth1")
        run("echo 'ONBOOT=\"yes\"' >> ifcfg-eth1")
        run("echo 'TYPE=\"Ethernet\"' >> ifcfg-eth1")
        if server_type=="LB":
            local_ip = "192.168.0.11"
        elif server_type=="WEB1":
            local_ip = "192.168.0.12"
        elif server_type=="WEB2":
            local_ip = "192.168.0.13"
        run("echo 'IPADDR=%s' >> ifcfg-eth1" %local_ip)
        run("echo 'NETMASK=\"255.255.255.0\"' >> ifcfg-eth1")
def restart_network():
    run("service network restart")
def test_eth1_2():
    run("ip addr")
#3-1
def set_httpd():
    run("yum -y install httpd")
def start_httpd():
    run("service httpd start")
#3-2
def set_iptables():
    with cd("/etc/sysconfig/"):
        run("sed -e \"9a -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT\" iptables > iptables2")
        run("mv iptables2 iptables")
def restart_iptables():
    run("service iptables restart")
#3-3
def make_webpage():
    with cd("/var/www/html"):
        run("wget https://gist.githubusercontent.com/ConoHa/fb7c783153a37c7a4882/raw/87ea58fb87f1fc7bb0c096b95fff212d9344a73f/index.php")
        run("rm -f index.html")
#5-1
def install_haproxy():
    run("yum -y install haproxy")
#4-2
def set_haproxy():
    run("yum install haproxy")
    with cd("/etc/haproxy"):
        run("rm -f haproxy.cfg")
        run("wget https://gist.githubusercontent.com/ConoHa/859f26b94cd2204adb0a/raw/6847c7724fd4dc3716b607a86406df8c05664dad/haproxy.cfg")
#4-3
def set_iptables_haproxy():
    with cd("/etc/sysconfig/"):
        run("sed -e \"10a -A INPUT -m state --state NEW -m tcp -p tcp --dport 10080 -j ACCEPT\" iptables > iptables2")
        run("mv iptables2 iptables")
        
#4-4
def start_haproxy():
    run("service haproxy start")
def check_haproxy():
    run("tail -f /var/log/httpd/access_log")
#4-5
def set_haproxy_log():
    with cd("/etc"):
        run("sed -e \'2c\\ModLoad imudp\' rsyslog.conf")
        run("sed -e \'3c\\UDPServerRun 514\' rsyslog.conf")
        run("echo 'local2.* /var/log/haproxy.log' >> rsyslog.conf")
def restart_haproxy():
    run("service rsyslog restart")


def dep_WEB_1():
    webserver_1()
    #test_eth1_1()
    set_eth1("WEB1")
    restart_network()
    test_eth1_2()
    set_httpd()
    start_httpd()
    set_iptables()
    restart_iptables()
    make_webpage()
def dep_WEB_2():
    webserver_2()
    #test_eth1_1()
    set_eth1("WEB2")
    restart_network()
    test_eth1_2()
    set_httpd()
    start_httpd()
    set_iptables()
    restart_iptables()
    make_webpage()
def dep_LB():
    #test_eth1_1()
    roodbarance()
    set_eth1("LB")
    restart_network()
    test_eth1_2()
    install_haproxy()
    set_haproxy()
    set_iptables()
    set_iptables_haproxy()
    start_haproxy()
    check_haproxy()
    set_haproxy_log()
    restart_haproxy()


追記 : 昨日は寝落ち寸前だったので(12/16,08:00)

カレンダーもらえました。(おそらく)新規イラストだー、わーい。
クーポンもらったよーそろそろ5桁だー(白目)。渋谷に足を向けて寝れない。ありがとうございました。

Fabricとは:

デプロイツールシェルスクリプトPythonで管理するようなもの。Pythonが書ければ学習コストはほとんど無い。 冪等性を考えるならcuisineも使う必要があるようだ。Fabricについて詳しく知りたい人はGoogleへ。

Fabricのソース:

ネットに上がっていた資料をそのまま関数にしてる。設定ファイル絡みの挙動が怪しい。構築済みのシステムで走らせるとシステムを破壊できる。新規構築用だし、そもそもFabricの練習として書いた。デプロイツールを使う意味がわからない人はConoHaでこれを走らせてみると分かるのかもしれない。1時間かかったことをするのに1~2分しかかからない。その分書き慣れていないと書くのに倍以上時間がかかるわけだが。
使い方 :
Fabricのインストールはpipやeasy_installから行えるようだがあまり詳しくない。そもそもOSごとに違う。Googleへ。
ソースをコピペしてfabfile.pyとして保存し、冒頭のenv.key =
を適宜書き換え(公開鍵SSH認証の知識が必要かと)、fabfile.pyのあるディレクトリで以下を実行

fab dep_WEB1
fab dep_WEB2
fab dep_LB

fab dep_LBは悲しいかなまだちゃんと動かない。dep_WEBも動かなかったりしたら教えて下さい。
お仕事でこーゆーの書いてる人はサーバの設定ファイルどうやって作ってるんだろう。用意しといてgit cloneなりwgetなりするのだろうか。それともシェル芸するのだろうか。

何故か動作の悪かったサーバについて考えてみる:

何故かSSH鍵が2つ目
SSHの処理に時間がかかる
Pingの返答が10msほどほかより遅い
一旦SSHに入れればある程度ちゃんと動く
メモリ使用料が妙に多い。
serviceのstart,restartが遅い
起動してからSSHサーバーがまともに動いて、ログインが完了するまでに3分もかかる(バルス)
Fabric走らせると5分はかかる
OSを入れ直しても(テンプレのCentOS)状況変わらず
真夜中でも状況変わらず

Ubuntuオフラインミーティングで、ちゃんと設計されたOpenStackはこの世に存在するのか、と疑問が投げかけられていた。

結論:よくわからない。基幹が壊れてるのか、Dosが発生してるのか。
とりあえず今後警戒する。
もう少し調べてConoHa送りつけとく。