SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
Chef
Patterns
at
Bloomberg
Scale
//
CHEF PATTERNS AT
BLOOMBERG SCALE
HADOOP INFRASTRUCTURE TEAM
https://github.com/bloomberg/chef-bach
Freenode: #chef-bach
Chef
Patterns
at
Bloomberg
Scale
//
BLOOMBERG CLUSTERS 2
• APPLICATION SPECIFIC
• Hadoop, Kafka
• ENVIRONMENT SPECIFIC
• Networking, Storage
• BUILT REGULARLY
• DEDICATED “BOOTSTRAP” SERVER
• Virtual Machine
• DEDICATED CHEF-SERVER
Chef
Patterns
at
Bloomberg
Scale
//
WHY A VM? 3
• LIGHTWEIGHT PRE-REQUISITE
• Low memory/Storage Requirements
• RAPID DEPLOYMENT
• Vagrant for Bring-Up
• Vagrant for Re-Configuration
• EASY RELEASE MANAGEMENT
• MULTIPLE VM PER HYPERVISOR
• Multiple Clusters
• EASY RELOCATION
Chef
Patterns
at
Bloomberg
Scale
//
SERVICES OFFERED 4
• REPOSITORIES
• APT
• Ruby Gems
• Static Files (Chef!)
• CHEF SERVER
• KERBEROS KDC
• PXE SERVER
• DHCP/TFTP Server
• Cobbler (https://github.com/bloomberg/cobbler-cookbook)
• Bridged Networking (for test VMs)
• STRONG ISOLATION
Chef
Patterns
at
Bloomberg
Scale
//
BUILDING BOOTSTRAP 5
• CHEF AND VAGRANT
• Generic Image (Jenkins)
• NETWORK CONFIGURATION
• CORRECTING “KNIFE.RB”
• CHEF SERVER RECONFIGURATION
• CLEAN UP (CHEF REST API)
• CONVERT BOOTSTRAP TO BE AN ADMIN CLIENT
• Secrets/Keys
Chef
Patterns
at
Bloomberg
Scale
//
BUILDING BOOTSTRAP 6
• CHEF-SOLO PROVISIONER
# Chef provisioning
bootstrap.vm.provision "chef_solo" do |chef|
chef.environments_path = [[:vm,""]]
chef.environment = env_name
chef.cookbooks_path = [[:vm,""]]
chef.roles_path = [[:vm,""]]
chef.add_recipe("bcpc::bootstrap_network")
chef.log_level="debug"
chef.verbose_logging=true
chef.provisioning_path="/home/vagrant/chef-bcpc/"
end
• CHEF SERVER RECONFIGURATION
• NGINX, SOLR, RABBITMQ
# Reconfigure chef-server
bootstrap.vm.provision :shell, :inline => "chef-server-ctl reconfigure"
Chef
Patterns
at
Bloomberg
Scale
//
BUILDING BOOTSTRAP 7
• CLEAN UP (REST API)
ruby_block "cleanup-old-environment-databag" do
block do
rest = Chef::REST.new(node[:chef_client][:server_url], "admin", 
"/etc/chef-server/admin.pem")
rest.delete("/environments/GENERIC")
rest.delete("/data/configs/GENERIC")
end
end
ruby_block "cleanup-old-clients" do
block do
system_clients = ["chef-validator", "chef-webui"]
rest = Chef::REST.new(node[:chef_client][:server_url], "admin", 
"/etc/chef-server/admin.pem")
rest.get_rest("/clients").each do |client|
if !system_clients.include?(client.first)
rest.delete("/clients/#{client.first}")
end
end
end
end
Chef
Patterns
at
Bloomberg
Scale
//
BUILDING BOOTSTRAP 8
• CONVERT TO ADMIN (BOOTSTRAP_CONFIG.RB)
ruby_block "convert-bootstrap-to-admin" do
block do
rest = Chef::REST.new(node[:chef_client][:server_url],
"admin",
"/etc/chef-server/admin.pem")
rest.put_rest("/clients/#{node[:hostname]}",{:admin => true})
rest.put_rest("/nodes/#{node[:hostname]}",
{ :name => node[:hostname],
:run_list => ['role[BCPC-Bootstrap]'] }
)
end
end
Chef
Patterns
at
Bloomberg
Scale
//
CLUSTER USABILITY 9
• CODE DEPLOYMENT
• APPLICATION COOKBOOKS
• RUBY GEMS
• Zookeeper, WebHDFS
• CLUSTERS ARE NOT SINGLE MACHINE
• Which machine to deploy
• Idempotency; Races
Chef
Patterns
at
Bloomberg
Scale
//
DEPLOY TO HDFS 10
• USE CHEF DIRECTORY RESOURCE
• USE CUSTOM PROVIDER
• https://github.com/bloomberg/chef-
bach/blob/master/cookbooks/bcpc-
hadoop/libraries/hdfsdirectory.rb
directory “/projects/myapp” do
mode 755
owner “foo”
recursive true
provider BCPC::HdfsDirectory
end
Chef
Patterns
at
Bloomberg
Scale
//
DEPLOY KAFKA TOPIC 11
• USE LWRP
• Dynamic Topic; Right Zookeeper
• PROVIDER CODE AVAILABLE AT
• https://github.com/mthssdrbrg/kafka-cookbook/pull/49
# Kafka Topic Resource
actions :create, :update
attribute :name, :kind_of => String , :name_attribute => true
attribute :partitions, :kind_of => Integer, :default => 1
attribute :replication, :kind_of => Integer, :default => 1
Chef
Patterns
at
Bloomberg
Scale
//
KERBEROS 12
• KEYTABS
• Per Service / Host
• Up to 10 Keytabs per Host
• WHAT ABOUT MULTI HOMED HOSTS?
• Hadoop imputes _HOST
• PROVIDERS
• WebHDFS uses SPNEGO
• SYSTEM ROLE ACCOUNTS
• TENANT ROLE ACCOUNTS
• AVAILABLE AT
• https://github.com/bloomberg/chef-bach/tree/kerberos
Chef
Patterns
at
Bloomberg
Scale
//
LOGIC INJECTION 13
• COMPLETE CODE CAN BE FOUND AT
• Community cookbook
• https://github.com/mthssdrbrg/kafka-cookbook#controlling-restart-of-
kafka-brokers-in-a-cluster
• Wrapper custom recipe
• https://github.com/bloomberg/chef-
bach/blob/rolling_restart/cookbooks/kafka-bcpc/recipes/coordinate.rb
Statutory Warning 
Code snippets are edited to fit the slides which may have resulted in logic
incoherence, bugs and un-readability. Readers discretion requested.
Chef
Patterns
at
Bloomberg
Scale
//
LOGIC INJECTION 14
• WE USE COMMUNITY COOKBOOKS
• Takes care of standard install, enable and starting of services
• NEED TO ADD LOGIC TO COOKBOOK RECIPES
• Take action on a service only when conditions are satisfied
• Take action on a service based on dependent service state
Chef
Patterns
at
Bloomberg
Scale
//
template ::File.join(node.kafka.config_dir, 'server.properties') do
source 'server.properties.erb'
...
helpers(Kafka::Configuration)
if restart_on_configuration_change?
notifies :restart, 'service[kafka]', :delayed
end
end
service 'kafka' do
provider kafka_init_opts[:provider]
supports start: true, stop: true, restart: true, status: true
action kafka_service_actions
end
LOGIC INJECTION 15
VANILLA COMMUNITY COOKBOOK:
Chef
Patterns
at
Bloomberg
Scale
//
template ::File.join(node.kafka.config_dir, 'server.properties') do
source 'server.properties.erb'
...
helpers(Kafka::Configuration)
if restart_on_configuration_change?
notifies :restart, 'service[kafka]', :delayed
end
end
#----- Remove ----#
service 'kafka' do
provider kafka_init_opts[:provider]
supports start: true, stop: true, restart: true, status: true
action kafka_service_actions
end
#----- Remove----#
LOGIC INJECTION 16
VANILLA COMMUNITY COOKBOOK:
Chef
Patterns
at
Bloomberg
Scale
//
template ::File.join(node.kafka.config_dir, 'server.properties') do
source 'server.properties.erb’
...
helpers(Kafka::Configuration)
if restart_on_configuration_change?
notifies :create, 'ruby_block[pre-shim]', :immediately
end
end
#----- Replace----#
include_recipe node["kafka"]["start_coordination"]["recipe"]
#----- Replace----#
LOGIC INJECTION 17
VANILLA COMMUNITY COOKBOOK 2.0:
Chef
Patterns
at
Bloomberg
Scale
//
ruby_block 'pre-shim' do
# pre-restart no-op
notifies :restart, 'service[kafka] ', :delayed
end
service 'kafka' do
provider kafka_init_opts[:provider]
supports start: true, stop: true, restart: true, status: true
action kafka_service_actions
end
LOGIC INJECTION 18
COOKBOOK COORDINATOR RECIPE:
Chef
Patterns
at
Bloomberg
Scale
//
ruby_block 'pre-shim' do
# pre-restart done here
notifies :restart, 'service[kafka] ', :delayed
end
service 'kafka' do
provider kafka_init_opts[:provider]
supports start: true, stop: true, restart: true, status: true
action kafka_service_actions
notifies :create, 'ruby_block[post-shim] ', :immediately
end
ruby_block 'post-shim' do
# clean-up done here
end
LOGIC INJECTION 19
WRAPPER COORDINATOR RECIPE:
Chef
Patterns
at
Bloomberg
Scale
//
SERVICE ON DEMAND 20
• COMMON SERVICE WHICH CAN BE REQUESTED
• Copy log files from applications into a centralized location
• Single location for users to review logs and helps with security
• Service available on all the nodes
• Applications can request the service dynamically
Chef
Patterns
at
Bloomberg
Scale
//
SERVICE ON DEMAND 21
• NODE ATTRIBUTE TO STORE SERVICE REQUESTS
default['bcpc']['hadoop']['copylog'] = {}
• DATA STRUCTURE TO MAKE SERVICE REQUESTS
{
'app_id' => { 'logfile' => "/path/file_name_of_log_file",
'docopy' => true (or false)
},...
}
Chef
Patterns
at
Bloomberg
Scale
//
SERVICE ON DEMAND 22
• APPLICATION RECIPES MAKE SERVICE REQUESTS
#
# Updating node attributes to copy HBase master log file to HDFS
#
node.default['bcpc']['hadoop']['copylog']['hbase_master'] = {
'logfile' => "/var/log/hbase/hbase-master-#{node.hostname}.log",
'docopy' => true
}
node.default['bcpc']['hadoop']['copylog']['hbase_master_out'] = {
'logfile' => "/var/log/hbase/hbase-master-#{node.hostname}.out",
'docopy' => true
}
Chef
Patterns
at
Bloomberg
Scale
//
SERVICE ON DEMAND 23
• RECIPE FOR THE COMMON SERVICE
node['bcpc']['hadoop']['copylog'].each do |id,f|
if f['docopy']
template "/etc/flume/conf/flume-#{id}.conf" do
source "flume_flume-conf.erb”
action :create ...
variables(:agent_name => "#{id}",
:log_location => "#{f['logfile']}" )
notifies :restart,"service[flume-agent-multi-#{id}]",:delayed
end
service "flume-agent-multi-#{id}" do
supports :status => true, :restart => true, :reload => false
service_name "flume-agent-multi"
action :start
start_command "service flume-agent-multi start #{id}"
restart_command "service flume-agent-multi restart #{id}"
status_command "service flume-agent-multi status #{id}"
end
Chef
Patterns
at
Bloomberg
Scale
//
PLUGGABLE ALERTS 24
• SINGLE SOURCE FOR MONITORED STATS
• Allows users to visualize stats across different parameters
• Didn’t want to duplicate the stats collection by alerting system
• Need to feed data to the alerting system to generate alerts
Chef
Patterns
at
Bloomberg
Scale
//
PLUGGABLE ALERTS 25
• ATTRIBUTE WHERE USERS CAN DEFINE ALERTS
default["bcpc"]["hadoop"]["graphite"]["queries"] = {
'hbase_master' => [
{ 'type' => "jmx",
'query' => "memory.NonHeapMemoryUsage_committed",
'key' => "hbasenonheapmem",
'trigger_val' => "max(61,0)",
'trigger_cond' => "=0",
'trigger_name' => "HBaseMasterAvailability",
'trigger_dep' => ["NameNodeAvailability"],
'trigger_desc' => "HBase master seems to be down",
'severity' => 1
},{
'type' => "jmx",
'query' => "memory.HeapMemoryUsage_committed",
'key' => "hbaseheapmem",
...
},...], ’namenode' => [...] ...}
Query to pull stats
from data source
Define alert criteria
Chef
Patterns
at
Bloomberg
Scale
//
TEMPLATE PITFALLS 26
• LIBRARY FUNCTION CALLS IN WRAPPER COOKBOOKS
• Community cookbook provider accepts template as an attribute
• Template passed from wrapper makes a library function call
• Wrapper recipe includes the module of library function
Chef
Patterns
at
Bloomberg
Scale
//
TEMPLATE PITFALLS 27
...
Chef::Resource.send(:include, Bcpc::OSHelper)
...
cobbler_profile "bcpc_host" do
kickstart "cobbler.bcpc_ubuntu_host.preseed"
distro "ubuntu-12.04-mini-x86_64”
end
...
...
d-i passwd/user-password-crypted password
<%="#{get_config(@node, 'cobbler-root-password-salted')}"%>
d-i passwd/user-uid string
...
• WRAPPER RECIPE
• FUNCTION CALL IN TEMPLATE
Chef
Patterns
at
Bloomberg
Scale
//
TEMPLATE PITFALLS 28
...
d-i passwd/user-password-crypted password
<%="#{Bcpc::OSHelper.get_config(@node, 'cobbler-root-password-
salted')}"%>
d-i passwd/user-uid string
...
• MODIFIED FUNCTION CALL IN TEMPLATE
Chef
Patterns
at
Bloomberg
Scale
//
DYNAMIC RESOURCES 29
• ANIT-PATTERN?
ruby_block "create namenode directories" do
block do
node[:bcpc][:storage][:mounts].each do |d|
dir = Chef::Resource::Directory.new("#{mount_root}/#{d}/dfs/nn",
run_context)
dir.owner "hdfs"
dir.group "hdfs"
dir.mode 0755
dir.recursive true
dir.run_action :create
exe = Chef::Resource::Execute.new("fixup nn owner", run_context)
exe.command "chown -Rf hdfs:hdfs #{mount_root}/#{d}/dfs"
exe.only_if {
Etc.getpwuid(File.stat("#{mount_root}/#{d}/dfs/").uid).name !=
"hdfs "
}
end
end
Chef
Patterns
at
Bloomberg
Scale
//
DYNAMIC RESOURCES 30
• SYSTEM CONFIGURATION
• Lengthy Configuration of a Storage Controller
• Setting Attributes at Converge Time
• Compile Time Actions?
• MUST WRAP IN RUBY_BLOCK’S
• Does not Update the Resource Collection
• Lazy’s everywhere:
• Guards: not_if{lazy{node[…]}.call.map{…}}
Chef
Patterns
at
Bloomberg
Scale
//
SERVICE RESTART 31
• WE USE JMXTRANS TO MONITOR JMX STATS
• Service to be monitored varies with node
• There can be more than one service to be monitored
• Monitored service restart requires JMXtrans to be restarted**
Chef
Patterns
at
Bloomberg
Scale
//
SERVICE RESTART 32
• DATA STRUCTURE IN ROLES TO DEFINE THE SERVICES
"default_attributes" : {
"jmxtrans”:{
"servers”:[
{
"type": "datanode",
"service": "hadoop-hdfs-datanode",
"service_cmd":
"org.apache.hadoop.hdfs.server.datanode.DataNode"
}, {
"type": "hbase_rs",
"service": "hbase-regionserver",
"service_cmd":
“org.apache.hadoop.hbase.regionserver.HRegionServer"
}
]
} ...
Dependent Service Name
String to uniquely identify
the service process
Chef
Patterns
at
Bloomberg
Scale
//
SERVICE RESTART 33
• JMXTRANS SERVICE RESTART LOGIC BUILT DYNAMICALLY
jmx_services = Array.new
jmx_srvc_cmds = Hash.new
node['jmxtrans']['servers'].each do |server|
jmx_services.push(server['service'])
jmx_srvc_cmds[server['service']] = server['service_cmd']
end
service "restart jmxtrans on dependent service" do
service_name "jmxtrans"
supports :restart => true, :status => true, :reload => true
action :restart
jmx_services.each do |jmx_dep_service|
subscribes :restart, "service[#{jmx_dep_service}]", :delayed
end
only_if {process_require_restart?("jmxtrans","jmxtrans-all.jar”,
jmx_srvc_cmds)}
end
What if a
process is
re/started
externally?
Store the dependent service
name and process ids in
local variables
Subscribes from all
dependent services
Chef
Patterns
at
Bloomberg
Scale
//
SERVICE RESTART 34
def process_require_restart?(process_name, process_cmd, dep_cmds)
tgt_proces_pid = `pgrep -f #{process_cmd}`
...
tgt_proces_stime = `ps --no-header -o start_time #{tgt_process_pid}`
...
ret = false
restarted_processes = Array.new
dep_cmds.each do |dep_process, dep_cmd|
dep_pids = `pgrep -f #{dep_cmd}`
if dep_pids != ""
dep_pids_arr = dep_pids.split("n")
dep_pids_arr.each do |dep_pid|
dep_process_stime = `ps --no-header -o start_time #{dep_pid}`
if DateTime.parse(tgt_proces_stime) <
DateTime.parse(dep_process_stime)
restarted_processes.push(dep_process)
ret = true
end ...
Start time of the service process
Start time of all the service processes on
which it is dependent on
Compare the start time
Chef
Patterns
at
Bloomberg
Scale
//
ROLLING RESTART 35
• AUTOMATIC CONVERGENCE
• AVAILABILITY
• High Availability
• Toxic Configuration
• HOW
• Check Masters for Slave Status
• Synchronous Communication
• Locking
Chef
Patterns
at
Bloomberg
Scale
//
ROLLING RESTART 36
• FLAGGING
• Negative Flagging – flag when a service is down
• Positive Flagging – flag when a service is reconfiguring
• Deadlock Avoidance
• CONTENTION
• Poll & Wait
• Fail the Run
• Simply Skip Service Restart and Go On
• Store the Need for Restart
• Breaks Assumptions of Procedural Chef Runs
Chef
Patterns
at
Bloomberg
Scale
//
ROLLING RESTART 37
HADOOP_SERVICE "ZOOKEEPER-SERVER" DO
DEPENDENCIES ["TEMPLATE[/ETC/ZOOKEEPER/CONF/ZOO.CFG]",
"TEMPLATE[/USR/LIB/ZOOKEEPER/BIN/ZKSERVER.SH]",
"TEMPLATE[/ETC/DEFAULT/ZOOKEEPER-SERVER]"]
PROCESS_IDENTIFIER "ORG.APACHE.ZOOKEEPER ... QUORUMPEERMAIN"
END
• SERVICE DEFINITION
Chef
Patterns
at
Bloomberg
Scale
//
ROLLING RESTART 38
• SYNCH STATE STORE
• Zookeeper
• SERVICE RESTART (KAFKA) VALIDATION CHECK
• Based on Jenkins pattern for wait_until_ready!
• Verifies that the service is up to an acceptable level
• Passes or stops the Chef run
• FUTURE DIRECTIONS
• Topology Aware Deployment
• Data Aware Deployment
Chef
Patterns
at
Bloomberg
Scale
//
WE ARE HIRING
JOBS.BLOOMBERG.COM:
https://github.com/bloomberg/chef-bach
Freenode: #chef-bach
• Hadoop Infrastructure Engineer
• DevOps Engineer Search Infrastructure

Weitere ähnliche Inhalte

Was ist angesagt?

Operating and supporting HBase Clusters
Operating and supporting HBase ClustersOperating and supporting HBase Clusters
Operating and supporting HBase Clustersenissoz
 
Deploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQLDeploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQLDenish Patel
 
Floating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache RatisFloating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache RatisDataWorks Summit
 
Ibm spectrum scale fundamentals workshop for americas part 4 Replication, Str...
Ibm spectrum scale fundamentals workshop for americas part 4 Replication, Str...Ibm spectrum scale fundamentals workshop for americas part 4 Replication, Str...
Ibm spectrum scale fundamentals workshop for americas part 4 Replication, Str...xKinAnx
 
Apache Kafka
Apache KafkaApache Kafka
Apache KafkaJoe Stein
 
Hhm 3474 mq messaging technologies and support for high availability and acti...
Hhm 3474 mq messaging technologies and support for high availability and acti...Hhm 3474 mq messaging technologies and support for high availability and acti...
Hhm 3474 mq messaging technologies and support for high availability and acti...Pete Siddall
 
Reduce planned database down time with Oracle technology
Reduce planned database down time with Oracle technologyReduce planned database down time with Oracle technology
Reduce planned database down time with Oracle technologyKirill Loifman
 
HBase Backups
HBase BackupsHBase Backups
HBase BackupsHBaseCon
 
HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...DataWorks Summit
 
Cross-Site BigTable using HBase
Cross-Site BigTable using HBaseCross-Site BigTable using HBase
Cross-Site BigTable using HBaseHBaseCon
 
EFM Office Hours - APJ - July 29, 2021
EFM Office Hours - APJ - July 29, 2021EFM Office Hours - APJ - July 29, 2021
EFM Office Hours - APJ - July 29, 2021EDB
 
HBase and HDFS: Understanding FileSystem Usage in HBase
HBase and HDFS: Understanding FileSystem Usage in HBaseHBase and HDFS: Understanding FileSystem Usage in HBase
HBase and HDFS: Understanding FileSystem Usage in HBaseenissoz
 
An Introduction to Apache Kafka
An Introduction to Apache KafkaAn Introduction to Apache Kafka
An Introduction to Apache KafkaAmir Sedighi
 
Hadoop Cluster With High Availability
Hadoop Cluster With High AvailabilityHadoop Cluster With High Availability
Hadoop Cluster With High AvailabilityEdureka!
 
Meet HBase 1.0
Meet HBase 1.0Meet HBase 1.0
Meet HBase 1.0enissoz
 
Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...
Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...
Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...xKinAnx
 

Was ist angesagt? (19)

Operating and supporting HBase Clusters
Operating and supporting HBase ClustersOperating and supporting HBase Clusters
Operating and supporting HBase Clusters
 
Deploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQLDeploying Maximum HA Architecture With PostgreSQL
Deploying Maximum HA Architecture With PostgreSQL
 
Floating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache RatisFloating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache Ratis
 
Flume and HBase
Flume and HBase Flume and HBase
Flume and HBase
 
Ibm spectrum scale fundamentals workshop for americas part 4 Replication, Str...
Ibm spectrum scale fundamentals workshop for americas part 4 Replication, Str...Ibm spectrum scale fundamentals workshop for americas part 4 Replication, Str...
Ibm spectrum scale fundamentals workshop for americas part 4 Replication, Str...
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
 
Hhm 3474 mq messaging technologies and support for high availability and acti...
Hhm 3474 mq messaging technologies and support for high availability and acti...Hhm 3474 mq messaging technologies and support for high availability and acti...
Hhm 3474 mq messaging technologies and support for high availability and acti...
 
Lec13 cdn
Lec13 cdnLec13 cdn
Lec13 cdn
 
Reduce planned database down time with Oracle technology
Reduce planned database down time with Oracle technologyReduce planned database down time with Oracle technology
Reduce planned database down time with Oracle technology
 
HBase Backups
HBase BackupsHBase Backups
HBase Backups
 
HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...
 
Cross-Site BigTable using HBase
Cross-Site BigTable using HBaseCross-Site BigTable using HBase
Cross-Site BigTable using HBase
 
EFM Office Hours - APJ - July 29, 2021
EFM Office Hours - APJ - July 29, 2021EFM Office Hours - APJ - July 29, 2021
EFM Office Hours - APJ - July 29, 2021
 
HBase and HDFS: Understanding FileSystem Usage in HBase
HBase and HDFS: Understanding FileSystem Usage in HBaseHBase and HDFS: Understanding FileSystem Usage in HBase
HBase and HDFS: Understanding FileSystem Usage in HBase
 
An Introduction to Apache Kafka
An Introduction to Apache KafkaAn Introduction to Apache Kafka
An Introduction to Apache Kafka
 
Hadoop Cluster With High Availability
Hadoop Cluster With High AvailabilityHadoop Cluster With High Availability
Hadoop Cluster With High Availability
 
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
 
Meet HBase 1.0
Meet HBase 1.0Meet HBase 1.0
Meet HBase 1.0
 
Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...
Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...
Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...
 

Ähnlich wie Chef conf-2015-chef-patterns-at-bloomberg-scale

Chef Patterns at Bloomberg Scale
Chef Patterns at Bloomberg ScaleChef Patterns at Bloomberg Scale
Chef Patterns at Bloomberg ScaleChef
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chefkevsmith
 
Chef, Vagrant and Friends
Chef, Vagrant and FriendsChef, Vagrant and Friends
Chef, Vagrant and FriendsBen McRae
 
CIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef CookbooksCIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef CookbooksICF CIRCUIT
 
Open Source Recipes for Chef Deployments of Hadoop
Open Source Recipes for Chef Deployments of HadoopOpen Source Recipes for Chef Deployments of Hadoop
Open Source Recipes for Chef Deployments of HadoopDataWorks Summit
 
Docker based Architecture by Denys Serdiuk
Docker based Architecture by Denys SerdiukDocker based Architecture by Denys Serdiuk
Docker based Architecture by Denys SerdiukLohika_Odessa_TechTalks
 
AAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
AAI-3218 Production Deployment Best Practices for WebSphere Liberty ProfileAAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
AAI-3218 Production Deployment Best Practices for WebSphere Liberty ProfileWASdev Community
 
Overview of Chef - Fundamentals Webinar Series Part 1
Overview of Chef - Fundamentals Webinar Series Part 1Overview of Chef - Fundamentals Webinar Series Part 1
Overview of Chef - Fundamentals Webinar Series Part 1Chef
 
Introduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefIntroduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefAll Things Open
 
Achieving Infrastructure Portability with Chef
Achieving Infrastructure Portability with ChefAchieving Infrastructure Portability with Chef
Achieving Infrastructure Portability with ChefMatt Ray
 
2015 08-11-scdo-meetup
2015 08-11-scdo-meetup2015 08-11-scdo-meetup
2015 08-11-scdo-meetupSuresh Paulraj
 
TXLF: Chef- Software Defined Infrastructure Today & Tomorrow
TXLF: Chef- Software Defined Infrastructure Today & TomorrowTXLF: Chef- Software Defined Infrastructure Today & Tomorrow
TXLF: Chef- Software Defined Infrastructure Today & TomorrowMatt Ray
 
Chef for OpenStack - OpenStack Fall 2012 Summit
Chef for OpenStack  - OpenStack Fall 2012 SummitChef for OpenStack  - OpenStack Fall 2012 Summit
Chef for OpenStack - OpenStack Fall 2012 SummitMatt Ray
 
DevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of ChefDevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of ChefAntons Kranga
 
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Mandi Walls
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011Bachkoutou Toutou
 
OpenStack Deployments with Chef
OpenStack Deployments with ChefOpenStack Deployments with Chef
OpenStack Deployments with ChefMatt Ray
 

Ähnlich wie Chef conf-2015-chef-patterns-at-bloomberg-scale (20)

Chef Patterns at Bloomberg Scale
Chef Patterns at Bloomberg ScaleChef Patterns at Bloomberg Scale
Chef Patterns at Bloomberg Scale
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
 
Chef, Vagrant and Friends
Chef, Vagrant and FriendsChef, Vagrant and Friends
Chef, Vagrant and Friends
 
CIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef CookbooksCIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
 
Chef introduction
Chef introductionChef introduction
Chef introduction
 
Open Source Recipes for Chef Deployments of Hadoop
Open Source Recipes for Chef Deployments of HadoopOpen Source Recipes for Chef Deployments of Hadoop
Open Source Recipes for Chef Deployments of Hadoop
 
Docker based Architecture by Denys Serdiuk
Docker based Architecture by Denys SerdiukDocker based Architecture by Denys Serdiuk
Docker based Architecture by Denys Serdiuk
 
AAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
AAI-3218 Production Deployment Best Practices for WebSphere Liberty ProfileAAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
AAI-3218 Production Deployment Best Practices for WebSphere Liberty Profile
 
Overview of Chef - Fundamentals Webinar Series Part 1
Overview of Chef - Fundamentals Webinar Series Part 1Overview of Chef - Fundamentals Webinar Series Part 1
Overview of Chef - Fundamentals Webinar Series Part 1
 
Introduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefIntroduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to Chef
 
Achieving Infrastructure Portability with Chef
Achieving Infrastructure Portability with ChefAchieving Infrastructure Portability with Chef
Achieving Infrastructure Portability with Chef
 
2015 08-11-scdo-meetup
2015 08-11-scdo-meetup2015 08-11-scdo-meetup
2015 08-11-scdo-meetup
 
TXLF: Chef- Software Defined Infrastructure Today & Tomorrow
TXLF: Chef- Software Defined Infrastructure Today & TomorrowTXLF: Chef- Software Defined Infrastructure Today & Tomorrow
TXLF: Chef- Software Defined Infrastructure Today & Tomorrow
 
Chef for OpenStack - OpenStack Fall 2012 Summit
Chef for OpenStack  - OpenStack Fall 2012 SummitChef for OpenStack  - OpenStack Fall 2012 Summit
Chef for OpenStack - OpenStack Fall 2012 Summit
 
Chef for OpenStack- Fall 2012.pdf
Chef for OpenStack- Fall 2012.pdfChef for OpenStack- Fall 2012.pdf
Chef for OpenStack- Fall 2012.pdf
 
DevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of ChefDevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of Chef
 
IaaS with Chef
IaaS with ChefIaaS with Chef
IaaS with Chef
 
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011
 
OpenStack Deployments with Chef
OpenStack Deployments with ChefOpenStack Deployments with Chef
OpenStack Deployments with Chef
 

Mehr von Biju Nair

HBase Internals And Operations
HBase Internals And OperationsHBase Internals And Operations
HBase Internals And OperationsBiju Nair
 
Apache Kafka Reference
Apache Kafka ReferenceApache Kafka Reference
Apache Kafka ReferenceBiju Nair
 
Serving queries at low latency using HBase
Serving queries at low latency using HBaseServing queries at low latency using HBase
Serving queries at low latency using HBaseBiju Nair
 
Multi-Tenant HBase Cluster - HBaseCon2018-final
Multi-Tenant HBase Cluster - HBaseCon2018-finalMulti-Tenant HBase Cluster - HBaseCon2018-final
Multi-Tenant HBase Cluster - HBaseCon2018-finalBiju Nair
 
Cursor Implementation in Apache Phoenix
Cursor Implementation in Apache PhoenixCursor Implementation in Apache Phoenix
Cursor Implementation in Apache PhoenixBiju Nair
 
Hadoop security
Hadoop securityHadoop security
Hadoop securityBiju Nair
 
Chef patterns
Chef patternsChef patterns
Chef patternsBiju Nair
 
HBase Application Performance Improvement
HBase Application Performance ImprovementHBase Application Performance Improvement
HBase Application Performance ImprovementBiju Nair
 
HDFS User Reference
HDFS User ReferenceHDFS User Reference
HDFS User ReferenceBiju Nair
 
NENUG Apr14 Talk - data modeling for netezza
NENUG Apr14 Talk - data modeling for netezzaNENUG Apr14 Talk - data modeling for netezza
NENUG Apr14 Talk - data modeling for netezzaBiju Nair
 
Netezza workload management
Netezza workload managementNetezza workload management
Netezza workload managementBiju Nair
 
Row or Columnar Database
Row or Columnar DatabaseRow or Columnar Database
Row or Columnar DatabaseBiju Nair
 
Using Netezza Query Plan to Improve Performace
Using Netezza Query Plan to Improve PerformaceUsing Netezza Query Plan to Improve Performace
Using Netezza Query Plan to Improve PerformaceBiju Nair
 
Netezza fundamentals for developers
Netezza fundamentals for developersNetezza fundamentals for developers
Netezza fundamentals for developersBiju Nair
 
Project Risk Management
Project Risk ManagementProject Risk Management
Project Risk ManagementBiju Nair
 
Websphere MQ (MQSeries) fundamentals
Websphere MQ (MQSeries) fundamentalsWebsphere MQ (MQSeries) fundamentals
Websphere MQ (MQSeries) fundamentalsBiju Nair
 

Mehr von Biju Nair (17)

HBase Internals And Operations
HBase Internals And OperationsHBase Internals And Operations
HBase Internals And Operations
 
Apache Kafka Reference
Apache Kafka ReferenceApache Kafka Reference
Apache Kafka Reference
 
Serving queries at low latency using HBase
Serving queries at low latency using HBaseServing queries at low latency using HBase
Serving queries at low latency using HBase
 
Multi-Tenant HBase Cluster - HBaseCon2018-final
Multi-Tenant HBase Cluster - HBaseCon2018-finalMulti-Tenant HBase Cluster - HBaseCon2018-final
Multi-Tenant HBase Cluster - HBaseCon2018-final
 
Cursor Implementation in Apache Phoenix
Cursor Implementation in Apache PhoenixCursor Implementation in Apache Phoenix
Cursor Implementation in Apache Phoenix
 
Hadoop security
Hadoop securityHadoop security
Hadoop security
 
Chef patterns
Chef patternsChef patterns
Chef patterns
 
HBase Application Performance Improvement
HBase Application Performance ImprovementHBase Application Performance Improvement
HBase Application Performance Improvement
 
HDFS User Reference
HDFS User ReferenceHDFS User Reference
HDFS User Reference
 
NENUG Apr14 Talk - data modeling for netezza
NENUG Apr14 Talk - data modeling for netezzaNENUG Apr14 Talk - data modeling for netezza
NENUG Apr14 Talk - data modeling for netezza
 
Netezza workload management
Netezza workload managementNetezza workload management
Netezza workload management
 
Row or Columnar Database
Row or Columnar DatabaseRow or Columnar Database
Row or Columnar Database
 
Using Netezza Query Plan to Improve Performace
Using Netezza Query Plan to Improve PerformaceUsing Netezza Query Plan to Improve Performace
Using Netezza Query Plan to Improve Performace
 
Netezza fundamentals for developers
Netezza fundamentals for developersNetezza fundamentals for developers
Netezza fundamentals for developers
 
Concurrency
ConcurrencyConcurrency
Concurrency
 
Project Risk Management
Project Risk ManagementProject Risk Management
Project Risk Management
 
Websphere MQ (MQSeries) fundamentals
Websphere MQ (MQSeries) fundamentalsWebsphere MQ (MQSeries) fundamentals
Websphere MQ (MQSeries) fundamentals
 

Kürzlich hochgeladen

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 

Kürzlich hochgeladen (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Chef conf-2015-chef-patterns-at-bloomberg-scale

  • 1. Chef Patterns at Bloomberg Scale // CHEF PATTERNS AT BLOOMBERG SCALE HADOOP INFRASTRUCTURE TEAM https://github.com/bloomberg/chef-bach Freenode: #chef-bach
  • 2. Chef Patterns at Bloomberg Scale // BLOOMBERG CLUSTERS 2 • APPLICATION SPECIFIC • Hadoop, Kafka • ENVIRONMENT SPECIFIC • Networking, Storage • BUILT REGULARLY • DEDICATED “BOOTSTRAP” SERVER • Virtual Machine • DEDICATED CHEF-SERVER
  • 3. Chef Patterns at Bloomberg Scale // WHY A VM? 3 • LIGHTWEIGHT PRE-REQUISITE • Low memory/Storage Requirements • RAPID DEPLOYMENT • Vagrant for Bring-Up • Vagrant for Re-Configuration • EASY RELEASE MANAGEMENT • MULTIPLE VM PER HYPERVISOR • Multiple Clusters • EASY RELOCATION
  • 4. Chef Patterns at Bloomberg Scale // SERVICES OFFERED 4 • REPOSITORIES • APT • Ruby Gems • Static Files (Chef!) • CHEF SERVER • KERBEROS KDC • PXE SERVER • DHCP/TFTP Server • Cobbler (https://github.com/bloomberg/cobbler-cookbook) • Bridged Networking (for test VMs) • STRONG ISOLATION
  • 5. Chef Patterns at Bloomberg Scale // BUILDING BOOTSTRAP 5 • CHEF AND VAGRANT • Generic Image (Jenkins) • NETWORK CONFIGURATION • CORRECTING “KNIFE.RB” • CHEF SERVER RECONFIGURATION • CLEAN UP (CHEF REST API) • CONVERT BOOTSTRAP TO BE AN ADMIN CLIENT • Secrets/Keys
  • 6. Chef Patterns at Bloomberg Scale // BUILDING BOOTSTRAP 6 • CHEF-SOLO PROVISIONER # Chef provisioning bootstrap.vm.provision "chef_solo" do |chef| chef.environments_path = [[:vm,""]] chef.environment = env_name chef.cookbooks_path = [[:vm,""]] chef.roles_path = [[:vm,""]] chef.add_recipe("bcpc::bootstrap_network") chef.log_level="debug" chef.verbose_logging=true chef.provisioning_path="/home/vagrant/chef-bcpc/" end • CHEF SERVER RECONFIGURATION • NGINX, SOLR, RABBITMQ # Reconfigure chef-server bootstrap.vm.provision :shell, :inline => "chef-server-ctl reconfigure"
  • 7. Chef Patterns at Bloomberg Scale // BUILDING BOOTSTRAP 7 • CLEAN UP (REST API) ruby_block "cleanup-old-environment-databag" do block do rest = Chef::REST.new(node[:chef_client][:server_url], "admin", "/etc/chef-server/admin.pem") rest.delete("/environments/GENERIC") rest.delete("/data/configs/GENERIC") end end ruby_block "cleanup-old-clients" do block do system_clients = ["chef-validator", "chef-webui"] rest = Chef::REST.new(node[:chef_client][:server_url], "admin", "/etc/chef-server/admin.pem") rest.get_rest("/clients").each do |client| if !system_clients.include?(client.first) rest.delete("/clients/#{client.first}") end end end end
  • 8. Chef Patterns at Bloomberg Scale // BUILDING BOOTSTRAP 8 • CONVERT TO ADMIN (BOOTSTRAP_CONFIG.RB) ruby_block "convert-bootstrap-to-admin" do block do rest = Chef::REST.new(node[:chef_client][:server_url], "admin", "/etc/chef-server/admin.pem") rest.put_rest("/clients/#{node[:hostname]}",{:admin => true}) rest.put_rest("/nodes/#{node[:hostname]}", { :name => node[:hostname], :run_list => ['role[BCPC-Bootstrap]'] } ) end end
  • 9. Chef Patterns at Bloomberg Scale // CLUSTER USABILITY 9 • CODE DEPLOYMENT • APPLICATION COOKBOOKS • RUBY GEMS • Zookeeper, WebHDFS • CLUSTERS ARE NOT SINGLE MACHINE • Which machine to deploy • Idempotency; Races
  • 10. Chef Patterns at Bloomberg Scale // DEPLOY TO HDFS 10 • USE CHEF DIRECTORY RESOURCE • USE CUSTOM PROVIDER • https://github.com/bloomberg/chef- bach/blob/master/cookbooks/bcpc- hadoop/libraries/hdfsdirectory.rb directory “/projects/myapp” do mode 755 owner “foo” recursive true provider BCPC::HdfsDirectory end
  • 11. Chef Patterns at Bloomberg Scale // DEPLOY KAFKA TOPIC 11 • USE LWRP • Dynamic Topic; Right Zookeeper • PROVIDER CODE AVAILABLE AT • https://github.com/mthssdrbrg/kafka-cookbook/pull/49 # Kafka Topic Resource actions :create, :update attribute :name, :kind_of => String , :name_attribute => true attribute :partitions, :kind_of => Integer, :default => 1 attribute :replication, :kind_of => Integer, :default => 1
  • 12. Chef Patterns at Bloomberg Scale // KERBEROS 12 • KEYTABS • Per Service / Host • Up to 10 Keytabs per Host • WHAT ABOUT MULTI HOMED HOSTS? • Hadoop imputes _HOST • PROVIDERS • WebHDFS uses SPNEGO • SYSTEM ROLE ACCOUNTS • TENANT ROLE ACCOUNTS • AVAILABLE AT • https://github.com/bloomberg/chef-bach/tree/kerberos
  • 13. Chef Patterns at Bloomberg Scale // LOGIC INJECTION 13 • COMPLETE CODE CAN BE FOUND AT • Community cookbook • https://github.com/mthssdrbrg/kafka-cookbook#controlling-restart-of- kafka-brokers-in-a-cluster • Wrapper custom recipe • https://github.com/bloomberg/chef- bach/blob/rolling_restart/cookbooks/kafka-bcpc/recipes/coordinate.rb Statutory Warning  Code snippets are edited to fit the slides which may have resulted in logic incoherence, bugs and un-readability. Readers discretion requested.
  • 14. Chef Patterns at Bloomberg Scale // LOGIC INJECTION 14 • WE USE COMMUNITY COOKBOOKS • Takes care of standard install, enable and starting of services • NEED TO ADD LOGIC TO COOKBOOK RECIPES • Take action on a service only when conditions are satisfied • Take action on a service based on dependent service state
  • 15. Chef Patterns at Bloomberg Scale // template ::File.join(node.kafka.config_dir, 'server.properties') do source 'server.properties.erb' ... helpers(Kafka::Configuration) if restart_on_configuration_change? notifies :restart, 'service[kafka]', :delayed end end service 'kafka' do provider kafka_init_opts[:provider] supports start: true, stop: true, restart: true, status: true action kafka_service_actions end LOGIC INJECTION 15 VANILLA COMMUNITY COOKBOOK:
  • 16. Chef Patterns at Bloomberg Scale // template ::File.join(node.kafka.config_dir, 'server.properties') do source 'server.properties.erb' ... helpers(Kafka::Configuration) if restart_on_configuration_change? notifies :restart, 'service[kafka]', :delayed end end #----- Remove ----# service 'kafka' do provider kafka_init_opts[:provider] supports start: true, stop: true, restart: true, status: true action kafka_service_actions end #----- Remove----# LOGIC INJECTION 16 VANILLA COMMUNITY COOKBOOK:
  • 17. Chef Patterns at Bloomberg Scale // template ::File.join(node.kafka.config_dir, 'server.properties') do source 'server.properties.erb’ ... helpers(Kafka::Configuration) if restart_on_configuration_change? notifies :create, 'ruby_block[pre-shim]', :immediately end end #----- Replace----# include_recipe node["kafka"]["start_coordination"]["recipe"] #----- Replace----# LOGIC INJECTION 17 VANILLA COMMUNITY COOKBOOK 2.0:
  • 18. Chef Patterns at Bloomberg Scale // ruby_block 'pre-shim' do # pre-restart no-op notifies :restart, 'service[kafka] ', :delayed end service 'kafka' do provider kafka_init_opts[:provider] supports start: true, stop: true, restart: true, status: true action kafka_service_actions end LOGIC INJECTION 18 COOKBOOK COORDINATOR RECIPE:
  • 19. Chef Patterns at Bloomberg Scale // ruby_block 'pre-shim' do # pre-restart done here notifies :restart, 'service[kafka] ', :delayed end service 'kafka' do provider kafka_init_opts[:provider] supports start: true, stop: true, restart: true, status: true action kafka_service_actions notifies :create, 'ruby_block[post-shim] ', :immediately end ruby_block 'post-shim' do # clean-up done here end LOGIC INJECTION 19 WRAPPER COORDINATOR RECIPE:
  • 20. Chef Patterns at Bloomberg Scale // SERVICE ON DEMAND 20 • COMMON SERVICE WHICH CAN BE REQUESTED • Copy log files from applications into a centralized location • Single location for users to review logs and helps with security • Service available on all the nodes • Applications can request the service dynamically
  • 21. Chef Patterns at Bloomberg Scale // SERVICE ON DEMAND 21 • NODE ATTRIBUTE TO STORE SERVICE REQUESTS default['bcpc']['hadoop']['copylog'] = {} • DATA STRUCTURE TO MAKE SERVICE REQUESTS { 'app_id' => { 'logfile' => "/path/file_name_of_log_file", 'docopy' => true (or false) },... }
  • 22. Chef Patterns at Bloomberg Scale // SERVICE ON DEMAND 22 • APPLICATION RECIPES MAKE SERVICE REQUESTS # # Updating node attributes to copy HBase master log file to HDFS # node.default['bcpc']['hadoop']['copylog']['hbase_master'] = { 'logfile' => "/var/log/hbase/hbase-master-#{node.hostname}.log", 'docopy' => true } node.default['bcpc']['hadoop']['copylog']['hbase_master_out'] = { 'logfile' => "/var/log/hbase/hbase-master-#{node.hostname}.out", 'docopy' => true }
  • 23. Chef Patterns at Bloomberg Scale // SERVICE ON DEMAND 23 • RECIPE FOR THE COMMON SERVICE node['bcpc']['hadoop']['copylog'].each do |id,f| if f['docopy'] template "/etc/flume/conf/flume-#{id}.conf" do source "flume_flume-conf.erb” action :create ... variables(:agent_name => "#{id}", :log_location => "#{f['logfile']}" ) notifies :restart,"service[flume-agent-multi-#{id}]",:delayed end service "flume-agent-multi-#{id}" do supports :status => true, :restart => true, :reload => false service_name "flume-agent-multi" action :start start_command "service flume-agent-multi start #{id}" restart_command "service flume-agent-multi restart #{id}" status_command "service flume-agent-multi status #{id}" end
  • 24. Chef Patterns at Bloomberg Scale // PLUGGABLE ALERTS 24 • SINGLE SOURCE FOR MONITORED STATS • Allows users to visualize stats across different parameters • Didn’t want to duplicate the stats collection by alerting system • Need to feed data to the alerting system to generate alerts
  • 25. Chef Patterns at Bloomberg Scale // PLUGGABLE ALERTS 25 • ATTRIBUTE WHERE USERS CAN DEFINE ALERTS default["bcpc"]["hadoop"]["graphite"]["queries"] = { 'hbase_master' => [ { 'type' => "jmx", 'query' => "memory.NonHeapMemoryUsage_committed", 'key' => "hbasenonheapmem", 'trigger_val' => "max(61,0)", 'trigger_cond' => "=0", 'trigger_name' => "HBaseMasterAvailability", 'trigger_dep' => ["NameNodeAvailability"], 'trigger_desc' => "HBase master seems to be down", 'severity' => 1 },{ 'type' => "jmx", 'query' => "memory.HeapMemoryUsage_committed", 'key' => "hbaseheapmem", ... },...], ’namenode' => [...] ...} Query to pull stats from data source Define alert criteria
  • 26. Chef Patterns at Bloomberg Scale // TEMPLATE PITFALLS 26 • LIBRARY FUNCTION CALLS IN WRAPPER COOKBOOKS • Community cookbook provider accepts template as an attribute • Template passed from wrapper makes a library function call • Wrapper recipe includes the module of library function
  • 27. Chef Patterns at Bloomberg Scale // TEMPLATE PITFALLS 27 ... Chef::Resource.send(:include, Bcpc::OSHelper) ... cobbler_profile "bcpc_host" do kickstart "cobbler.bcpc_ubuntu_host.preseed" distro "ubuntu-12.04-mini-x86_64” end ... ... d-i passwd/user-password-crypted password <%="#{get_config(@node, 'cobbler-root-password-salted')}"%> d-i passwd/user-uid string ... • WRAPPER RECIPE • FUNCTION CALL IN TEMPLATE
  • 28. Chef Patterns at Bloomberg Scale // TEMPLATE PITFALLS 28 ... d-i passwd/user-password-crypted password <%="#{Bcpc::OSHelper.get_config(@node, 'cobbler-root-password- salted')}"%> d-i passwd/user-uid string ... • MODIFIED FUNCTION CALL IN TEMPLATE
  • 29. Chef Patterns at Bloomberg Scale // DYNAMIC RESOURCES 29 • ANIT-PATTERN? ruby_block "create namenode directories" do block do node[:bcpc][:storage][:mounts].each do |d| dir = Chef::Resource::Directory.new("#{mount_root}/#{d}/dfs/nn", run_context) dir.owner "hdfs" dir.group "hdfs" dir.mode 0755 dir.recursive true dir.run_action :create exe = Chef::Resource::Execute.new("fixup nn owner", run_context) exe.command "chown -Rf hdfs:hdfs #{mount_root}/#{d}/dfs" exe.only_if { Etc.getpwuid(File.stat("#{mount_root}/#{d}/dfs/").uid).name != "hdfs " } end end
  • 30. Chef Patterns at Bloomberg Scale // DYNAMIC RESOURCES 30 • SYSTEM CONFIGURATION • Lengthy Configuration of a Storage Controller • Setting Attributes at Converge Time • Compile Time Actions? • MUST WRAP IN RUBY_BLOCK’S • Does not Update the Resource Collection • Lazy’s everywhere: • Guards: not_if{lazy{node[…]}.call.map{…}}
  • 31. Chef Patterns at Bloomberg Scale // SERVICE RESTART 31 • WE USE JMXTRANS TO MONITOR JMX STATS • Service to be monitored varies with node • There can be more than one service to be monitored • Monitored service restart requires JMXtrans to be restarted**
  • 32. Chef Patterns at Bloomberg Scale // SERVICE RESTART 32 • DATA STRUCTURE IN ROLES TO DEFINE THE SERVICES "default_attributes" : { "jmxtrans”:{ "servers”:[ { "type": "datanode", "service": "hadoop-hdfs-datanode", "service_cmd": "org.apache.hadoop.hdfs.server.datanode.DataNode" }, { "type": "hbase_rs", "service": "hbase-regionserver", "service_cmd": “org.apache.hadoop.hbase.regionserver.HRegionServer" } ] } ... Dependent Service Name String to uniquely identify the service process
  • 33. Chef Patterns at Bloomberg Scale // SERVICE RESTART 33 • JMXTRANS SERVICE RESTART LOGIC BUILT DYNAMICALLY jmx_services = Array.new jmx_srvc_cmds = Hash.new node['jmxtrans']['servers'].each do |server| jmx_services.push(server['service']) jmx_srvc_cmds[server['service']] = server['service_cmd'] end service "restart jmxtrans on dependent service" do service_name "jmxtrans" supports :restart => true, :status => true, :reload => true action :restart jmx_services.each do |jmx_dep_service| subscribes :restart, "service[#{jmx_dep_service}]", :delayed end only_if {process_require_restart?("jmxtrans","jmxtrans-all.jar”, jmx_srvc_cmds)} end What if a process is re/started externally? Store the dependent service name and process ids in local variables Subscribes from all dependent services
  • 34. Chef Patterns at Bloomberg Scale // SERVICE RESTART 34 def process_require_restart?(process_name, process_cmd, dep_cmds) tgt_proces_pid = `pgrep -f #{process_cmd}` ... tgt_proces_stime = `ps --no-header -o start_time #{tgt_process_pid}` ... ret = false restarted_processes = Array.new dep_cmds.each do |dep_process, dep_cmd| dep_pids = `pgrep -f #{dep_cmd}` if dep_pids != "" dep_pids_arr = dep_pids.split("n") dep_pids_arr.each do |dep_pid| dep_process_stime = `ps --no-header -o start_time #{dep_pid}` if DateTime.parse(tgt_proces_stime) < DateTime.parse(dep_process_stime) restarted_processes.push(dep_process) ret = true end ... Start time of the service process Start time of all the service processes on which it is dependent on Compare the start time
  • 35. Chef Patterns at Bloomberg Scale // ROLLING RESTART 35 • AUTOMATIC CONVERGENCE • AVAILABILITY • High Availability • Toxic Configuration • HOW • Check Masters for Slave Status • Synchronous Communication • Locking
  • 36. Chef Patterns at Bloomberg Scale // ROLLING RESTART 36 • FLAGGING • Negative Flagging – flag when a service is down • Positive Flagging – flag when a service is reconfiguring • Deadlock Avoidance • CONTENTION • Poll & Wait • Fail the Run • Simply Skip Service Restart and Go On • Store the Need for Restart • Breaks Assumptions of Procedural Chef Runs
  • 37. Chef Patterns at Bloomberg Scale // ROLLING RESTART 37 HADOOP_SERVICE "ZOOKEEPER-SERVER" DO DEPENDENCIES ["TEMPLATE[/ETC/ZOOKEEPER/CONF/ZOO.CFG]", "TEMPLATE[/USR/LIB/ZOOKEEPER/BIN/ZKSERVER.SH]", "TEMPLATE[/ETC/DEFAULT/ZOOKEEPER-SERVER]"] PROCESS_IDENTIFIER "ORG.APACHE.ZOOKEEPER ... QUORUMPEERMAIN" END • SERVICE DEFINITION
  • 38. Chef Patterns at Bloomberg Scale // ROLLING RESTART 38 • SYNCH STATE STORE • Zookeeper • SERVICE RESTART (KAFKA) VALIDATION CHECK • Based on Jenkins pattern for wait_until_ready! • Verifies that the service is up to an acceptable level • Passes or stops the Chef run • FUTURE DIRECTIONS • Topology Aware Deployment • Data Aware Deployment
  • 39. Chef Patterns at Bloomberg Scale // WE ARE HIRING JOBS.BLOOMBERG.COM: https://github.com/bloomberg/chef-bach Freenode: #chef-bach • Hadoop Infrastructure Engineer • DevOps Engineer Search Infrastructure