このべん第4回に行ってきました。
ソースの下に追記しました。(12/16,08:00)
このべん第4回「ConoHa VPSとHAProxyでロードバランサーを構築してみよう!」 - ConoHa | Doorkeeper
に行ってきました。当日の資料は以下になります。
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送りつけとく。