开源软件在运维中的实战
丁昊@易宝支付
SACC2011SACC2011
About me:
Sys Architect@yeepay
Twitter & Wei bo & Github:
@fire9
SACC2011SACC2011
易宝支付公司简介
SACC2011SACC2011
愿景
更快速的部署
更稳定的运行
更高的指标
更多的透明度
更高的可扩展性
百分百开源
SACC2011SACC2011
long long a go...
不专业,不规范
人手和经验都有限
硬件采购无标准,资产管理混乱
在经验中学习
硬件无法发挥出应有的性能
监控不到位,阀值设置不合理,乱报警
SACC2011SACC2011
What Puppet?
开源,自动化集中式配置管理框架
支持Linux,BSD,Solaris,HP-UX,AIX
C/S结构
可以使用ruby或其他脚本语言自定义
提供简化的一致性
花更少的时间做更多的事情,避免重复的劳动
What is Puppet?
SACC2011SACC2011
Puppet好处
管理系统中的每一个文件
保证客户端(应用服务器)一定的状态
完全自定义,轻松上手
成熟的开源社区,开发者和贡献者在逐渐的的壮大
规范化,代码化,容易保存管理
SACC2011SACC2011
Puppet平台
SACC2011SACC2011
Puppet 运作方式
SACC2011SACC2011
Puppet Syntax
file { '/etc/ssh/sshd_config':
source => 'puppet:///configs/system/sshd_config',
mode => 0600,
notify => Service['sshd'],
require => Package['openssh-server'],
}
SACC2011SACC2011
Puppet Syntax
package { openssh-server:
ensure => present,
}
SACC2011SACC2011
class ssh-server {
file { '/etc/ssh/sshd_config':
source => 'puppet:///configs/system/
sshd_config',
mode => 0600,
notify => Service['sshd'],
require => Package['openssh-server'],
}
package { openssh-server:
ensure => present,
}
service { sshd:
ensure => running,
enable => true,
require => Package['openssh-server']
}
}
Puppet Syntax
SACC2011SACC2011
Puppet Syntax
node { DevOpsApp01:
include ssh-server
}
SACC2011SACC2011
代码上线那些事
是否你觉得部署代码是一件麻烦的事情?
或者你觉得这会影响你的工作效率?
你是否要一台台从起重启应用?
你还记得之前上传的那些文件吗?
你还记得你更新过数据库配置吗?
SACC2011SACC2011
用开源的软件和框架,
实现应用代码的自动化部署,
取代那些陈旧,繁琐的部署任务。
代码上线那些事
停止浪费时间!
让我们努力的变得更懒惰!
SACC2011SACC2011
Capistrano
一个开源的在多服务器运行脚本的程序
主要功能是部署rails程序,使用scm(git)管理代码
通过SSH认证授权
你只需要几分钟时间就可以部署到生产环境中
你只需要一个按钮就可以部署N台
解决你在部署中错误的恐慌
SACC2011SACC2011
最初的目录结构
SACC2011SACC2011
之后的目录结构
SACC2011SACC2011
cap -vT
cap <some task>
cap invoke COMMAND=“uptime”
cap invoke COMMAND= “uptime” ROLES=sa
cap invoke COMMAND= “uptime” HOSTS=
cap shell
Cap
SACC2011SACC2011
Cap
cap deploy:setup
cap deploy:check
cap deploy:cold
cap deploy:update
cap deploy:migrate
cap deploy:start
cap deploy
cap deploy:rollback
cap deploy:migrations
cap deploy:web:disable
cap deploy:web:enable
cap deploy:cleanup
SACC2011SACC2011
How to do
yum install ruby
gem install capistrano
capify .
cap -vT
vi config/
SACC2011SACC2011
Variables
:ssh_options
:application
:repository
:scm
:deploy_to
:revision
:use_sudo
:group_writable
:rake
:current_path
:release_path
:shared_path
SACC2011SACC2011
set:application, “yourappname”
set :repository, “your git url"
set :scm, “git”
role :web, “your site address"
role :app, " your site address "
role :db, " your site address "
set :deploy_to, “path to deploy"
set :user, “username"
set :git_username, “git username"
set :git_password, “git password"
desc "Restart the webserver/fcgi procs, however you do it"
task :restart, :roles => :app do
# I’m not going to restart anything for this example
end
task :after_deploy, :roles => :app do
# Set my new to be executable
run "chmod 755 #{deploy_to}/current/public/"
end SACC2011SACC2011
namespace :migrations do
desc "Run the Migrations"
task :up, :roles => :app do
run "cd #{current_path}; rake db:auto:migrate;"
end
task :down, :roles => :app do
run "cd #{current_path}; rake db:drop; rake db:create"
end
end
SACC2011SACC2011
Capistrano-extra
capistrano_colors
capistrano_ext
Webistrano
etc......
SACC2011SACC2011
自动化的缺点
前期投入很大
后期导致约会时间增加
钱包逐渐变瘪
SACC2011SACC2011
相关参考
SACC2011SACC2011
Thank
You!
SACC2011SACC2011