templates/default/ceph.conf.erb (390 lines of code) (raw):

####################################################################### # Maintained by ceph cookbook # Please do not modify by hand. Changes will get overridden. # Author: Hans Chris Jones ####################################################################### [global] # This value must be set before the mon.rb recipe is called. Do this in your own recipe where you set your owner # variables. For an example, see ceph-chef/recipes/ceph-mon.rb fsid = <%= @fsid_secret %> <% if !node['ceph']['keyring']['global'].empty? %> keyring = <%= node['ceph']['keyring']['global'] %> <% end -%> auth cluster required = cephx auth service required = cephx auth client required = cephx # Example of default cephx settings # cephx require signatures = true # cephx cluster require signatures = true # cephx service require signatures = false # cephx sign messages = true # Note: mon host (required) and mon initial members (optional) should be in global section in addition # to the cluster and public network options since they are all critical to every node. # List of all of the monitor nodes in the given cluster <% #Check ALL of the important vars before modifying them just in case their values are empty or nil. -%> <% if !@mon_addresses.nil? && !@mon_addresses.empty? -%> mon host = <%= @mon_addresses.sort.join(', ') %> <% end -%> # Suppress warning of too many pgs mon pg warn max per osd = 0 max open files = 131072 <% if !node['ceph']['network']['cluster']['cidr'].nil? && !node['ceph']['network']['cluster']['cidr'].empty? %> cluster network = <%= @node['ceph']['network']['cluster']['cidr'].join(',') %> <% end -%> <% if !node['ceph']['network']['public']['cidr'].nil? && !node['ceph']['network']['public']['cidr'].empty? %> public network = <%= @node['ceph']['network']['public']['cidr'].join(',') %> <% end -%> <% if !node['ceph']['config']['global'].nil? -%> # This is very flexible section. You can add more options OR override options from above simply by # specifying the values in your wrapper cookbook or your "chef-repo". If you override values then # you may see a warning in the logs letting you know you have overridden. <% node['ceph']['config']['global'].sort.each do |k, v| %> <%= k %> = <%= v %> <% end %> <% end -%> <% if !node['ceph']['config']['rebalance'].nil? and !node['ceph']['config']['rebalance'].empty? %> paxos propose interval = 60 <% end %> <% if node['ceph']['experimental']['enable'] %> enable experimental unrecoverable data corrupting features: <%= @node['ceph']['experimental']['features'].join(',') %> <% end %> <% if @is_osd -%> [osd] <% if !node['ceph']['keyring']['osd'].empty? %> keyring = <%= node['ceph']['keyring']['osd'] %> <% end -%> <% # If the 'config''osd' key/value pairs are nil then use these values as defaults other wise be SURE to have at least these defined in your custom key/value OSD array -%> <% if node['ceph']['config']['osd'].nil? -%> # Set the default values here if no values provided to override them # Need xattr use omap = true for RGW osd map dedup = true osd max write size = 256 osd disk threads = 1 osd client message size cap = 1073741824 filestore xattr use omap = true filestore merge threshold = 40 filestore split multiple = 8 filestore op threads = 32 filestore min sync interval = 10 filestore max sync interval = 15 filestore queue max ops = 2500 filestore queue max bytes = 10485760 filestore queue committing max ops = 5000 filestore queue committing max bytes = 10485760000 osd journal size = <%= node['ceph']['osd']['journal']['size'] %> journal max write bytes = 1073714824 journal max write entries = 10000 journal queue max ops = 50000 journal queue max bytes = 10485760000 journal block align = true journal dio = true journal aio = true osd mkfs type = xfs #osd mount options xfs = rw,noexec,nodev,noatime,nodiratime,nobarrier osd mount options xfs = rw,noatime,inode64,logbufs=8,logbsize=256k,allocsize=4M # Example: osd mkfs options xfs = -f -i size=2048 # Example: osd mount options xfs = noexec,nodev,noatime,nodiratime,barrier=0,discard # IMPORTANT: If you modify the crush map with the automation then uncomment the line below (osd crush update ...) # otherwise the crush map will not get created correctly and the PGs will stay in inactive/unclean state. # In a production system it's good to set this value to 'false' and modify the crush map to fit your environment. <% if node['ceph']['osd']['crush']['update'] %> osd crush update on start = <%= node['ceph']['osd']['crush']['update_on_start'] %> <% end %> #You can change the replica count via config or cli osd pool default size = <%= node['ceph']['osd']['size']['max'] %> osd pool default min size = <%= node['ceph']['osd']['size']['min'] %> osd pool default pg num = <%= node['ceph']['pools']['pgs']['num'] %> osd pool default pgp num = <%= node['ceph']['pools']['pgs']['num'] %> # Default is 0 for default crush rule. # Example: osd pool default crush rule = <%= node['ceph']['pools']['crush']['rule'] %> # Host 1, Rack 3 - Default is 1. This can have an impact on the crushmap if not the default. osd crush chooseleaf type = <%= node['ceph']['osd']['crush']['chooseleaf_type'] %> # Note: All of these values can be overridden in you wrapper cookbook or "chef-repo" project osd recovery op priority = <%= node['ceph']['tuning']['osd_recovery_op_priority'] %> osd recovery max active = <%= node['ceph']['tuning']['osd_recovery_max_active'] %> osd max backfills = <%= node['ceph']['tuning']['osd_max_backfills'] %> osd op threads = <%= node['ceph']['tuning']['osd_op_threads'] %> osd disk thread ioprio priority = <%= node['ceph']['system']['scheduler']['device']['ceph']['priority'] %> osd disk thread ioprio class = <%= node['ceph']['system']['scheduler']['device']['ceph']['class'] %> <% end -%> <% if !node['ceph']['config']['rebalance'].nil? and !node['ceph']['config']['rebalance'].empty? %> # These two max active and max single work together osd recovery max active = 1 osd recovery max single start = 1 osd recovery op priority = 1 osd recovery max chunk = 1048576 osd recovery threads = 1 osd max backfills = 2 osd backfill scan min = 8 osd backfill scan max = 64 osd max scrubs = 1 osd scrub sleep = .1 osd scrub chunk min = 1 osd scrub chunk max = 5 osd deep scrub stride = 1048576 osd scrub begin hour = 23 osd scrub end hour = 6 osd op threads = 8 osd recovery op priority = 1 osd mon report interval min = 30 <% end %> <% if !node['ceph']['config']['osd'].nil? -%> <% node['ceph']['config']['osd'].sort.each do |k, v| %> <%= k %> = <%= v %> <% end %> <% end -%> <% end -%> <% if @is_mon -%> [mon] <% if !node['ceph']['keyring']['mon'].empty? %> keyring = <%= node['ceph']['keyring']['mon'] %> <% end -%> # Change the allow pool delete to false once you have everything where you want it. It keeps someone from # accidently deleting a pool! mon_allow_pool_delete = true <% if !node['ceph']['config']['mon'].nil? -%> <% node['ceph']['config']['mon'].sort.each do |k, v| %> <%= k %> = <%= v %> <% end %> <% end -%> <% end -%> <% if !node['ceph']['config']['mds'].nil? -%> # NOTE: Only needed for CephFS [mds] <% if !node['ceph']['keyring']['mds'].empty? %> keyring = <%= node['ceph']['keyring']['mds'] %> <% end -%> mds cache size = 250000 <% node['ceph']['config']['mds'].sort.each do |key, value| -%> <%= key %> = <%= value %> <% end -%> <% end -%> <% if @is_rbd || @is_admin || @is_rgw || @is_rest_api -%> # Any items in the 'client' section will apply to all sub-client sections unless overridden in the sub-client section. [client] <% if @is_rbd -%> rbd cache = true rbd cache writethrough until flush = true rbd concurrent management ops = 10 rbd cache size = 67108864 rbd cache max dirty = 50331648 rbd cache target dirty = 33554432 rbd cache max dirty age = 2 rbd default format = 2 log file = /var/log/qemu/qemu-guest-$pid.log # NOTE: If using RBD and OpenStack then you can add two additional sub-client for Cinder and Glance below this one. <% end -%> # admin socket must be writable by QEMU and allowed by SELinux or AppArmor # admin socket = /var/run/ceph/$cluster-$type.$id.$pid.$cctid.asok # admin socket = /var/run/ceph/$cluster-$type.$id.$pid.asok # The `ceph daemon` is not as flexible as `ceph --admin-daemon` so naming admin socket is important. admin socket = /var/run/ceph/$cluster-$type.$id.asok <% end -%> <% if @is_admin || @is_rgw -%> # NOTE: You can null out the 'admin socket' below if you wish. If present, when running ceph -s without being 'sudo' # you will receive an 'unable to bind error msg'. [client.admin] <% if !node['ceph']['keyring']['adm'].empty? %> keyring = <%= node['ceph']['keyring']['adm'] %> <% end -%> admin socket = log file = <% end -%> <% if @is_rgw -%> <% if @is_federated -%> <% node['ceph']['pools']['radosgw']['federated_zone_instances'].each do |inst| %> [client.radosgw.<%= inst['region'] %>-<%= inst['name'] %>] host = <%= node['hostname'] %> rgw opstate ratelimit = 0 <% if node['ceph']['pools']['radosgw']['federated_enable_regions_zones'] %> <% if node['ceph']['pools']['radosgw']['federated_multisite_replication'] %> rgw region = <%= inst['region'] %> <% else %> rgw region = <%= inst['region'] %>-<%= inst['name'] %> <% end %> <% if node['ceph']['version'] == 'hammer' %> <% if node['ceph']['pools']['radosgw']['federated_multisite_replication'] %> rgw region root pool = .<%= inst['region'] %>.rgw.root <% else %> rgw region root pool = .<%= inst['region'] %>-<%= inst['name'] %>.rgw.root <% end %> <% else %> <% if node['ceph']['pools']['radosgw']['federated_multisite_replication'] %> rgw zonegroup root pool = .<%= inst['region'] %>.rgw.root <% else %> rgw zonegroup root pool = .<%= inst['region'] %>-<%= inst['name'] %>.rgw.root <% end %> <% end %> rgw zone = <%= inst['region'] %>-<%= inst['name'] %> rgw zone root pool = .<%= inst['region'] %>-<%= inst['name'] %>.rgw.root <% end %> <% if !node['ceph']['keyring']['rgw'].empty? %> <% if node['ceph']['pools']['radosgw']['federated_multisite_replication'] %> keyring = <%= node['ceph']['keyring']['rgw'] %>.keyring <% else %> keyring = <%= node['ceph']['keyring']['rgw'] %>.<%= inst['region'] %>-<%= inst['name'] %>.keyring <% end %> <% end -%> admin socket = /var/run/ceph/$cluster-$type.radosgw.<%= inst['region'] %>-<%= inst['name'] %>.asok <% if inst['rgw_thread_pool'] %> rgw thread pool size = <%= inst['rgw_thread_pool'] %> <% else %> rgw thread pool size = <%= node['ceph']['radosgw']['rgw_thread_pool'] %> <% end %> <% if inst['handles'] %> rgw num rados handles = <%= inst['handles'] %> <% else %> rgw num rados handles = <%= node['ceph']['radosgw']['rgw_num_rados_handles'] %> <% end %> rgw enable ops log = <%= node['ceph']['radosgw']['logs']['ops']['enable'] %> rgw enable usage log = <%= node['ceph']['radosgw']['logs']['usage']['enable'] %> # For GC Max Objects: Use Prime numbers and larger ones if your cluster is large (i.e., 5003 or higher for a multi PB size) rgw gc max objects = <%= node['ceph']['radosgw']['gc']['max_objects'] %> rgw gc obj min wait = <%= node['ceph']['radosgw']['gc']['obj_min_wait'] %> rgw gc processor max time = <%= node['ceph']['radosgw']['gc']['processor_max_time'] %> rgw gc processor period = <%= node['ceph']['radosgw']['gc']['processor_period'] %> pid file = /var/run/ceph/$name.<%= inst['region'] %>-<%= inst['name'] %>.pid # Increased to 1 to log HTTP return codes - http://tracker.ceph.com/issues/12432 <% if node['ceph']['radosgw']['debug']['logs']['enable'] %> <% if inst['threads'] %> rgw frontends = civetweb port=<%= inst['port'] %> num_threads=<%= inst['threads'] %> error_log_file=<%= node['ceph']['radosgw']['civetweb_error_log_file'] %>.<%= inst['name'] %>.log access_log_file=<%= node['ceph']['radosgw']['civetweb_access_log_file'] %>.<%= inst['name'] %>.log <% else %> rgw frontends = civetweb port=<%= inst['port'] %> num_threads=<%= node['ceph']['radosgw']['civetweb_num_threads'] %> error_log_file=<%= node['ceph']['radosgw']['civetweb_error_log_file'] %>.<%= inst['name'] %>.log access_log_file=<%= node['ceph']['radosgw']['civetweb_access_log_file'] %>.<%= inst['name'] %>.log <% end %> log file = /var/log/radosgw/$cluster.client.radosgw.<%= inst['region'] %>-<%= inst['name'] %>.log debug rgw = 1/5 <% else %> <% if inst['threads'] %> rgw frontends = civetweb port=<%= inst['port'] %> num_threads=<%= inst['threads'] %> error_log_file=<%= node['ceph']['radosgw']['civetweb_error_log_file'] %>.<%= inst['name'] %>.log <% else %> rgw frontends = civetweb port=<%= inst['port'] %> num_threads=<%= node['ceph']['radosgw']['civetweb_num_threads'] %> error_log_file=<%= node['ceph']['radosgw']['civetweb_error_log_file'] %>.<%= inst['name'] %>.log <% end %> debug default=0/0 debug lockdep=0/0 debug context=0/0 debug crush=0/0 debug buffer=0/0 debug timer=0/0 debug filer=0/0 debug objecter=0/0 debug rados=0/0 debug journaler=0/0 debug objectcacher=0/0 debug client=0/0 debug optracker=0/0 debug objclass=0/0 debug ms=0/0 debug tp=0/0 debug auth=0/0 debug finisher=0/0 debug heartbeatmap=0/0 debug perfcounter=0/0 debug rgw=0/0 debug asok=0/0 debug throttle=0/0 debug civetweb=0/0 <% end %> rgw dns name = <%= inst['url'] %> rgw resolve cname = True <% if node['ceph']['radosgw']['keystone']['auth'] %> rgw keystone url = <%= node['ceph']['radosgw']['keystone']['admin']['url'] %>:<%= node['ceph']['radosgw']['keystone']['admin']['port'] %> rgw keystone admin token = <%= node['ceph']['radosgw']['keystone']['admin']['token'] %> rgw keystone accepted roles = <%= node['ceph']['radosgw']['keystone']['accepted_roles'] %> rgw keystone token cache size = <%= node['ceph']['radosgw']['keystone']['token_cache_size'] %> rgw keystone revocation interval = <%= node['ceph']['radosgw']['keystone']['revocation_interval'] %> rgw s3 auth use keystone = true <% end %> <% if !node['ceph']['config']['radosgw'].nil? -%> <% node['ceph']['config']['radosgw'].sort.each do |k, v| %> <%= k %> = <%= v %> <% end %> <% end -%> <% end %> <% else %> [client.radosgw.gateway] host = <%= node['hostname'] %> rgw opstate ratelimit = 0 <% if !node['ceph']['keyring']['rgw'].empty? %> keyring = <%= node['ceph']['keyring']['rgw'] %>.keyring <% end -%> admin socket = /var/run/ceph/$cluster-$type.radosgw.gateway.asok rgw thread pool size = <%= node['ceph']['radosgw']['rgw_thread_pool'] %> rgw num rados handles = <%= node['ceph']['radosgw']['rgw_num_rados_handles'] %> rgw enable ops log = <%= node['ceph']['radosgw']['logs']['ops']['enable'] %> rgw enable usage log = <%= node['ceph']['radosgw']['logs']['usage']['enable'] %> # For GC Max Objects: Use Prime numbers and larger ones if your cluster is large (i.e., 5003 or higher for a multi PB size) rgw gc max objects = <%= node['ceph']['radosgw']['gc']['max_objects'] %> rgw gc obj min wait = <%= node['ceph']['radosgw']['gc']['obj_min_wait'] %> rgw gc processor max time = <%= node['ceph']['radosgw']['gc']['processor_max_time'] %> rgw gc processor period = <%= node['ceph']['radosgw']['gc']['processor_period'] %> pid file = /var/run/ceph/$name.pid # Increased to 1 to log HTTP return codes - http://tracker.ceph.com/issues/12432 <% if node['ceph']['radosgw']['debug']['logs']['enable'] %> rgw frontends = civetweb port=<%= node['ceph']['radosgw']['port'] %> num_threads=<%= node['ceph']['radosgw']['civetweb_num_threads'] %> error_log_file=<%= node['ceph']['radosgw']['civetweb_error_log_file'] %>.log access_log_file=<%= node['ceph']['radosgw']['civetweb_access_log_file'] %>.log log file = /var/log/radosgw/$cluster.client.radosgw.log debug rgw = 1/5 <% else %> rgw frontends = civetweb port=<%= node['ceph']['radosgw']['port'] %> num_threads=<%= node['ceph']['radosgw']['civetweb_num_threads'] %> error_log_file=<%= node['ceph']['radosgw']['civetweb_error_log_file'] %>.log debug default=0/0 debug lockdep=0/0 debug context=0/0 debug crush=0/0 debug buffer=0/0 debug timer=0/0 debug filer=0/0 debug objecter=0/0 debug rados=0/0 debug journaler=0/0 debug objectcacher=0/0 debug client=0/0 debug optracker=0/0 debug objclass=0/0 debug ms=0/0 debug tp=0/0 debug auth=0/0 debug finisher=0/0 debug heartbeatmap=0/0 debug perfcounter=0/0 debug rgw=0/0 debug asok=0/0 debug throttle=0/0 debug civetweb=0/0 <% end %> rgw dns name = <%= node['ceph']['radosgw']['default_url'] %> rgw resolve cname = True <% if node['ceph']['radosgw']['keystone']['auth'] %> rgw keystone url = <%= node['ceph']['radosgw']['keystone']['admin']['url'] %>:<%= node['ceph']['radosgw']['keystone']['admin']['port'] %> rgw keystone admin token = <%= node['ceph']['radosgw']['keystone']['admin']['token'] %> rgw keystone accepted roles = <%= node['ceph']['radosgw']['keystone']['accepted_roles'] %> rgw keystone token cache size = <%= node['ceph']['radosgw']['keystone']['token_cache_size'] %> rgw keystone revocation interval = <%= node['ceph']['radosgw']['keystone']['revocation_interval'] %> rgw s3 auth use keystone = true <% end %> <% if !node['ceph']['config']['radosgw'].nil? -%> <% node['ceph']['config']['radosgw'].sort.each do |k, v| %> <%= k %> = <%= v %> <% end %> <% end -%> <% end -%> <% end -%> <% if @is_rest_api -%> [client.restapi] public addr = <%= node['ceph']['restapi']['ip'] %>:<%= node['ceph']['restapi']['port'] %> <% if !node['ceph']['keyring']['res'].empty? %> keyring = <%= node['ceph']['keyring']['res'] %>.keyring <% end -%> admin socket = /var/run/ceph/$cluster-$type.restapi.asok restapi base url = <%= node['ceph']['restapi']['base_url'] %> log file = /var/log/ceph/$cluster.client.restapi.log <% if !node['ceph']['config']['restapi'].nil? -%> <% node['ceph']['config']['restapi'].sort.each do |k, v| %> <%= k %> = <%= v %> <% end %> <% end -%> <% end -%> <% node['ceph']['config-sections'].sort.each do |name, sect| %> [<%= name %>] <% sect.sort.each do |k, v| %> <%= k %> = <%= v %> <% end %> <% end %>