SlideShare a Scribd company logo
1 of 46
Using SaltStack in High Availability
Environments
Who is this guy?
Who is this guy?
My name is Benjamin Cane, I run a blog bencane.com focused on Linux Systems
Administration.
By day I am a Solutions Architect working in the financial services industry. My
focus is solely on building mission critical environments that require 99.99% to
99.999% availability. In other words High and Continuous Availability environments.
This presentation is going to cover a few best practices for using SaltStack in High
Availability environments.
Note: The views, opinions and recommendations in this presentation are entirely my own and do not represent
the views of my employer.
High Availability
What is High Availability
High availability is a system design approach and associated service implementation that ensures a
prearranged level of operational performance will be met during a contractual measurement period. - Source:
Wikipedia
A Highly Available environment is a system that is designed to be available to the end user
the majority of the time.
High Availability In Numbers
High Availability is usually measured
by the downtime a system
experiences in a year.
What constitutes High Availability is
subjective to the business and
systems at hand.
Availability % Downtime Per Year
90% 36.5 Days
99% 3.65 Days
99.9% 8.76 Hours
99.99% 52.56 Minutes
99.999% 5.26 Minutes
99.9999% 31.5 Seconds
99.99999% 3.15 Seconds
What Causes Downtime
Usually Humans
Best Practices
Replace manual processes
Replacing Humans with SaltStack
Since humans are one of the top causes of service unavailability, it only makes sense to
replace them with automated processes.
Building and Provisioning
By using a configuration management tool such as SaltStack you can automate the
installation and configuration of new systems. By automating this task you can ensure that
a system is deployed the same way every time. Ensuring a system is deployed in the
exact same method every time reduces configuration time bombs from impacting
production traffic later.
Automate Everything
The goal should be to automate everything. Not only does this decrease provisioning time,
but rather the more items that are automated the less likely those items are to be
repeatedly misconfigured or forgotten.
Automating Server Configuration
One of the most opportune points for human error is in the server configurations.
SaltStack has great functionality around configuring a server, and it should be used to
automatically deploy server side configurations.
In the next few slides I will show how I created a pillar file that has all of my host specific
information inside. This pillar is then used to deploy a configuration file the same way
every time using templates.
Server Settings Pillar
In this example you will see a pillar labeled systems that sets items such as the SSH Port,
Node Groups, Active Interfaces and the IP information for those interfaces.
systems:
{% if grains['fqdn'] == 'hostname01.example.com' %}
  sshport: 22
  nodegroups:
    - website_apps
  interfaces:
    - eth0
  defaultgw: 10.0.0.1
  ip:
    eth0: 10.0.0.10
  mask:
    eth0: 255.255.255.0
  mtu:
    eth0: 1500
{% elif grains['fqdn'] == 'hostname02.example.com' %}
systems:
{% if grains['fqdn'] == 'hostname01.example.com' %}
  sshport: 22
  nodegroups:
    - website_apps
  interfaces:
    - eth0
  defaultgw: 10.0.0.1
  ip:
    eth0: 10.0.0.10
  mask:
    eth0: 255.255.255.0
  mtu:
    eth0: 1500
{% elif grains['fqdn'] == 'hostname02.example.com' %}
System Settings State File
Below is an example of deploying network interface files using the systems pillar values.
{% for interface in pillar['systems']['interfaces'] %}
/etc/sysconfig/network-scripts/ifcfg-{{ interface }}:
  file.managed:
    - source: salt://network/config/etc/sysconfig/network-scripts/ifcfg-interfaces
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - context:
      interface: {{ interface }}
      ip: {{ pillar['systems']['ip'][interface] }}
      mask: {{ pillar['systems']['mask'][interface] }}
   mtu: {{ pillar['systems']['mtu'][interface] }}
{% endfor %}
{% for interface in pillar['systems']['interfaces'] %}
/etc/sysconfig/network-scripts/ifcfg-{{ interface }}:
  file.managed:
    - source: salt://network/config/etc/sysconfig/network-scripts/ifcfg-interfaces
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - context:
      interface: {{ interface }}
      ip: {{ pillar['systems']['ip'][interface] }}
      mask: {{ pillar['systems']['mask'][interface] }}
   mtu: {{ pillar['systems']['mtu'][interface] }}
{% endfor %}
Benefits of using pillars to define systems configuration
• Reduces number of configuration files that need to be manually edited (only 1 file to
peer review as well)
• You can stage hosts configuration in advance allowing for rapid server provisioning and
re-provisioning
• Configurations are always consistent, no setting the default route in
/etc/sysconfig/network on some servers and /etc/sysconfig/network-scripts/ifcfg-eth0 on
others
• Files are always deployed the same way every time
Automating Application Installation
SaltStack allows you to automate application installation easily. This should be one of the
first items to automate. By automating the installation of applications you can ensure that
the software is installed the same way each time, every time.
Install a Package
Installing a package via a package manager is pretty straight forward.
mysql-server:
pkg:
- installed
mysql-server:
pkg:
- installed
The above configuration is used for package managers such as yum for Red Hat based
distributions or apt-get for Debian based distributions.
3rd
Party Vendor Applications
Some 3rd party software companies don't always make it easy to automate a software's
installation.
You should do it regardless of the difficulty. You may need to create a wrapper script, tell
SaltStack to run the 3rd party software vendors installation scripts, or become very familiar
with expect. But all of this work up front will save countless hours over the years of
installing and re-installing software.
Installing Software with a Script
SaltStack can be used to run any script, including scripts that are packages with software.
/some/path/custom-installer.sh:
  cmd.run:
    - unless: test -f /some/path/bin/start.sh
- order: last
- stateful: True
- require:
- pkg: jre
- user: someguy
/some/path/custom-installer.sh:
  cmd.run:
    - unless: test -f /some/path/bin/start.sh
- order: last
- stateful: True
- require:
- pkg: jre
- user: someguy
Make all of your scripts stateful
Saltstack can understand if the script was successful or not. To do this add the following to
your .sls file.
- stateful: True- stateful: True
Then add the following to the bottom of your scripts output.
echo  # an empty line here so the next line will be the last.
echo "changed=yes comment='Job Accomplished'"
echo  # an empty line here so the next line will be the last.
echo "changed=yes comment='Job Accomplished'"
echo  # an empty line here so the next line will be the last.
echo "changed=no comment=’Oh Noes'"
echo  # an empty line here so the next line will be the last.
echo "changed=no comment=’Oh Noes'"
Bad Results:
Good Results:
Installing tar packaged applications
You can also use the archive module to extract software that is packaged and deployed
via tar files.
appinstaller:
  module.run:
    - name: archive.tar
    - options: --owner username --group groupname xzf
    - tarfile: /path/to/file/on/server/somefile.tar.gz
    - cwd: /software/dir/
    - require:
      - user: username
    - unless: test -f /software/dir/bin
appinstaller:
  module.run:
    - name: archive.tar
    - options: --owner username --group groupname xzf
    - tarfile: /path/to/file/on/server/somefile.tar.gz
    - cwd: /software/dir/
    - require:
      - user: username
    - unless: test -f /software/dir/bin
Configuring Applications
Why stop at just automating the installation of the software? Why not automate the
configuration of it as well?
Using Templates
SaltStack allows you to utilize templates to deploy consistent configuration files. With a
combination of pillars and templates you can deploy custom configuration files easily.
/etc/mysql/my.cnf:
  file.managed:
    - source: salt://mysql/config/etc/mysql/my.cnf
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - context:
      listenip: {{ salt['network.interfaces']()['eth0']['inet'][0]['address'] }}
/etc/mysql/my.cnf:
  file.managed:
    - source: salt://mysql/config/etc/mysql/my.cnf
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - context:
      listenip: {{ salt['network.interfaces']()['eth0']['inet'][0]['address'] }}
Running Custom Commands
Some applications require a command to be run after installation. Just like installing
software you can configure the software with cmd.run as well.
emcpreg:
  cmd.run:
    - name: /sbin/emcpreg -add SOME-EMC-LICENSE-STRING
    - onlyif: /sbin/emcpreg -list 2>&1 | grep -q "No such file"
    - require:
      - pkg: EMCpower.LINUX
emcpreg:
  cmd.run:
    - name: /sbin/emcpreg -add SOME-EMC-LICENSE-STRING
    - onlyif: /sbin/emcpreg -list 2>&1 | grep -q "No such file"
    - require:
      - pkg: EMCpower.LINUX
Change execution
The execution of changes is another human driven process that is prone to simply
mistakes; mistakes that can affect availability.
If you want to mitigate human errors during changes, it requires that all changes to testing
and production environments be 100% deployed via configuration management tools.
By using a configuration management tool you can avoid root causes such
as:
•/etc/hosts file was deployed with incorrect permissions
•Required configuration file was not deployed with updated application
Automated state runs
With SaltStack you can have each server pull the desired states and update automatically
by putting the following into a cronjob on each minion.
# call a high-state every 5 minutes
*/5 0 0 0 0 salt-call state.highstate
# call a high-state every 5 minutes
*/5 0 0 0 0 salt-call state.highstate
This is great when you are running hundreds or thousands of hosts that all perform the
same jobs and can take over for others. Or for systems that can be restarted quickly
without human interaction or service disruption (i.e. Apache, NGINX).
As of 0.12 SaltStack now has a scheduler function that allows you to define a state run on
a defined schedule on either the master or minions.
Protip: You should stagger the schedules (cron or salt scheduler) to ensure that every
server doesn’t restart services at the same time.
Automatic state runs is not appropriate for every
situation
While having every system run a high state every 2 minutes sounds great; it is not the best
answer in every case. Knowing when to automate everything and when to keep some
things semi-automated is key to building highly available systems.
If the systems you are managing are extremely sensitive to changes and application
restarts. It is best to establish a policy where the high state is run manually at a scheduled
time of day or week that aligns with your change management procedures.
Use test=True
You can have SaltStack perform a dry-run state change by appending test=True on the
end of the state run command.
salt '*' state.highstate test=Truesalt '*' state.highstate test=True
By using test=True you can see what is being changed and test your salt state and pillar
configurations before executing. This is also a great way of auditing what on your systems
needs to be changed to match your salt configuration.
Use test=True by default in production
In the minion configuration file you can set the default run to always use the test feature.
# You can specify that all modules should run in test mode:
test: True
# You can specify that all modules should run in test mode:
test: True
This should be used on systems that are “semi-automated” and are incredibly sensitive to
changes.
If you want to run a highstate on these systems you will need to run a state run with
test=False.
# salt '*' state.highstate test=False# salt '*' state.highstate test=False
Keep things well organized
Using more than the base environment
In large enterprise environments you will find various applications, some applications will
only have a hand full of servers, others have thousands. Keeping track of what gets
installed or configured where in these types of environments becomes unreasonable with
basic hostname matching. This is especially true if the enterprise hostname convention
does not allow for easy identification of server roles.
Using additional environments
SaltStack lets you define environments for both states and pillars. This allows you to
segregate configurations for each application environment.
Similar but different configuration files
In the example below I show how you can use additional environments to have the same
state file defined to deploy a unique hosts file to two different application environments.
salt/states/base
salt/states/app1-dev/hosts/hosts.file
salt/states/app2-dev/hosts/hosts.file
salt/states/base
salt/states/app1-dev/hosts/hosts.file
salt/states/app2-dev/hosts/hosts.file
base:
'*'
- users.operations
- screen
app1-dev:
'app1*'
- hosts
app2-dev:
'app2*'
- hosts
base:
'*'
- users.operations
- screen
app1-dev:
'app1*'
- hosts
app2-dev:
'app2*'
- hosts
Defining a new environment
To define and create new environments simply edit the /etc/salt/master configuration file.
file_roots:
  base:
 - /salt/states/base
file_roots:
  base:
 - /salt/states/base
Find:
  newenv:
 - /salt/states/newenv
  newenv:
 - /salt/states/newenv
Append:
Using node groups
In addition to custom environments you can also define node groups within SaltStack.
Node groups are a grouping of minions that can be grouped by several parameters. When
used with additional environments this allows you to perform salt runs on well defined
groups of minions.
Using node groups in the top.sls file
Node groups allows you to define states based on a classification rather than a hostname.
app1-dev:
  'app1-webservers':
    - match: nodegroup
    - nginx
- php
- wordpress
app2-dev:
‘app2-webservers’:
- match: nodegroup
- nginx
- uwsgi
- django
app1-dev:
  'app1-webservers':
    - match: nodegroup
    - nginx
- php
- wordpress
app2-dev:
‘app2-webservers’:
- match: nodegroup
- nginx
- uwsgi
- django
Using node groups for salt runs
You can use node groups to coordinate which servers should perform a highstate or other
tasks such as cmd.run
# salt -N app1_webservers state.highstate# salt -N app1_webservers state.highstate
# salt -N app1_webservers cmd.run “service nginx restart”# salt -N app1_webservers cmd.run “service nginx restart”
High State:
Command Run:
Defining node groups
Node Groups are defined in the /etc/salt/master configuration file. This example uses
several compound matchers that can be used to define node groups.
nodegroups:
  app1_webservers: 'L@host001.example.com,host010.example.com or host308.example.com'
  app1_appservers: 'G@nodegroup:app1_appservers'
  app1_dbservers: 'P@nodegroup:app1_dbservers'
app1_servers: 'S@192.168.1.0/24'
nodegroups:
  app1_webservers: 'L@host001.example.com,host010.example.com or host308.example.com'
  app1_appservers: 'G@nodegroup:app1_appservers'
  app1_dbservers: 'P@nodegroup:app1_dbservers'
app1_servers: 'S@192.168.1.0/24'
Architectural Considerations
Architectural Considerations
While using SaltStack appropriately can greatly increase your consistency and automation
which brings with it higher availability. This only works while SaltStack is up and running.
Spread the load
In large environments it is advisable to setup a dedicated salt master server for different
environment types.
For example if you have a development, test and 2 production sites it would be advisable
to have at least 1 salt master for each environment. Using 2 salt masters for the 2
production sites would allow you to setup a master server for each site giving you
independence during data center outages..
Setup multiple master servers
As of version 0.16 SaltStack minions have the ability to synchronize with multiple masters.
This allows you to survive a failure of a single SaltStack master server.
master:
  - saltmaster01.example.com
  - saltmaster02.example.com
master:
  - saltmaster01.example.com
  - saltmaster02.example.com
All master servers must have the same:
•/etc/salt/pki/master/master.pem
•file_roots
•pillar_roots
Some other stuff
Pro tips
• Don't become so dependent on SaltStack that you can't perform remediation tasks
without it.
• Keep your implementation as simple to support as possible.
• Keep your implementation well organized to ensure configurations only go where they
are meant to go.
• Use test=True like your life depends on it, because it might...
• Use source control!
• If you are going to use SaltStack, use it! Automate or Semi Automate everything.
• Keep an eye on new features, SaltStack is evolving fast.
• Check out the modules there is some cool stuff in there.
EOF
Presented by: Benjamin Cane – bencane.com
Twitter: @madflojo

More Related Content

What's hot

SaltConf14 - Saurabh Surana, HP Cloud - Automating operations and support wit...
SaltConf14 - Saurabh Surana, HP Cloud - Automating operations and support wit...SaltConf14 - Saurabh Surana, HP Cloud - Automating operations and support wit...
SaltConf14 - Saurabh Surana, HP Cloud - Automating operations and support wit...SaltStack
 
Salty OPS – Saltstack Introduction
Salty OPS – Saltstack IntroductionSalty OPS – Saltstack Introduction
Salty OPS – Saltstack IntroductionWalter Liu
 
OpenNebula and SaltStack - OpenNebulaConf 2013
OpenNebula and SaltStack - OpenNebulaConf 2013OpenNebula and SaltStack - OpenNebulaConf 2013
OpenNebula and SaltStack - OpenNebulaConf 2013databus.pro
 
Automating the Network
Automating the NetworkAutomating the Network
Automating the NetworkPuppet
 
SaltConf14 - Matthew Williams, Flowroute - Salt Virt for Linux contatiners an...
SaltConf14 - Matthew Williams, Flowroute - Salt Virt for Linux contatiners an...SaltConf14 - Matthew Williams, Flowroute - Salt Virt for Linux contatiners an...
SaltConf14 - Matthew Williams, Flowroute - Salt Virt for Linux contatiners an...SaltStack
 
Puppet in the Pipeline
Puppet in the PipelinePuppet in the Pipeline
Puppet in the PipelinePuppet
 
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014Puppet Availability and Performance at 100K Nodes - PuppetConf 2014
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014Puppet
 
[TechTalks] Learning Configuration Management with SaltStack (Advanced Concepts)
[TechTalks] Learning Configuration Management with SaltStack (Advanced Concepts)[TechTalks] Learning Configuration Management with SaltStack (Advanced Concepts)
[TechTalks] Learning Configuration Management with SaltStack (Advanced Concepts)Blazeclan Technologies Private Limited
 
Control your deployments with Capistrano
Control your deployments with CapistranoControl your deployments with Capistrano
Control your deployments with CapistranoRamazan K
 
Deployment with capistrano
Deployment with capistranoDeployment with capistrano
Deployment with capistranosagar junnarkar
 
Puppet Camp London Fall 2015 - Service Discovery and Puppet
Puppet Camp London Fall 2015 - Service Discovery and PuppetPuppet Camp London Fall 2015 - Service Discovery and Puppet
Puppet Camp London Fall 2015 - Service Discovery and PuppetMarc Cluet
 
SaltConf 2015: Salt stack at web scale: Better, Stronger, Faster
SaltConf 2015: Salt stack at web scale: Better, Stronger, FasterSaltConf 2015: Salt stack at web scale: Better, Stronger, Faster
SaltConf 2015: Salt stack at web scale: Better, Stronger, FasterThomas Jackson
 
Steve Singer - Managing PostgreSQL with Puppet @ Postgres Open
Steve Singer - Managing PostgreSQL with Puppet @ Postgres OpenSteve Singer - Managing PostgreSQL with Puppet @ Postgres Open
Steve Singer - Managing PostgreSQL with Puppet @ Postgres OpenPostgresOpen
 
Refactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
Refactoring Katello Installer modules - Ewoud Kohl van WijngaardenRefactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
Refactoring Katello Installer modules - Ewoud Kohl van WijngaardenNETWAYS
 
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu ServerForget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Serveraaroncouch
 
NLIT 2011: Chef & Capistrano
NLIT 2011: Chef & CapistranoNLIT 2011: Chef & Capistrano
NLIT 2011: Chef & Capistranonickblah
 
How to install and configure LEMP stack
How to install and configure LEMP stackHow to install and configure LEMP stack
How to install and configure LEMP stackRootGate
 
FITC - Node.js 101
FITC - Node.js 101FITC - Node.js 101
FITC - Node.js 101Rami Sayar
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a ManifestPuppet
 

What's hot (20)

SaltConf14 - Saurabh Surana, HP Cloud - Automating operations and support wit...
SaltConf14 - Saurabh Surana, HP Cloud - Automating operations and support wit...SaltConf14 - Saurabh Surana, HP Cloud - Automating operations and support wit...
SaltConf14 - Saurabh Surana, HP Cloud - Automating operations and support wit...
 
Salty OPS – Saltstack Introduction
Salty OPS – Saltstack IntroductionSalty OPS – Saltstack Introduction
Salty OPS – Saltstack Introduction
 
OpenNebula and SaltStack - OpenNebulaConf 2013
OpenNebula and SaltStack - OpenNebulaConf 2013OpenNebula and SaltStack - OpenNebulaConf 2013
OpenNebula and SaltStack - OpenNebulaConf 2013
 
Automating the Network
Automating the NetworkAutomating the Network
Automating the Network
 
SaltConf14 - Matthew Williams, Flowroute - Salt Virt for Linux contatiners an...
SaltConf14 - Matthew Williams, Flowroute - Salt Virt for Linux contatiners an...SaltConf14 - Matthew Williams, Flowroute - Salt Virt for Linux contatiners an...
SaltConf14 - Matthew Williams, Flowroute - Salt Virt for Linux contatiners an...
 
Puppet in the Pipeline
Puppet in the PipelinePuppet in the Pipeline
Puppet in the Pipeline
 
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014Puppet Availability and Performance at 100K Nodes - PuppetConf 2014
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014
 
[TechTalks] Learning Configuration Management with SaltStack (Advanced Concepts)
[TechTalks] Learning Configuration Management with SaltStack (Advanced Concepts)[TechTalks] Learning Configuration Management with SaltStack (Advanced Concepts)
[TechTalks] Learning Configuration Management with SaltStack (Advanced Concepts)
 
Control your deployments with Capistrano
Control your deployments with CapistranoControl your deployments with Capistrano
Control your deployments with Capistrano
 
Deployment with capistrano
Deployment with capistranoDeployment with capistrano
Deployment with capistrano
 
Puppet Camp London Fall 2015 - Service Discovery and Puppet
Puppet Camp London Fall 2015 - Service Discovery and PuppetPuppet Camp London Fall 2015 - Service Discovery and Puppet
Puppet Camp London Fall 2015 - Service Discovery and Puppet
 
SaltConf 2015: Salt stack at web scale: Better, Stronger, Faster
SaltConf 2015: Salt stack at web scale: Better, Stronger, FasterSaltConf 2015: Salt stack at web scale: Better, Stronger, Faster
SaltConf 2015: Salt stack at web scale: Better, Stronger, Faster
 
Steve Singer - Managing PostgreSQL with Puppet @ Postgres Open
Steve Singer - Managing PostgreSQL with Puppet @ Postgres OpenSteve Singer - Managing PostgreSQL with Puppet @ Postgres Open
Steve Singer - Managing PostgreSQL with Puppet @ Postgres Open
 
Capistrano 3 Deployment
Capistrano 3 DeploymentCapistrano 3 Deployment
Capistrano 3 Deployment
 
Refactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
Refactoring Katello Installer modules - Ewoud Kohl van WijngaardenRefactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
Refactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
 
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu ServerForget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
 
NLIT 2011: Chef & Capistrano
NLIT 2011: Chef & CapistranoNLIT 2011: Chef & Capistrano
NLIT 2011: Chef & Capistrano
 
How to install and configure LEMP stack
How to install and configure LEMP stackHow to install and configure LEMP stack
How to install and configure LEMP stack
 
FITC - Node.js 101
FITC - Node.js 101FITC - Node.js 101
FITC - Node.js 101
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a Manifest
 

Viewers also liked

Demystifying CSS & WordPress
Demystifying CSS & WordPressDemystifying CSS & WordPress
Demystifying CSS & WordPressJustin Carmony
 
Configuration Management - Finding the tool to fit your needs
Configuration Management - Finding the tool to fit your needsConfiguration Management - Finding the tool to fit your needs
Configuration Management - Finding the tool to fit your needsSaltStack
 
Shaking up the World of Education - Oplerno presentation for Sanoma
Shaking up the World of Education - Oplerno presentation for SanomaShaking up the World of Education - Oplerno presentation for Sanoma
Shaking up the World of Education - Oplerno presentation for SanomaDaniël Crompton
 
A user's perspective on SaltStack and other configuration management tools
A user's perspective on SaltStack and other configuration management toolsA user's perspective on SaltStack and other configuration management tools
A user's perspective on SaltStack and other configuration management toolsSaltStack
 
CAPS: What's best for deploying and managing OpenStack? Chef vs. Ansible vs. ...
CAPS: What's best for deploying and managing OpenStack? Chef vs. Ansible vs. ...CAPS: What's best for deploying and managing OpenStack? Chef vs. Ansible vs. ...
CAPS: What's best for deploying and managing OpenStack? Chef vs. Ansible vs. ...Animesh Singh
 
基于Fuel的超融合一体机
基于Fuel的超融合一体机基于Fuel的超融合一体机
基于Fuel的超融合一体机EdwardBadBoy
 
Integration testing for salt states using aws ec2 container service
Integration testing for salt states using aws ec2 container serviceIntegration testing for salt states using aws ec2 container service
Integration testing for salt states using aws ec2 container serviceSaltStack
 
基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台liuts
 
高效Linux SA
高效Linux SA高效Linux SA
高效Linux SAJinrong Ye
 
Red hat enterprise linux 7 (rhel 7)
Red hat enterprise linux 7 (rhel 7)Red hat enterprise linux 7 (rhel 7)
Red hat enterprise linux 7 (rhel 7)Ramola Dhande
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化Jinrong Ye
 
RedHat Linux
RedHat LinuxRedHat Linux
RedHat LinuxApo
 
Suse manager 介绍
Suse manager 介绍Suse manager 介绍
Suse manager 介绍james chen
 

Viewers also liked (13)

Demystifying CSS & WordPress
Demystifying CSS & WordPressDemystifying CSS & WordPress
Demystifying CSS & WordPress
 
Configuration Management - Finding the tool to fit your needs
Configuration Management - Finding the tool to fit your needsConfiguration Management - Finding the tool to fit your needs
Configuration Management - Finding the tool to fit your needs
 
Shaking up the World of Education - Oplerno presentation for Sanoma
Shaking up the World of Education - Oplerno presentation for SanomaShaking up the World of Education - Oplerno presentation for Sanoma
Shaking up the World of Education - Oplerno presentation for Sanoma
 
A user's perspective on SaltStack and other configuration management tools
A user's perspective on SaltStack and other configuration management toolsA user's perspective on SaltStack and other configuration management tools
A user's perspective on SaltStack and other configuration management tools
 
CAPS: What's best for deploying and managing OpenStack? Chef vs. Ansible vs. ...
CAPS: What's best for deploying and managing OpenStack? Chef vs. Ansible vs. ...CAPS: What's best for deploying and managing OpenStack? Chef vs. Ansible vs. ...
CAPS: What's best for deploying and managing OpenStack? Chef vs. Ansible vs. ...
 
基于Fuel的超融合一体机
基于Fuel的超融合一体机基于Fuel的超融合一体机
基于Fuel的超融合一体机
 
Integration testing for salt states using aws ec2 container service
Integration testing for salt states using aws ec2 container serviceIntegration testing for salt states using aws ec2 container service
Integration testing for salt states using aws ec2 container service
 
基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台
 
高效Linux SA
高效Linux SA高效Linux SA
高效Linux SA
 
Red hat enterprise linux 7 (rhel 7)
Red hat enterprise linux 7 (rhel 7)Red hat enterprise linux 7 (rhel 7)
Red hat enterprise linux 7 (rhel 7)
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化
 
RedHat Linux
RedHat LinuxRedHat Linux
RedHat Linux
 
Suse manager 介绍
Suse manager 介绍Suse manager 介绍
Suse manager 介绍
 

Similar to SaltConf14 - Ben Cane - Using SaltStack in High Availability Environments

Ansible automation tool with modules
Ansible automation tool with modulesAnsible automation tool with modules
Ansible automation tool with modulesmohamedmoharam
 
Linux Desktop Automation
Linux Desktop AutomationLinux Desktop Automation
Linux Desktop AutomationRui Lapa
 
Practical solutions for connections administrators
Practical solutions for connections administratorsPractical solutions for connections administrators
Practical solutions for connections administratorsSharon James
 
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...Amazon Web Services
 
Profiling PHP with Xdebug / Webgrind
Profiling PHP with Xdebug / WebgrindProfiling PHP with Xdebug / Webgrind
Profiling PHP with Xdebug / WebgrindSam Keen
 
PuppetDB: Sneaking Clojure into Operations
PuppetDB: Sneaking Clojure into OperationsPuppetDB: Sneaking Clojure into Operations
PuppetDB: Sneaking Clojure into Operationsgrim_radical
 
Hands On Introduction To Ansible Configuration Management With Ansible Comple...
Hands On Introduction To Ansible Configuration Management With Ansible Comple...Hands On Introduction To Ansible Configuration Management With Ansible Comple...
Hands On Introduction To Ansible Configuration Management With Ansible Comple...SlideTeam
 
Ansible & Salt - Vincent Boon
Ansible & Salt - Vincent BoonAnsible & Salt - Vincent Boon
Ansible & Salt - Vincent BoonMyNOG
 
Sa106 – practical solutions for connections administrators
Sa106 – practical solutions for connections administratorsSa106 – practical solutions for connections administrators
Sa106 – practical solutions for connections administratorsSharon James
 
Building a Gateway Server
Building a Gateway ServerBuilding a Gateway Server
Building a Gateway ServerDashamir Hoxha
 
CMake Tutorial
CMake TutorialCMake Tutorial
CMake TutorialFu Haiping
 
Bare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and ChefBare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and ChefMatt Ray
 
Cloud patterns applied
Cloud patterns appliedCloud patterns applied
Cloud patterns appliedLars Fronius
 
Python Deployment with Fabric
Python Deployment with FabricPython Deployment with Fabric
Python Deployment with Fabricandymccurdy
 
Dru lavigne servers-tutorial
Dru lavigne servers-tutorialDru lavigne servers-tutorial
Dru lavigne servers-tutorialDru Lavigne
 
Cloud Meetup - Automation in the Cloud
Cloud Meetup - Automation in the CloudCloud Meetup - Automation in the Cloud
Cloud Meetup - Automation in the Cloudpetriojala123
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierCarlos Sanchez
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalabilityWim Godden
 

Similar to SaltConf14 - Ben Cane - Using SaltStack in High Availability Environments (20)

Ansible automation tool with modules
Ansible automation tool with modulesAnsible automation tool with modules
Ansible automation tool with modules
 
Linux Desktop Automation
Linux Desktop AutomationLinux Desktop Automation
Linux Desktop Automation
 
Practical solutions for connections administrators
Practical solutions for connections administratorsPractical solutions for connections administrators
Practical solutions for connections administrators
 
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
 
Profiling PHP with Xdebug / Webgrind
Profiling PHP with Xdebug / WebgrindProfiling PHP with Xdebug / Webgrind
Profiling PHP with Xdebug / Webgrind
 
Mysql ppt
Mysql pptMysql ppt
Mysql ppt
 
zLAMP
zLAMPzLAMP
zLAMP
 
PuppetDB: Sneaking Clojure into Operations
PuppetDB: Sneaking Clojure into OperationsPuppetDB: Sneaking Clojure into Operations
PuppetDB: Sneaking Clojure into Operations
 
Hands On Introduction To Ansible Configuration Management With Ansible Comple...
Hands On Introduction To Ansible Configuration Management With Ansible Comple...Hands On Introduction To Ansible Configuration Management With Ansible Comple...
Hands On Introduction To Ansible Configuration Management With Ansible Comple...
 
Ansible & Salt - Vincent Boon
Ansible & Salt - Vincent BoonAnsible & Salt - Vincent Boon
Ansible & Salt - Vincent Boon
 
Sa106 – practical solutions for connections administrators
Sa106 – practical solutions for connections administratorsSa106 – practical solutions for connections administrators
Sa106 – practical solutions for connections administrators
 
Building a Gateway Server
Building a Gateway ServerBuilding a Gateway Server
Building a Gateway Server
 
CMake Tutorial
CMake TutorialCMake Tutorial
CMake Tutorial
 
Bare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and ChefBare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and Chef
 
Cloud patterns applied
Cloud patterns appliedCloud patterns applied
Cloud patterns applied
 
Python Deployment with Fabric
Python Deployment with FabricPython Deployment with Fabric
Python Deployment with Fabric
 
Dru lavigne servers-tutorial
Dru lavigne servers-tutorialDru lavigne servers-tutorial
Dru lavigne servers-tutorial
 
Cloud Meetup - Automation in the Cloud
Cloud Meetup - Automation in the CloudCloud Meetup - Automation in the Cloud
Cloud Meetup - Automation in the Cloud
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 

More from SaltStack

SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web ScaleSaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web ScaleSaltStack
 
Salt Air 19 - Intro to SaltStack RAET (reliable asyncronous event transport)
Salt Air 19 - Intro to SaltStack RAET (reliable asyncronous event transport)Salt Air 19 - Intro to SaltStack RAET (reliable asyncronous event transport)
Salt Air 19 - Intro to SaltStack RAET (reliable asyncronous event transport)SaltStack
 
SaltConf14 - Yazz Atlas, HP Cloud - Installing OpenStack using SaltStack
SaltConf14 - Yazz Atlas, HP Cloud - Installing OpenStack using SaltStackSaltConf14 - Yazz Atlas, HP Cloud - Installing OpenStack using SaltStack
SaltConf14 - Yazz Atlas, HP Cloud - Installing OpenStack using SaltStackSaltStack
 
SaltConf14 - Anita Kuno, HP & OpenStack - Using SaltStack for event-driven or...
SaltConf14 - Anita Kuno, HP & OpenStack - Using SaltStack for event-driven or...SaltConf14 - Anita Kuno, HP & OpenStack - Using SaltStack for event-driven or...
SaltConf14 - Anita Kuno, HP & OpenStack - Using SaltStack for event-driven or...SaltStack
 
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and StatesSaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and StatesSaltStack
 
SaltConf14 - Brendan Burns, Google - Management at Google Scale
SaltConf14 - Brendan Burns, Google - Management at Google ScaleSaltConf14 - Brendan Burns, Google - Management at Google Scale
SaltConf14 - Brendan Burns, Google - Management at Google ScaleSaltStack
 
SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOpsSaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOpsSaltStack
 
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power Tools
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power ToolsSaltConf14 - Thomas Jackson, LinkedIn - Safety with Power Tools
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power ToolsSaltStack
 
SaltConf14 - Eric johnson, Google - Orchestrating Google Compute Engine with ...
SaltConf14 - Eric johnson, Google - Orchestrating Google Compute Engine with ...SaltConf14 - Eric johnson, Google - Orchestrating Google Compute Engine with ...
SaltConf14 - Eric johnson, Google - Orchestrating Google Compute Engine with ...SaltStack
 
SaltStack - An open source software story
SaltStack - An open source software storySaltStack - An open source software story
SaltStack - An open source software storySaltStack
 
Real-time Cloud Management with SaltStack
Real-time Cloud Management with SaltStackReal-time Cloud Management with SaltStack
Real-time Cloud Management with SaltStackSaltStack
 
Adding to your Python Armory - OpenWest 2013
Adding to your Python Armory - OpenWest 2013Adding to your Python Armory - OpenWest 2013
Adding to your Python Armory - OpenWest 2013SaltStack
 
Real-time Infrastructure Management with SaltStack - OpenWest 2013
Real-time Infrastructure Management with SaltStack - OpenWest 2013Real-time Infrastructure Management with SaltStack - OpenWest 2013
Real-time Infrastructure Management with SaltStack - OpenWest 2013SaltStack
 
Writing SaltStack Modules - OpenWest 2013
Writing SaltStack Modules - OpenWest 2013Writing SaltStack Modules - OpenWest 2013
Writing SaltStack Modules - OpenWest 2013SaltStack
 

More from SaltStack (14)

SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web ScaleSaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
 
Salt Air 19 - Intro to SaltStack RAET (reliable asyncronous event transport)
Salt Air 19 - Intro to SaltStack RAET (reliable asyncronous event transport)Salt Air 19 - Intro to SaltStack RAET (reliable asyncronous event transport)
Salt Air 19 - Intro to SaltStack RAET (reliable asyncronous event transport)
 
SaltConf14 - Yazz Atlas, HP Cloud - Installing OpenStack using SaltStack
SaltConf14 - Yazz Atlas, HP Cloud - Installing OpenStack using SaltStackSaltConf14 - Yazz Atlas, HP Cloud - Installing OpenStack using SaltStack
SaltConf14 - Yazz Atlas, HP Cloud - Installing OpenStack using SaltStack
 
SaltConf14 - Anita Kuno, HP & OpenStack - Using SaltStack for event-driven or...
SaltConf14 - Anita Kuno, HP & OpenStack - Using SaltStack for event-driven or...SaltConf14 - Anita Kuno, HP & OpenStack - Using SaltStack for event-driven or...
SaltConf14 - Anita Kuno, HP & OpenStack - Using SaltStack for event-driven or...
 
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and StatesSaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
 
SaltConf14 - Brendan Burns, Google - Management at Google Scale
SaltConf14 - Brendan Burns, Google - Management at Google ScaleSaltConf14 - Brendan Burns, Google - Management at Google Scale
SaltConf14 - Brendan Burns, Google - Management at Google Scale
 
SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOpsSaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
 
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power Tools
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power ToolsSaltConf14 - Thomas Jackson, LinkedIn - Safety with Power Tools
SaltConf14 - Thomas Jackson, LinkedIn - Safety with Power Tools
 
SaltConf14 - Eric johnson, Google - Orchestrating Google Compute Engine with ...
SaltConf14 - Eric johnson, Google - Orchestrating Google Compute Engine with ...SaltConf14 - Eric johnson, Google - Orchestrating Google Compute Engine with ...
SaltConf14 - Eric johnson, Google - Orchestrating Google Compute Engine with ...
 
SaltStack - An open source software story
SaltStack - An open source software storySaltStack - An open source software story
SaltStack - An open source software story
 
Real-time Cloud Management with SaltStack
Real-time Cloud Management with SaltStackReal-time Cloud Management with SaltStack
Real-time Cloud Management with SaltStack
 
Adding to your Python Armory - OpenWest 2013
Adding to your Python Armory - OpenWest 2013Adding to your Python Armory - OpenWest 2013
Adding to your Python Armory - OpenWest 2013
 
Real-time Infrastructure Management with SaltStack - OpenWest 2013
Real-time Infrastructure Management with SaltStack - OpenWest 2013Real-time Infrastructure Management with SaltStack - OpenWest 2013
Real-time Infrastructure Management with SaltStack - OpenWest 2013
 
Writing SaltStack Modules - OpenWest 2013
Writing SaltStack Modules - OpenWest 2013Writing SaltStack Modules - OpenWest 2013
Writing SaltStack Modules - OpenWest 2013
 

Recently uploaded

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 

Recently uploaded (20)

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 

SaltConf14 - Ben Cane - Using SaltStack in High Availability Environments

  • 1. Using SaltStack in High Availability Environments
  • 2. Who is this guy?
  • 3. Who is this guy? My name is Benjamin Cane, I run a blog bencane.com focused on Linux Systems Administration. By day I am a Solutions Architect working in the financial services industry. My focus is solely on building mission critical environments that require 99.99% to 99.999% availability. In other words High and Continuous Availability environments. This presentation is going to cover a few best practices for using SaltStack in High Availability environments. Note: The views, opinions and recommendations in this presentation are entirely my own and do not represent the views of my employer.
  • 5. What is High Availability High availability is a system design approach and associated service implementation that ensures a prearranged level of operational performance will be met during a contractual measurement period. - Source: Wikipedia A Highly Available environment is a system that is designed to be available to the end user the majority of the time.
  • 6. High Availability In Numbers High Availability is usually measured by the downtime a system experiences in a year. What constitutes High Availability is subjective to the business and systems at hand. Availability % Downtime Per Year 90% 36.5 Days 99% 3.65 Days 99.9% 8.76 Hours 99.99% 52.56 Minutes 99.999% 5.26 Minutes 99.9999% 31.5 Seconds 99.99999% 3.15 Seconds
  • 10. Replacing Humans with SaltStack Since humans are one of the top causes of service unavailability, it only makes sense to replace them with automated processes.
  • 11. Building and Provisioning By using a configuration management tool such as SaltStack you can automate the installation and configuration of new systems. By automating this task you can ensure that a system is deployed the same way every time. Ensuring a system is deployed in the exact same method every time reduces configuration time bombs from impacting production traffic later.
  • 12. Automate Everything The goal should be to automate everything. Not only does this decrease provisioning time, but rather the more items that are automated the less likely those items are to be repeatedly misconfigured or forgotten.
  • 13. Automating Server Configuration One of the most opportune points for human error is in the server configurations. SaltStack has great functionality around configuring a server, and it should be used to automatically deploy server side configurations. In the next few slides I will show how I created a pillar file that has all of my host specific information inside. This pillar is then used to deploy a configuration file the same way every time using templates.
  • 14. Server Settings Pillar In this example you will see a pillar labeled systems that sets items such as the SSH Port, Node Groups, Active Interfaces and the IP information for those interfaces. systems: {% if grains['fqdn'] == 'hostname01.example.com' %}   sshport: 22   nodegroups:     - website_apps   interfaces:     - eth0   defaultgw: 10.0.0.1   ip:     eth0: 10.0.0.10   mask:     eth0: 255.255.255.0   mtu:     eth0: 1500 {% elif grains['fqdn'] == 'hostname02.example.com' %} systems: {% if grains['fqdn'] == 'hostname01.example.com' %}   sshport: 22   nodegroups:     - website_apps   interfaces:     - eth0   defaultgw: 10.0.0.1   ip:     eth0: 10.0.0.10   mask:     eth0: 255.255.255.0   mtu:     eth0: 1500 {% elif grains['fqdn'] == 'hostname02.example.com' %}
  • 15. System Settings State File Below is an example of deploying network interface files using the systems pillar values. {% for interface in pillar['systems']['interfaces'] %} /etc/sysconfig/network-scripts/ifcfg-{{ interface }}:   file.managed:     - source: salt://network/config/etc/sysconfig/network-scripts/ifcfg-interfaces     - user: root     - group: root     - mode: 644     - template: jinja     - context:       interface: {{ interface }}       ip: {{ pillar['systems']['ip'][interface] }}       mask: {{ pillar['systems']['mask'][interface] }}    mtu: {{ pillar['systems']['mtu'][interface] }} {% endfor %} {% for interface in pillar['systems']['interfaces'] %} /etc/sysconfig/network-scripts/ifcfg-{{ interface }}:   file.managed:     - source: salt://network/config/etc/sysconfig/network-scripts/ifcfg-interfaces     - user: root     - group: root     - mode: 644     - template: jinja     - context:       interface: {{ interface }}       ip: {{ pillar['systems']['ip'][interface] }}       mask: {{ pillar['systems']['mask'][interface] }}    mtu: {{ pillar['systems']['mtu'][interface] }} {% endfor %}
  • 16. Benefits of using pillars to define systems configuration • Reduces number of configuration files that need to be manually edited (only 1 file to peer review as well) • You can stage hosts configuration in advance allowing for rapid server provisioning and re-provisioning • Configurations are always consistent, no setting the default route in /etc/sysconfig/network on some servers and /etc/sysconfig/network-scripts/ifcfg-eth0 on others • Files are always deployed the same way every time
  • 17. Automating Application Installation SaltStack allows you to automate application installation easily. This should be one of the first items to automate. By automating the installation of applications you can ensure that the software is installed the same way each time, every time.
  • 18. Install a Package Installing a package via a package manager is pretty straight forward. mysql-server: pkg: - installed mysql-server: pkg: - installed The above configuration is used for package managers such as yum for Red Hat based distributions or apt-get for Debian based distributions.
  • 19. 3rd Party Vendor Applications Some 3rd party software companies don't always make it easy to automate a software's installation. You should do it regardless of the difficulty. You may need to create a wrapper script, tell SaltStack to run the 3rd party software vendors installation scripts, or become very familiar with expect. But all of this work up front will save countless hours over the years of installing and re-installing software.
  • 20. Installing Software with a Script SaltStack can be used to run any script, including scripts that are packages with software. /some/path/custom-installer.sh:   cmd.run:     - unless: test -f /some/path/bin/start.sh - order: last - stateful: True - require: - pkg: jre - user: someguy /some/path/custom-installer.sh:   cmd.run:     - unless: test -f /some/path/bin/start.sh - order: last - stateful: True - require: - pkg: jre - user: someguy
  • 21. Make all of your scripts stateful Saltstack can understand if the script was successful or not. To do this add the following to your .sls file. - stateful: True- stateful: True Then add the following to the bottom of your scripts output. echo  # an empty line here so the next line will be the last. echo "changed=yes comment='Job Accomplished'" echo  # an empty line here so the next line will be the last. echo "changed=yes comment='Job Accomplished'" echo  # an empty line here so the next line will be the last. echo "changed=no comment=’Oh Noes'" echo  # an empty line here so the next line will be the last. echo "changed=no comment=’Oh Noes'" Bad Results: Good Results:
  • 22. Installing tar packaged applications You can also use the archive module to extract software that is packaged and deployed via tar files. appinstaller:   module.run:     - name: archive.tar     - options: --owner username --group groupname xzf     - tarfile: /path/to/file/on/server/somefile.tar.gz     - cwd: /software/dir/     - require:       - user: username     - unless: test -f /software/dir/bin appinstaller:   module.run:     - name: archive.tar     - options: --owner username --group groupname xzf     - tarfile: /path/to/file/on/server/somefile.tar.gz     - cwd: /software/dir/     - require:       - user: username     - unless: test -f /software/dir/bin
  • 23. Configuring Applications Why stop at just automating the installation of the software? Why not automate the configuration of it as well?
  • 24. Using Templates SaltStack allows you to utilize templates to deploy consistent configuration files. With a combination of pillars and templates you can deploy custom configuration files easily. /etc/mysql/my.cnf:   file.managed:     - source: salt://mysql/config/etc/mysql/my.cnf     - user: root     - group: root     - mode: 644     - template: jinja     - context:       listenip: {{ salt['network.interfaces']()['eth0']['inet'][0]['address'] }} /etc/mysql/my.cnf:   file.managed:     - source: salt://mysql/config/etc/mysql/my.cnf     - user: root     - group: root     - mode: 644     - template: jinja     - context:       listenip: {{ salt['network.interfaces']()['eth0']['inet'][0]['address'] }}
  • 25. Running Custom Commands Some applications require a command to be run after installation. Just like installing software you can configure the software with cmd.run as well. emcpreg:   cmd.run:     - name: /sbin/emcpreg -add SOME-EMC-LICENSE-STRING     - onlyif: /sbin/emcpreg -list 2>&1 | grep -q "No such file"     - require:       - pkg: EMCpower.LINUX emcpreg:   cmd.run:     - name: /sbin/emcpreg -add SOME-EMC-LICENSE-STRING     - onlyif: /sbin/emcpreg -list 2>&1 | grep -q "No such file"     - require:       - pkg: EMCpower.LINUX
  • 26. Change execution The execution of changes is another human driven process that is prone to simply mistakes; mistakes that can affect availability. If you want to mitigate human errors during changes, it requires that all changes to testing and production environments be 100% deployed via configuration management tools. By using a configuration management tool you can avoid root causes such as: •/etc/hosts file was deployed with incorrect permissions •Required configuration file was not deployed with updated application
  • 27. Automated state runs With SaltStack you can have each server pull the desired states and update automatically by putting the following into a cronjob on each minion. # call a high-state every 5 minutes */5 0 0 0 0 salt-call state.highstate # call a high-state every 5 minutes */5 0 0 0 0 salt-call state.highstate This is great when you are running hundreds or thousands of hosts that all perform the same jobs and can take over for others. Or for systems that can be restarted quickly without human interaction or service disruption (i.e. Apache, NGINX). As of 0.12 SaltStack now has a scheduler function that allows you to define a state run on a defined schedule on either the master or minions. Protip: You should stagger the schedules (cron or salt scheduler) to ensure that every server doesn’t restart services at the same time.
  • 28. Automatic state runs is not appropriate for every situation While having every system run a high state every 2 minutes sounds great; it is not the best answer in every case. Knowing when to automate everything and when to keep some things semi-automated is key to building highly available systems. If the systems you are managing are extremely sensitive to changes and application restarts. It is best to establish a policy where the high state is run manually at a scheduled time of day or week that aligns with your change management procedures.
  • 29. Use test=True You can have SaltStack perform a dry-run state change by appending test=True on the end of the state run command. salt '*' state.highstate test=Truesalt '*' state.highstate test=True By using test=True you can see what is being changed and test your salt state and pillar configurations before executing. This is also a great way of auditing what on your systems needs to be changed to match your salt configuration.
  • 30. Use test=True by default in production In the minion configuration file you can set the default run to always use the test feature. # You can specify that all modules should run in test mode: test: True # You can specify that all modules should run in test mode: test: True This should be used on systems that are “semi-automated” and are incredibly sensitive to changes. If you want to run a highstate on these systems you will need to run a state run with test=False. # salt '*' state.highstate test=False# salt '*' state.highstate test=False
  • 31. Keep things well organized
  • 32. Using more than the base environment In large enterprise environments you will find various applications, some applications will only have a hand full of servers, others have thousands. Keeping track of what gets installed or configured where in these types of environments becomes unreasonable with basic hostname matching. This is especially true if the enterprise hostname convention does not allow for easy identification of server roles.
  • 33. Using additional environments SaltStack lets you define environments for both states and pillars. This allows you to segregate configurations for each application environment.
  • 34. Similar but different configuration files In the example below I show how you can use additional environments to have the same state file defined to deploy a unique hosts file to two different application environments. salt/states/base salt/states/app1-dev/hosts/hosts.file salt/states/app2-dev/hosts/hosts.file salt/states/base salt/states/app1-dev/hosts/hosts.file salt/states/app2-dev/hosts/hosts.file base: '*' - users.operations - screen app1-dev: 'app1*' - hosts app2-dev: 'app2*' - hosts base: '*' - users.operations - screen app1-dev: 'app1*' - hosts app2-dev: 'app2*' - hosts
  • 35. Defining a new environment To define and create new environments simply edit the /etc/salt/master configuration file. file_roots:   base:  - /salt/states/base file_roots:   base:  - /salt/states/base Find:   newenv:  - /salt/states/newenv   newenv:  - /salt/states/newenv Append:
  • 36. Using node groups In addition to custom environments you can also define node groups within SaltStack. Node groups are a grouping of minions that can be grouped by several parameters. When used with additional environments this allows you to perform salt runs on well defined groups of minions.
  • 37. Using node groups in the top.sls file Node groups allows you to define states based on a classification rather than a hostname. app1-dev:   'app1-webservers':     - match: nodegroup     - nginx - php - wordpress app2-dev: ‘app2-webservers’: - match: nodegroup - nginx - uwsgi - django app1-dev:   'app1-webservers':     - match: nodegroup     - nginx - php - wordpress app2-dev: ‘app2-webservers’: - match: nodegroup - nginx - uwsgi - django
  • 38. Using node groups for salt runs You can use node groups to coordinate which servers should perform a highstate or other tasks such as cmd.run # salt -N app1_webservers state.highstate# salt -N app1_webservers state.highstate # salt -N app1_webservers cmd.run “service nginx restart”# salt -N app1_webservers cmd.run “service nginx restart” High State: Command Run:
  • 39. Defining node groups Node Groups are defined in the /etc/salt/master configuration file. This example uses several compound matchers that can be used to define node groups. nodegroups:   app1_webservers: 'L@host001.example.com,host010.example.com or host308.example.com'   app1_appservers: 'G@nodegroup:app1_appservers'   app1_dbservers: 'P@nodegroup:app1_dbservers' app1_servers: 'S@192.168.1.0/24' nodegroups:   app1_webservers: 'L@host001.example.com,host010.example.com or host308.example.com'   app1_appservers: 'G@nodegroup:app1_appservers'   app1_dbservers: 'P@nodegroup:app1_dbservers' app1_servers: 'S@192.168.1.0/24'
  • 41. Architectural Considerations While using SaltStack appropriately can greatly increase your consistency and automation which brings with it higher availability. This only works while SaltStack is up and running.
  • 42. Spread the load In large environments it is advisable to setup a dedicated salt master server for different environment types. For example if you have a development, test and 2 production sites it would be advisable to have at least 1 salt master for each environment. Using 2 salt masters for the 2 production sites would allow you to setup a master server for each site giving you independence during data center outages..
  • 43. Setup multiple master servers As of version 0.16 SaltStack minions have the ability to synchronize with multiple masters. This allows you to survive a failure of a single SaltStack master server. master:   - saltmaster01.example.com   - saltmaster02.example.com master:   - saltmaster01.example.com   - saltmaster02.example.com All master servers must have the same: •/etc/salt/pki/master/master.pem •file_roots •pillar_roots
  • 45. Pro tips • Don't become so dependent on SaltStack that you can't perform remediation tasks without it. • Keep your implementation as simple to support as possible. • Keep your implementation well organized to ensure configurations only go where they are meant to go. • Use test=True like your life depends on it, because it might... • Use source control! • If you are going to use SaltStack, use it! Automate or Semi Automate everything. • Keep an eye on new features, SaltStack is evolving fast. • Check out the modules there is some cool stuff in there.
  • 46. EOF Presented by: Benjamin Cane – bencane.com Twitter: @madflojo