Chapter 1. Configuration Reference
All Ceph clusters have a configuration, which defines:
- Cluster identity
- Authentication settings
- Ceph daemon membership in the cluster
- Network configuration
- Host names and addresses
- Paths to keyrings
- Paths to data (including journals)
- Other runtime options
A deployment tool such as Red Hat Storage Console or Ansible will typically create an initial Ceph configuration file for you. However, you can create one yourself if you prefer to bootstrap a cluster without using a deployment tool.
For your convenience, each daemon has a series of default values, that is, many are set by the ceph/src/common/config_opts.h
script. You can override these settings with a Ceph configuration file or at runtime by using the monitor tell
command or connecting directly to a daemon socket on a Ceph node.
1.1. General Recommendations
You may maintain a Ceph configuration file anywhere you like, but Red Hat recommends having an administration node where you maintain a master copy of the Ceph configuration file.
When you make changes to the Ceph configuration file, it is a good practice to push the updated configuration file to your Ceph nodes to maintain consistency.
1.2. Configuration File Structure
The Ceph configuration file configures Ceph daemons at start time—overriding default values. Ceph configuration files use an ini style syntax. You can add comments by preceding comments with a pound sign (#) or a semi-colon (;). For example:
# <--A number (#) sign precedes a comment. ; A comment may be anything. # Comments always follow a semi-colon (;) or a pound (#) on each line. # The end of the line terminates a comment. # We recommend that you provide comments in your configuration file(s).
The configuration file can configure all Ceph daemons in a Ceph storage cluster or all Ceph daemons of a particular type at start time. To configure a series of daemons, the settings must be included under the processes that will receive the configuration as follows:
- [global]
- Description
-
Settings under
[global]
affect all daemons in a Ceph Storage Cluster. - Example
-
auth supported = cephx
- [osd]
- Description
-
Settings under
[osd]
affect allceph-osd
daemons in the Ceph storage cluster, and override the same setting in[global]
. - Example
-
osd journal size = 1000
- [mon]
- Description
-
Settings under
[mon]
affect allceph-mon
daemons in the Ceph storage cluster, and override the same setting in[global]
. - Example
-
mon host = hostname1,hostname2,hostname3
mon addr = 10.0.0.101:6789
- [client]
- Description
-
Settings under
[client]
affect all Ceph clients (for example, mounted Ceph block devices, Ceph object gateways, and so on). - Example
-
log file = /var/log/ceph/radosgw.log
Global settings affect all instances of all daemon in the Ceph storage cluster. Use the [global]
setting for values that are common for all daemons in the Ceph storage cluster. You can override each [global]
setting by:
-
Changing the setting in a particular process type (for example,
[osd]
,[mon]
). -
Changing the setting in a particular process (for example,
[osd.1]
).
Overriding a global setting affects all child processes, except those that you specifically override in a particular daemon.
A typical global setting involves activating authentication. For example:
[global] #Enable authentication between hosts within the cluster. auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx
You can specify settings that apply to a particular type of daemon. When you specify settings under [osd]
or [mon]
without specifying a particular instance, the setting will apply to all OSD or monitor daemons respectively.
A typical daemon-wide setting involves setting journal sizes, filestore settings, and so on For example:
[osd] osd_journal_size = 1000
You can specify settings for particular instances of a daemon. You may specify an instance by entering its type, delimited by a period (.) and by the instance ID. The instance ID for a Ceph OSD daemons is always numeric, but it may be alphanumeric for Ceph monitors.
[osd.1] # settings affect osd.1 only. [mon.a] # settings affect mon.a only.
The default Ceph configuration file locations in sequential order include:
-
$CEPH_CONF
(the path following the$CEPH_CONF
environment variable) -
-c path/path
(the-c
command line argument) -
/etc/ceph/ceph.conf
-
~/.ceph/config
-
./ceph.conf
(in the current working directory)
A typical Ceph configuration file has at least the following settings:
[global] fsid = {cluster-id} mon_initial_members = {hostname}[, {hostname}] mon_host = {ip-address}[, {ip-address}] #All clusters have a front-side public network. #If you have two NICs, you can configure a back side cluster #network for OSD object replication, heart beats, backfilling, #recovery, and so on public_network = {network}[, {network}] #cluster_network = {network}[, {network}] #Clusters require authentication by default. auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx #Choose reasonable numbers for your journals, number of replicas #and placement groups. osd_journal_size = {n} osd_pool_default_size = {n} # Write an object n times. osd_pool_default_min_size = {n} # Allow writing n copy in a degraded state. osd_pool_default_pg_num = {n} osd_pool_default_pgp_num = {n} #Choose a reasonable crush leaf type. #0 for a 1-node cluster. #1 for a multi node cluster in a single rack #2 for a multi node, multi chassis cluster with multiple hosts in a chassis #3 for a multi node cluster with hosts across racks, and so on osd_crush_chooseleaf_type = {n}
1.3. Metavariables
Metavariables simplify Ceph storage cluster configuration dramatically. When a metavariable is set in a configuration value, Ceph expands the metavariable into a concrete value.
Metavariables are very powerful when used within the [global]
, [osd]
, [mon]
, or [client]
sections of the Ceph configuration file. However, you can also use them with the administration socket. Ceph metavariables are similar to Bash shell expansion.
Ceph supports the following metavariables:
- $cluster
- Description
- Expands to the Ceph storage cluster name. Useful when running multiple Ceph storage clusters on the same hardware.
- Example
-
/etc/ceph/$cluster.keyring
- Default
-
ceph
- $type
- Description
-
Expands to one of
osd
ormon
, depending on the type of the instant daemon. - Example
-
/var/lib/ceph/$type
- $id
- Description
-
Expands to the daemon identifier. For
osd.0
, this would be0
. - Example
-
/var/lib/ceph/$type/$cluster-$id
- $host
- Description
- Expands to the host name of the instant daemon.
- $name
- Description
-
Expands to
$type.$id
. - Example
-
/var/run/ceph/$cluster-$name.asok
1.4. Viewing the Ceph Runtime Configuration
To view a runtime configuration, log in to a Ceph node and execute:
ceph daemon {daemon-type}.{id} config show
For example, if you want to see the configuration for osd.0
, log into the node containing osd.0
and execute:
ceph daemon osd.0 config show
For additional options, specify a daemon and help
. For example:
ceph daemon osd.0 help
1.5. Getting a Specific Configuration Setting at Runtime
To get a specific configuration setting at runtime, log in to a Ceph node and execute:
ceph daemon {daemon-type}.{id} config get {parameter}
For example to retrieve the public address of osd.0
, execute:
ceph daemon osd.0 config get public_addr
1.6. Setting a Specific Configuration Setting at Runtime
There are two general ways to set a runtime configuration:
- by using the Ceph monitor
- by using the administration socket
You can set a Ceph runtime configuration setting by contacting the monitor using the tell
and injectargs
command. To use this approach, the monitors and the daemon you are trying to modify must be running:
ceph tell {daemon-type}.{daemon id or *} injectargs --{name} {value} [--{name} {value}]
Replace {daemon-type}
with one of osd
or mon
. You can apply the runtime setting to all daemons of a particular type with *
, or specify a specific daemon’s ID (that is, its number or name). For example, to change the debug logging for a ceph-osd
daemon named osd.0
to 0/5
, execute the following command:
ceph tell osd.0 injectargs '--debug-osd 0/5'
The tell
command takes multiple arguments, so each argument for tell
must be within single quotes, and the configuration prepended with two dashes ('--{config_opt} {opt-val}' ['-{config_opt} {opt-val}']
). Quotes are not necessary for the daemon
command, because it only takes one argument.
The ceph tell
command goes through the monitors. If you cannot bind to the monitor, you can still make the change by logging into the host of the daemon whose configuration you want to change using ceph daemon
. For example:
sudo ceph osd.0 config set debug_osd 0/5
1.7. General Configuration Reference
General settings typically get set automatically by deployment tools.
- fsid
- Description
- The file system ID. One per cluster.
- Type
- UUID
- Required
- No.
- Default
- N/A. Usually generated by deployment tools.
- admin_socket
- Description
- The socket for executing administrative commands on a daemon, irrespective of whether Ceph monitors have established a quorum.
- Type
- String
- Required
- No
- Default
-
/var/run/ceph/$cluster-$name.asok
- pid_file
- Description
-
The file in which the monitor or OSD will write its PID. For instance,
/var/run/$cluster/$type.$id.pid
will create /var/run/ceph/mon.a.pid for themon
with ida
running in theceph
cluster. Thepid file
is removed when the daemon stops gracefully. If the process is not daemonized (meaning it runs with the-f
or-d
option), thepid file
is not created. - Type
- String
- Required
- No
- Default
- No
- chdir
- Description
-
The directory Ceph daemons change to once they are up and running. Default
/
directory recommended. - Type
- String
- Required
- No
- Default
-
/
- max_open_files
- Description
-
If set, when the Red Hat Ceph Storage cluster starts, Ceph sets the
max_open_fds
at the OS level (that is, the max # of file descriptors). It helps prevents Ceph OSDs from running out of file descriptors. - Type
- 64-bit Integer
- Required
- No
- Default
-
0
- fatal_signal_handlers
- Description
- If set, we will install signal handlers for SEGV, ABRT, BUS, ILL, FPE, XCPU, XFSZ, SYS signals to generate a useful log message.
- Type
- Boolean
- Default
-
true
1.8. OSD Memory Target
BlueStore keeps OSD heap memory usage under a designated target size with the osd_memory_target
configuration option.
The option osd_memory_target
sets OSD memory based upon the available RAM in the system. By default, Anisble sets the value to 4 GB. You can change the value, expressed in bytes, in the /usr/share/ceph-ansible/group_vars/all.yml
file when deploying the daemon.
Example: Set the osd_memory_target
to 6000000000 bytes
ceph_conf_overrides: osd: osd_memory_target=6000000000
Ceph OSD memory caching is more important when the block device is slow, for example, traditional hard drives, because the benefit of a cache hit is much higher than it would be with a solid state drive. However, this has to be weighed-in to co-locate OSDs with other services, such as in a hyper-converged infrastructure (HCI), or other applications.
The value of osd_memory_target
is one OSD per device for traditional hard drive device, and two OSDs per device for NVMe SSD devices. The osds_per_device
is defined in group_vars/osds.yml
file.
Additional Resources
-
Setting
osd_memory_target
Setting OSD Memory Target
1.9. MDS Cache Memory Limit
MDS servers keep their metadata in a separate storage pool, named cephfs_metadata
, and are the users of Ceph OSDs. For Ceph File Systems, MDS servers have to support an entire Red Hat Ceph Storage cluster, not just a single storage device within the storage cluster, so their memory requirements can be significant, particularly if the workload consists of small-to-medium-size files, where the ratio of metadata to data is much higher.
Example:Set the mds_cache_memory_limit
to 2000000000 bytes
ceph_conf_overrides: osd: mds_cache_memory_limit=2000000000
For a large Red Hat Ceph Storage cluster with a metadata-intensive workload, do not put an MDS server on the same node as other memory-intensive services, doing so gives you the option to allocate more memory to MDS, for example, sizes greater than 100 GB.
Additional Resources