thin+god搭建rails服务器集群

安装thin sudo gem install thin

安装god sudo gem install god

配置god

# configure variables list below

app_dir="项目路径"

service="项目名称"

num_servers=5//开启服务器的个数

port=9000//端口号

#user="rocket_finance"

#group="rocket_finance"

pid_path         = "#{app_dir}/tmp/pids/thin.pid"  pid存放的路径

(0...num_servers).each do |i|

number = port + i

God.watch do |w|    w.group = "thin-#{service}"

    w.name = w.group + "-#{number}"

    w.interval = 30.seconds

    #w.uid = user

    #w.gid = group

    ext = File.extname(pid_path)

    w.pid_file = pid_path.gsub(/#{ext}$/, ".#{number}#{ext}")

    w.start = "thin start -c #{app_dir} -p #{number} -o #{number}"

    w.start_grace = 10.seconds

    w.stop = "thin stop -c #{app_dir} -P #{w.pid_file}"

    w.stop_grace = 10.seconds

    w.restart = "thin restart -c #{app_dir} -p #{number} -o #{number} -P #{w.pid_file}"

    w.behavior(:clean_pid_file)

    w.start_if do |start|

start.condition(:process_running)do|c|

c.interval=5.seconds

c.running=false

#c.notify='developers'

end

end

w.restart_ifdo|restart|

restart.condition(:memory_usage)do|c|

c.above=150.megabytes

c.times=[3,5]#3outof5intervals

#c.notify='developers'

end

restart.condition(:cpu_usage)do|c|

c.above=50.percent

c.times=5

#c.notify='developers'

end

end

w.lifecycledo|on|

on.condition(:flapping)do|c|

c.to_state=[:start,:restart]

c.times=5

c.within=5.minutes

c.transition=:unmonitored

c.retry_in=10.minutes

c.retry_times=5

c.retry_within=2.hours

#c.notify='developers'

end

    end

end

运行 god -c config/thin.god  -D

OK

god status

thin-test-9000: up

thin-test-9001:up

thin-test-9002:up

thin-test-9003:up

thin-test-9004:up

相关推荐