New upstream version 8.1.0
This commit is contained in:
26
storage/build/Makefile
Normal file
26
storage/build/Makefile
Normal file
@@ -0,0 +1,26 @@
|
||||
include ../../build/Makefile
|
||||
|
||||
main := ../source/program/Main.cpp
|
||||
sources := $(filter-out $(main), $(shell find ../source -iname '*.cpp'))
|
||||
|
||||
$(call build-static-library,\
|
||||
Storage,\
|
||||
$(sources),\
|
||||
common dl blkid uuid nl3-route,\
|
||||
../source)
|
||||
|
||||
$(call define-dep-lib,\
|
||||
Storage,\
|
||||
-I ../source,\
|
||||
$(build_dir)/libStorage.a)
|
||||
|
||||
$(call build-executable,\
|
||||
beegfs-storage,\
|
||||
$(main),\
|
||||
Storage common dl blkid uuid nl3-route)
|
||||
|
||||
$(call build-test,\
|
||||
test-runner,\
|
||||
$(shell find ../tests -name '*.cpp'),\
|
||||
Storage common dl blkid uuid nl3-route,\
|
||||
../tests)
|
||||
543
storage/build/dist/etc/beegfs-storage.conf
vendored
Normal file
543
storage/build/dist/etc/beegfs-storage.conf
vendored
Normal file
@@ -0,0 +1,543 @@
|
||||
# This is a config file for BeeGFS storage nodes.
|
||||
# http://www.beegfs.com
|
||||
|
||||
|
||||
# --- [Table of Contents] ---
|
||||
#
|
||||
# 1) Settings
|
||||
# 2) Command Line Arguments
|
||||
# 3) Basic Settings Documentation
|
||||
# 4) Advanced Settings Documentation
|
||||
|
||||
|
||||
#
|
||||
# --- Section 1.1: [Basic Settings] ---
|
||||
#
|
||||
|
||||
sysMgmtdHost =
|
||||
|
||||
storeStorageDirectory =
|
||||
storeAllowFirstRunInit = true
|
||||
storeFsUUID =
|
||||
|
||||
|
||||
#
|
||||
# --- Section 1.2: [Advanced Settings] ---
|
||||
#
|
||||
|
||||
connAuthFile = /etc/beegfs/conn.auth
|
||||
connDisableAuthentication = false
|
||||
connBacklogTCP = 128
|
||||
connInterfacesFile =
|
||||
connMaxInternodeNum = 12
|
||||
|
||||
connMgmtdPort = 8008
|
||||
connStoragePort = 8003
|
||||
connPortShift = 0
|
||||
|
||||
connNetFilterFile =
|
||||
|
||||
connUseRDMA = true
|
||||
connRDMATypeOfService = 0
|
||||
connTcpOnlyFilterFile =
|
||||
|
||||
logType = syslog
|
||||
logLevel = 3
|
||||
logNoDate = false
|
||||
logNumLines = 50000
|
||||
logNumRotatedFiles = 5
|
||||
logStdFile = /var/log/beegfs-storage.log
|
||||
|
||||
runDaemonized = true
|
||||
|
||||
sysResyncSafetyThresholdMins = 10
|
||||
sysTargetOfflineTimeoutSecs = 180
|
||||
|
||||
tuneBindToNumaZone =
|
||||
tuneFileReadAheadSize = 0m
|
||||
tuneFileReadAheadTriggerSize = 4m
|
||||
tuneFileReadSize = 128k
|
||||
tuneFileWriteSize = 128k
|
||||
tuneFileWriteSyncSize = 0m
|
||||
|
||||
tuneNumResyncGatherSlaves = 6
|
||||
tuneNumResyncSlaves = 12
|
||||
tuneNumStreamListeners = 1
|
||||
tuneNumWorkers = 12
|
||||
tuneUseAggressiveStreamPoll = false
|
||||
tuneUsePerTargetWorkers = true
|
||||
tuneUsePerUserMsgQueues = false
|
||||
tuneWorkerBufSize = 4m
|
||||
|
||||
|
||||
#
|
||||
# --- Section 2: [Command Line Arguments] ---
|
||||
#
|
||||
|
||||
# Use the command line argument "cfgFile=/etc/anotherconfig.conf" to
|
||||
# specify a different config file for beegfs_storage.
|
||||
#
|
||||
# All other options in this file can also be used as command line
|
||||
# arguments, overriding the corresponding config file values.
|
||||
|
||||
|
||||
#
|
||||
# --- Section 3: [Basic Settings Documentation] ---
|
||||
#
|
||||
|
||||
# [sysMgmtdHost]
|
||||
# Hostname (or IP) of the host running the management service.
|
||||
# (See also "connMgmtdPort")
|
||||
# Default: <none>
|
||||
|
||||
# [storeStorageDirectory]
|
||||
# The absoute path to a storage target. A storage target is a directory where
|
||||
# the file system can store raw user file contents. Multiple targets can be
|
||||
# specified as a comma-separated list.
|
||||
# Example: /mnt/beegfs_storage1,/mnt/beegfs_storage2
|
||||
# Default: <none>
|
||||
|
||||
# [storeAllowFirstRunInit]
|
||||
# Enables or disables daemon startup with an uninitialized storage directory.
|
||||
# This can be used to make sure that the daemon does not run when the storage
|
||||
# partition is not mounted (e.g. because it needs repair after a power outage).
|
||||
# Note: This setting must be enabled during first startup of the daemon, but
|
||||
# may be disabled afterwards.
|
||||
# Default: true
|
||||
|
||||
# [storeFsUUID]
|
||||
# Requires the underlying file systems of the storage targets to have the same
|
||||
# UUID as set here. This prevents the storage node from accidentaly starting targets
|
||||
# from a wrong device, e.g. when it is not properly mounted. To find the UUID to
|
||||
# put here, you can, for example, use blkid:
|
||||
#
|
||||
# blkid -s UUID
|
||||
#
|
||||
# This will output all devices on the host with their file systems UUID (if there
|
||||
# is one). Choose the correct ones and list them here. This command needs to be run
|
||||
# as root.
|
||||
#
|
||||
# The UUIDs need to be listed the same way and order as the storage targets paths
|
||||
# provided with the storeStorageDirectory setting above as they are checked against
|
||||
# the paths in that order.
|
||||
#
|
||||
# If left empty, the check is skipped. It is highly recommended to enable this check
|
||||
# after installation to prevent data corruption.
|
||||
# Default: <none>
|
||||
#
|
||||
|
||||
#
|
||||
# --- Section 4: [Advanced Settings Documentation] ---
|
||||
#
|
||||
|
||||
#
|
||||
# --- Section 4.1: [Connections & Communication] ---
|
||||
#
|
||||
|
||||
# [connAuthFile]
|
||||
# The path to a file that contains a shared secret for connection based
|
||||
# authentication. Only peers that use the same shared secret will be able to
|
||||
# connect.
|
||||
# Default: <none>
|
||||
|
||||
# [connDisableAuthentication]
|
||||
# If set to true, explicitly disables connection authentication and allow the
|
||||
# service to run without a connAuthFile. Running BeeGFS without connection
|
||||
# authentication is considered insecure and is not recommended.
|
||||
# Default: false
|
||||
|
||||
# [connBacklogTCP]
|
||||
# The TCP listen backlog.
|
||||
# Default: 128
|
||||
|
||||
# [connInterfacesFile]
|
||||
# The path to a text file that specifies the names of the interfaces which
|
||||
# may be used for communication. One interface per line. The line number also
|
||||
# defines the priority of the interface.
|
||||
# Example: "ib0" in the first line, "eth0" in the second line.
|
||||
# Values: This setting is optional. If unspecified, all available interfaces
|
||||
# will be used and priorities will be assigned automatically.
|
||||
# Note: This information is sent to other hosts to inform them about possible
|
||||
# communication paths. See connRestrictOutboundInterfaces for this
|
||||
# configuration's potential effect on outbound connections.
|
||||
# Default: <none>
|
||||
|
||||
# [connInterfacesList]
|
||||
# Comma-separated list of interface names. Performs the same function as
|
||||
# connInterfacesFile.
|
||||
# Default: <none>
|
||||
|
||||
# [connRestrictOutboundInterfaces]
|
||||
# The default behavior of BeeGFS is to use any available network interface
|
||||
# to establish an outbound connection to a node, according to the TCP/IP
|
||||
# configuration of the operating system. When connRestrictOutboundInterfaces
|
||||
# is set to true, the network interfaces used for outbound connections are
|
||||
# limited to the values specified by connInterfacesFile or connInterfacesList.
|
||||
# The operating system routing tables are consulted to determine which
|
||||
# interface to use for a particular node's IP address. If there is no
|
||||
# route from the configured interfaces that is suitable for a node's IP
|
||||
# addresses then the connection will fail to be established.
|
||||
# Default: false
|
||||
|
||||
# [connNoDefaultRoute]
|
||||
# When connRestrictOutboundInterfaces is true, the routing logic would use
|
||||
# the default route for a Node's IP address when no specific route for that
|
||||
# address is found in the routing tables. This can be problematic during a
|
||||
# failure situation, as the default route is not appropriate to use for a
|
||||
# subnet that is accessible from an interface that has failed.
|
||||
# connNoDefaultRoute is a comma-separated list of CIDRs that should never
|
||||
# be accessed via the default route.
|
||||
# Default: 0.0.0.0/0. This prevents the default route from ever being used.
|
||||
|
||||
# [connMaxInternodeNum]
|
||||
# The maximum number of simultaneous connections to the same node.
|
||||
# Default: 12
|
||||
|
||||
# [connMgmtdPort]
|
||||
# The UDP and TCP port of the management node.
|
||||
# Default: 8008
|
||||
|
||||
# [connStoragePort]
|
||||
# The UDP and TCP port of the storage node.
|
||||
# Default: 8003
|
||||
|
||||
# [connPortShift]
|
||||
# Shifts all following UDP and TCP ports according to the specified value.
|
||||
# Intended to make port configuration easier in case you do not want to
|
||||
# configure each port individually.
|
||||
# Default: 0
|
||||
|
||||
# [connNetFilterFile]
|
||||
# The path to a text file that specifies allowed IP subnets, which may be used
|
||||
# for outgoing communication. One subnet per line in classless notation (IP
|
||||
# address and number of significant bits).
|
||||
# Example: "192.168.10.0/24" in the first line, "192.168.20.0/24" in the second
|
||||
# line.
|
||||
# Values: This setting is optional. If unspecified, all addresses are allowed
|
||||
# for outgoing communication.
|
||||
# Default: <none>
|
||||
|
||||
# [connTCPRcvBufSize], [connUDPRcvBufSize]
|
||||
# Sets the size for TCP and UDP socket receive buffers (SO_RCVBUF). The maximum
|
||||
# allowed value is determined by sysctl net.core.rmem_max. This value is
|
||||
# ignored if it is less than the default value determined by
|
||||
# net.core.rmem_default.
|
||||
# For legacy reasons, the default value 0 indicates that the buffer size is set
|
||||
# to connRDMABufNum * connRDMABufSize.
|
||||
# -1 indicates that the buffer size should be left at the system default.
|
||||
# Default: 0
|
||||
|
||||
# [connUseRDMA]
|
||||
# Enables the use of Remote Direct Memory Access (RDMA) for Infiniband.
|
||||
# This setting only has effect if libbeegfs-ib is installed.
|
||||
# Default: true
|
||||
|
||||
# [connRDMABufNum], [connRDMABufSize]
|
||||
# Infiniband RDMA buffer settings.
|
||||
# connRDMABufSize is the maximum size of a buffer (in bytes) that will be sent
|
||||
# over the network; connRDMABufNum is the number of available buffers that can
|
||||
# be in flight for a single connection. These client settings are also applied
|
||||
# on the server side for each connection.
|
||||
# Note: RAM usage per connection is connRDMABufSize x connRDMABufNum x 2. Keep
|
||||
# resulting RAM usage (x connMaxInternodeNum x number_of_clients) on the
|
||||
# server in mind when increasing these values.
|
||||
# Note: The client needs to allocate physically contiguous pages for
|
||||
# connRDMABufSize, so this setting shouldn't be higher than a few kbytes.
|
||||
# Default: 8192, 70
|
||||
|
||||
# [connRDMATypeOfService]
|
||||
# Infiniband provides the option to set a type of service for an application.
|
||||
# This type of service can be used by your subnet manager to provide Quality of
|
||||
# Service functionality (e.g. setting different service levels).
|
||||
# In openSM the service type will be mapped to the parameter qos-class, which
|
||||
# can be handled in your QoS configuration.
|
||||
# See
|
||||
# www.openfabrics.org/downloads/OFED/ofed-1.4/OFED-1.4-docs/
|
||||
# QoS_management_in_OpenSM.txt
|
||||
# for more information on how to configure openSM for QoS.
|
||||
# This parameter sets the type of service for all outgoing connections of this
|
||||
# daemon.
|
||||
# Default: 0 (Max: 255)
|
||||
|
||||
# [connTcpOnlyFilterFile]
|
||||
# The path to a text file that specifies IP address ranges to which no RDMA
|
||||
# connection should be established. This is useful e.g. for environments where
|
||||
# all hosts support RDMA, but some hosts cannot connect via RDMA to some other
|
||||
# hosts.
|
||||
# Example: "192.168.10.0/24" in the first line, "192.168.20.0/24" in the second
|
||||
# line.
|
||||
# Values: This setting is optional.
|
||||
# Default: <none>
|
||||
|
||||
# [connMessagingTimeouts]
|
||||
# These constants are used to set some of the connection timeouts for sending
|
||||
# and receiving data between services in the cluster. They used to be hard-coded
|
||||
# (CONN_LONG_TIMEOUT, CONN_MEDIUM_TIMEOUT and CONN_SHORT_TIMEOUT) but are now
|
||||
# made configurable for experimentation purposes.
|
||||
# This option takes three integer values of milliseconds, separated by a comma
|
||||
# in the order long, medium, short.
|
||||
# WARNING: This is an EXPERIMENTAL configuration option that should not be
|
||||
# changed in production environments unless properly tested and validated.
|
||||
# Some configurations can lead to service lockups and other subtle issues.
|
||||
# Please make sure that you know exactly what you are doing and properly
|
||||
# test any changes you make.
|
||||
# Default: 600000,90000,30000
|
||||
|
||||
# [connRDMATimeouts]
|
||||
# These constants are used to set some of the timeouts for sending and receiving
|
||||
# data between services in the cluster via RDMA. They used to be
|
||||
# hard-coded IBVSOCKET_CONN_TIMEOUT_MS, IBVSOCKET_FLOWCONTROL_ONSEND_TIMEOUT_MS
|
||||
# and a 10000 literal for poll timeout but are now made configurable for
|
||||
# experimentation purposes.
|
||||
# This option takes three integer values of milliseconds, separated by a comma
|
||||
# in the order connectMS, flowSendMS and pollMS.
|
||||
# WARNING: This is an EXPERIMENTAL configuration option that should not be
|
||||
# changed in production environments unless properly tested and validated.
|
||||
# Some configurations can lead to service lockups and other subtle issues.
|
||||
# Please make sure that you know exactly what you are doing and properly
|
||||
# test any changes you make.
|
||||
# Default: 3000,180000,7500
|
||||
|
||||
# [connFallbackExpirationSecs]
|
||||
# The time in seconds after which a connection to a fallback interface expires.
|
||||
# When a fallback connection expires, the system will try to establish a new
|
||||
# connection to the other hosts primary interface (falling back to another
|
||||
# interface again if necessary).
|
||||
# Note: The priority of node interfaces can be configured using the
|
||||
# "connInterfacesFile" parameter.
|
||||
# Default: 900
|
||||
|
||||
|
||||
#
|
||||
# --- Section 4.2: [Logging] ---
|
||||
#
|
||||
|
||||
# [logType]
|
||||
# Defines the logger type. This can either be "syslog" to send log messages to
|
||||
# the general system logger or "logfile". If set to logfile logs will be written
|
||||
# to logStdFile.
|
||||
# Default: logfile
|
||||
|
||||
# [logLevel]
|
||||
# Defines the amount of output messages. The higher this level, the more
|
||||
# detailed the log messages will be.
|
||||
# Note: Levels above 3 might decrease performance.
|
||||
# Default: 3 (Max: 5)
|
||||
|
||||
# [logNoDate]
|
||||
# Defines whether "date & time" (=false) or the current "time only" (=true)
|
||||
# should be logged.
|
||||
# Default: false
|
||||
|
||||
# [logNumLines]
|
||||
# The maximum number of lines per log file.
|
||||
# Default: 50000
|
||||
|
||||
# [logNumRotatedFiles]
|
||||
# The number of old files to keep when "logNumLines" is reached and the log file
|
||||
# is rewritten (log rotation).
|
||||
# Default: 5
|
||||
|
||||
# [logStdFile]
|
||||
# The path and filename of the log file for standard log messages.
|
||||
# The parameter will be considered only if logType value is not equal to syslog.
|
||||
# If no name is specified, the messages will be written to the console.
|
||||
# Default: /var/log/beegfs_storage.log
|
||||
|
||||
|
||||
#
|
||||
# --- Section 4.4: [Startup] ---
|
||||
#
|
||||
|
||||
# [runDaemonized]
|
||||
# Detach the process from its parent (and from stdin/-out/-err).
|
||||
# Default: true
|
||||
|
||||
|
||||
#
|
||||
# --- Section 4.5: [System Settings] ---
|
||||
#
|
||||
|
||||
# [sysResyncSafetyThresholdMins]
|
||||
# Automatic mirror resyncs use the last successful communication time between
|
||||
# two mirror buddies to skip verification of files that were not recently
|
||||
# modified before a server went offline. As BeeGFS uses server-side write
|
||||
# caching (where the cache is flushed to disk every minute by the Linux kernel),
|
||||
# it is possible that a server looses its write cache in case of a crash, which
|
||||
# contained data before the last successful communication. This value adds an
|
||||
# extra amount of time to the last successful communication timestamp to include
|
||||
# the time window of a potential cache loss.
|
||||
# The value may be 0 (which doesn't mean there is no threshold) to completely
|
||||
# disable the use of the last successful communication timestamp,
|
||||
# i.e. that a full resync will be done.
|
||||
# Values: time in minutes
|
||||
# Default: 10
|
||||
|
||||
# [sysTargetOfflineTimeoutSecs]
|
||||
# Timeout until targets on a storage server are considered offline by the
|
||||
# management node when no target state updates can be fetched from that server.
|
||||
# Note: This must be the same value as in the /etc/beegfs/beegfs-mgmtd.conf on
|
||||
# the management node.
|
||||
# Values: time in seconds
|
||||
# Default: 180
|
||||
|
||||
|
||||
#
|
||||
# --- Section 4.6: [Tuning] ---
|
||||
#
|
||||
|
||||
# [tuneBindToNumaZone]
|
||||
# Defines the zero-based NUMA zone number to which all threads of this process
|
||||
# should be bound. If unset, all available CPU cores may be used.
|
||||
# Zone binding is especially useful if the corresponding devices (e.g. storage
|
||||
# controller and network card) are also attached to the same zone.
|
||||
# Note: The Linux kernel shows NUMA zones at /sys/devices/system/node/nodeXY
|
||||
# Default: <unset>
|
||||
|
||||
# [tuneFileReadAheadSize], [tuneFileReadAheadTriggerSize]
|
||||
# tuneFileReadAheadSize is the byte range submitted to the kernel for read-head
|
||||
# after at least tuneFileReadAheadTriggerSize file bytes were read sequentially
|
||||
# from a target.
|
||||
# Values: A typical setting is tuneFileReadAheadSize=2m. The optimal setting
|
||||
# depends on your storage system configuration (e.g. your RAID layout).
|
||||
# Default: tuneFileReadAheadSize=0, tuneFileReadAheadTriggerSize=4m
|
||||
|
||||
# [tuneFileReadSize], [tuneFileWriteSize]
|
||||
# The maximum amount of data that the server should write to (or read from)
|
||||
# the underlying local file system in a single operation.
|
||||
# Note: Setting these values higher than the file chunk size or
|
||||
# tuneWorkerBufSize has no effect.
|
||||
# Default: tuneFileReadSize=128k, tuneFileWriteSize=128k
|
||||
|
||||
# [tuneFileWriteSyncSize]
|
||||
# The number of sequentially written bytes (per file) after which the kernel
|
||||
# will be advised to commit the written data to the underlying storage device.
|
||||
# This is intended to avoid delays until the kernel notices that it is time to
|
||||
# commit written data, which would reduce streaming write throughput.
|
||||
# Note: When this setting is enabled, it is important to use the deadline
|
||||
# scheduler (/sys/block/<...>/scheduler) to avoid reader starvation. It is
|
||||
# also important to use a large request queue (/sys/block/<...>/nr_requests),
|
||||
# as writes can only be asynchronous while there are free slots in the queue.
|
||||
# Values: "0" disables this mechanism. Use "32m" (or a close even multiple of
|
||||
# your RAID stripe set size) to test the effects of this.
|
||||
# Default: 0
|
||||
|
||||
# [tuneNumResyncGatherSlaves]
|
||||
# The number of threads (per target) used to gather file system information for
|
||||
# a buddy mirror resync.
|
||||
# Default: 6
|
||||
|
||||
# [tuneNumResyncSlaves]
|
||||
# The number of threads (per target) used to perform the actual file and
|
||||
# directory synchronizations for a buddy mirror resync.
|
||||
# Default: 12
|
||||
|
||||
# [tuneNumStreamListeners]
|
||||
# The number of threads waiting for incoming data events. Connections with
|
||||
# incoming data will be handed over to the worker threads for actual message
|
||||
# processing.
|
||||
# Default: 1
|
||||
|
||||
# [tuneNumWorkers]
|
||||
# The number of worker threads. Higher number of workers allows the server to
|
||||
# handle more client requests in parallel, which also results in more
|
||||
# concurrent access to the underlying storage device.
|
||||
# Note: See also tuneUsePerTargetWorkers.
|
||||
# Default: 12
|
||||
|
||||
# [tuneUseAggressiveStreamPoll]
|
||||
# If set to true, the StreamListener component, which waits for incoming
|
||||
# requests, will keep actively polling for events instead of sleeping until
|
||||
# an event occurs. Active polling will reduce latency for processing of
|
||||
# incoming requests at the cost of higher CPU usage.
|
||||
# Default: false
|
||||
|
||||
# [tuneUsePerTargetWorkers]
|
||||
# If set to true, a separate set of worker threads is created and exclusively
|
||||
# assigned to each attached storage target. If set to false, a global set of
|
||||
# worker threads is used and each worker thread can handle requests for all
|
||||
# targets.
|
||||
# Separate worker threads are intended to improve balance of I/O workload
|
||||
# across targets under high load (i.e. when the number of concurrently incoming
|
||||
# requests is higher than the number of worker threads).
|
||||
# Note: If set to true, the actual number of created worker threads is
|
||||
# tuneNumWorkers x number_of_attached_targets.
|
||||
# Default: true
|
||||
|
||||
# [tuneUsePerUserMsgQueues]
|
||||
# If set to true, per-user queues will be used to decide which of the pending
|
||||
# requests is handled by the next available worker thread. If set to false, a
|
||||
# single queue will be used and incoming requests will be processed in
|
||||
# first-come, first-served order.
|
||||
# Per-user queues are intended to improve fairness in multi-user environments.
|
||||
# Default: false
|
||||
|
||||
# [tuneWorkerBufSize]
|
||||
# The buffer size, which is allocated twice by each worker thread for IO and
|
||||
# network data buffering.
|
||||
# Note: For optimal performance, this value must be at least 1MB higher than
|
||||
# tuneFileReadSize and tuneFileWriteSize.
|
||||
# Default: 4m
|
||||
|
||||
|
||||
#
|
||||
# --- Section 4.7: [Quota settings] ---
|
||||
#
|
||||
|
||||
# [quotaEnableEnforcement]
|
||||
# Enables enforcement of user and group quota limits by periodically checking
|
||||
# if the limits are exceeded.
|
||||
# Note: This uses quota information provided by the underlying local file
|
||||
# systems of the storage targets.
|
||||
# Note: Set quota limits with "beegfs-ctl --setquota".
|
||||
# Note: If this option is true, performance might be slightly decreased due to
|
||||
# extra information tracking.
|
||||
# Note: Must be set to the same value in meta servers and mgmtd to be
|
||||
# effective.
|
||||
# Default: false
|
||||
|
||||
|
||||
#
|
||||
# --- Section 5: [Expert options] ---
|
||||
#
|
||||
|
||||
# [tuneProcessFDLimit]
|
||||
# Sets the maximum number of files the server can open. If the process rlimit
|
||||
# is already larger than this number the limit will not be decreased.
|
||||
# Default: 50000
|
||||
|
||||
# [tuneWorkerNumaAffinity]
|
||||
# Distributes worker threads equally among NUMA nodes on the system when set.
|
||||
# Default: false
|
||||
|
||||
# [tuneListenerNumaAffinity]
|
||||
# Distributes listener threads equally among NUMA nodes on the system when set.
|
||||
# Default: false
|
||||
|
||||
# [tuneListenerPrioShift]
|
||||
# Applies a niceness offset to listener threads. Negative values will decrease
|
||||
# niceness (increse priority), positive values will increase niceness (decrease
|
||||
# priority).
|
||||
# Default: -1
|
||||
|
||||
# [tuneDirCacheLimit]
|
||||
# Number of recently used chunk directory structures to keep in memory.
|
||||
# Increasing this value may reduce memory allocations.
|
||||
# Default: 1024
|
||||
|
||||
# [tuneEarlyStat]
|
||||
# Compute file size and storage block usage of a chunk before close() is set.
|
||||
# Some filesystems may report block usage greater than required to hold all
|
||||
# file data if stat() is called before close().
|
||||
# Default: false
|
||||
|
||||
# [quotaDisableZfsSupport]
|
||||
# Disable quota support for ZFS if quota is enabled.
|
||||
# ZFS quota requires the libzfs library. Errors while loading the library are
|
||||
# reported if quota is enabled and the library is not installed (or the wrong
|
||||
# version is installed)
|
||||
# Default: false
|
||||
|
||||
# [pidFile]
|
||||
# Creates a PID file for the daemon when set. Set by init scripts.
|
||||
# Default: <none>
|
||||
28
storage/build/dist/etc/default/beegfs-storage
vendored
Normal file
28
storage/build/dist/etc/default/beegfs-storage
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
# BeeGFS storage service configuration.
|
||||
|
||||
# Note: This file is only used together with sysV init scripts.
|
||||
# If your system uses systemd, this file is ignored.
|
||||
# In this case:
|
||||
#
|
||||
# - use `systemctl enable / disable` to activate / decativate a service
|
||||
#
|
||||
# - systemd service templates are used for multimode
|
||||
# (See https://www.beegfs.io/wiki/MultiMode)
|
||||
#
|
||||
#
|
||||
# Set to "NO" to disable start of the BeeGFS storage daemon via the init script.
|
||||
START_SERVICE="YES"
|
||||
|
||||
# Set to "YES" if you want to start multiple storage daemons with different
|
||||
# configuration files on this machine.
|
||||
#
|
||||
# Create a subdirectory with the ending ".d" in "/etc/beegfs/" for every config
|
||||
# file. The subdirectory name will be used to identify a particular server
|
||||
# instance for init script start/stop.
|
||||
#
|
||||
# Note: The original config file in /etc/beegfs will not be used when multi-mode
|
||||
# is enabled.
|
||||
#
|
||||
# Example: /etc/beegfs/scratch.d/beegfs-storage.conf
|
||||
# $ /etc/init.d/beegfs-storage start scratch
|
||||
MULTI_MODE="NO"
|
||||
22
storage/build/dist/etc/init.d/beegfs-storage.init
vendored
Executable file
22
storage/build/dist/etc/init.d/beegfs-storage.init
vendored
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: beegfs-storage
|
||||
# Required-Start:
|
||||
# Should-Start: $network beegfs-mgmtd openibd openib rdma opensmd opensm
|
||||
# Required-Stop:
|
||||
# Should-Stop: $network beegfs-mgmtd openibd openib rdma opensmd opensm
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# chkconfig: 35 96 8
|
||||
# Short-Description: BeeGFS Storage
|
||||
# Description: Start BeeGFS Storage Server
|
||||
### END INIT INFO
|
||||
|
||||
APP_NAME="BeeGFS Storage Server"
|
||||
SERVICE_NAME=beegfs-storage
|
||||
|
||||
# source function library
|
||||
. /etc/beegfs/lib/start-stop-functions
|
||||
. /etc/beegfs/lib/init-multi-mode
|
||||
|
||||
322
storage/build/dist/sbin/beegfs-setup-storage
vendored
Executable file
322
storage/build/dist/sbin/beegfs-setup-storage
vendored
Executable file
@@ -0,0 +1,322 @@
|
||||
#!/bin/bash
|
||||
|
||||
# License: BeeGFS EULA
|
||||
|
||||
# constant definitions
|
||||
# (for configurables see below)
|
||||
|
||||
DEFAULT_CFG_PATH="/etc/beegfs/beegfs-storage.conf"
|
||||
STORAGE_PATH_CFG_KEY="storeStorageDirectory"
|
||||
MGMTD_CFG_KEY="sysMgmtdHost"
|
||||
ALLOW_INIT_CFG_KEY="storeAllowFirstRunInit"
|
||||
FS_UUID_CFG_KEY="storeFsUUID"
|
||||
TARGET_NUMID_FILE="targetNumID"
|
||||
TARGET_STRID_FILE="targetID"
|
||||
SERVER_NUMID_FILE="nodeNumID"
|
||||
STORAGEPOOL_ID_FILE="storagePoolID"
|
||||
FORMAT_FILENAME="format.conf"
|
||||
FORMAT_FILE_VERSION="3"
|
||||
CHUNKS_DIRNAME="chunks"
|
||||
BUDDYMIRROR_DIRNAME="buddymir"
|
||||
|
||||
print_usage()
|
||||
{
|
||||
echo
|
||||
echo "DESCRIPTION: Initialize storage target directory for beegfs-storage server daemon"
|
||||
echo "and update the beegfs-storage config file."
|
||||
echo
|
||||
echo "USAGE: `basename $0` -p <target_path> [options]"
|
||||
echo
|
||||
echo " Mandatory Options:"
|
||||
echo
|
||||
echo " -p <path> - Path to storage target directory that is to be initialized."
|
||||
echo " (Path will also be added to config file.)"
|
||||
echo
|
||||
echo " Recommended Options:"
|
||||
echo
|
||||
echo " -i <num> - Assign the given numeric ID to storage target (range 1..65535)."
|
||||
echo " (Default: Randomly select a free ID.)"
|
||||
echo
|
||||
echo " -s <num> - Assign the given numeric ID to the server of this storage target"
|
||||
echo " (range 1..65535). (Default: Randomly select a free ID.)"
|
||||
echo
|
||||
echo " -m <host> - Hostname (or IP address) of management server."
|
||||
echo " (Will be stored in server config file.)"
|
||||
echo
|
||||
echo " Other Options:"
|
||||
echo
|
||||
echo " -C - Do not update server config file."
|
||||
echo
|
||||
echo " -c <path> - Path to server config file."
|
||||
echo " (Default: ${DEFAULT_CFG_PATH})"
|
||||
echo
|
||||
echo " -f - Force actions, ignore warnings."
|
||||
echo
|
||||
echo " -h - Print this help."
|
||||
echo
|
||||
echo " -P <num> - Automatically add the configured target to storage pool with the"
|
||||
echo " given ID on first start."
|
||||
echo
|
||||
echo " -r - Replace current list of target directories with the given path."
|
||||
echo " (Default: Append directory to current target list in server"
|
||||
echo " config file.)"
|
||||
echo
|
||||
echo " -u - Do not disable usage of uninitialized target directories in"
|
||||
echo " config file and do not store the UUID of the underlying fs."
|
||||
echo
|
||||
echo "NOTES:"
|
||||
echo " * All given IDs must be unique in their service class for the whole file system"
|
||||
echo " instance, i.e. there can only be one beegfs-meta service with ID 2, but there"
|
||||
echo " can also be a beegfs-storage service with ID 2 in the file system."
|
||||
echo
|
||||
echo " * BeeGFS servers can also run without pre-initializing storage directories, if"
|
||||
echo " storeAllowFirstRunInit=true is set in the server config files (which is"
|
||||
echo " usually not recommended)."
|
||||
echo
|
||||
echo "EXAMPLES:"
|
||||
echo " * Numeric IDs can generally be chosen arbitrarily. However, in the examples"
|
||||
echo " below they were chosen in a way that reflects the assignment of targets to"
|
||||
echo " their corresponding servers."
|
||||
echo
|
||||
echo " * Example 1) Initialize first target directory \"/mnt/myraid1\" of first"
|
||||
echo " storage server and set \"storage01\" as management daemon host in server"
|
||||
echo " config file:"
|
||||
echo " $ `basename $0` -p /mnt/myraid1/beegfs-storage -s 1 -i 101 -m storage01"
|
||||
echo
|
||||
echo " * Example 2) Initialize second target directory \"/mnt/myraid2\" of fourth"
|
||||
echo " storage server:"
|
||||
echo " $ `basename $0` -p /mnt/myraid2/beegfs-storage -s 4 -i 402"
|
||||
echo
|
||||
}
|
||||
|
||||
# initialize storage directory (if enabled)
|
||||
init_storage_dir()
|
||||
{
|
||||
# check if storage path is defined
|
||||
|
||||
if [ -z "${STORAGE_PATH}" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# create storage path
|
||||
|
||||
echo "Preparing storage target directory: ${STORAGE_PATH}"
|
||||
mkdir -p "${STORAGE_PATH}"
|
||||
|
||||
# make sure target dir is empty
|
||||
|
||||
if [ -z "${FORCE_ACTIONS}" ] && [ "$(ls -AI lost+found ${STORAGE_PATH} )" ]; then
|
||||
echo " * ERROR: Storage target directory is not empty. Initialization of non-empty" \
|
||||
"directories can lead to data loss or orphaned data. ('-f' disables this check.)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# create format file
|
||||
|
||||
echo " * Creating ${FORMAT_FILENAME} file..."
|
||||
|
||||
FORMAT_FILE_PATH="${STORAGE_PATH}/${FORMAT_FILENAME}"
|
||||
echo "# This file was auto-generated. Do not modify it!" >> ${FORMAT_FILE_PATH}
|
||||
echo "version=${FORMAT_FILE_VERSION}" >> ${FORMAT_FILE_PATH}
|
||||
|
||||
# create chunks dir
|
||||
|
||||
echo " * Creating ${CHUNKS_DIRNAME} directory..."
|
||||
|
||||
CHUNKS_DIR_PATH="${STORAGE_PATH}/${CHUNKS_DIRNAME}"
|
||||
mkdir -p ${CHUNKS_DIR_PATH}
|
||||
|
||||
# create mirror dir
|
||||
|
||||
echo " * Creating ${BUDDYMIRROR_DIRNAME} directory..."
|
||||
|
||||
BUDDYMIRROR_DIR_PATH="${STORAGE_PATH}/${BUDDYMIRROR_DIRNAME}"
|
||||
mkdir -p ${BUDDYMIRROR_DIR_PATH}
|
||||
|
||||
|
||||
# create ID files
|
||||
|
||||
if [ -n "${TARGET_NUMID}" ]; then
|
||||
echo " * Creating target numeric ID file: ${STORAGE_PATH}/${TARGET_NUMID_FILE}"
|
||||
echo "${TARGET_NUMID}" > "${STORAGE_PATH}/${TARGET_NUMID_FILE}"
|
||||
fi
|
||||
|
||||
if [ -n "${TARGET_STRID}" ]; then
|
||||
echo " * Creating target string ID file: ${STORAGE_PATH}/${TARGET_STRID_FILE}"
|
||||
echo "${TARGET_STRID}" > "${STORAGE_PATH}/${TARGET_STRID_FILE}"
|
||||
fi
|
||||
|
||||
if [ -n "${SERVER_NUMID}" ]; then
|
||||
echo " * Creating server numeric ID file: ${STORAGE_PATH}/${SERVER_NUMID_FILE}"
|
||||
echo "${SERVER_NUMID}" > "${STORAGE_PATH}/${SERVER_NUMID_FILE}"
|
||||
fi
|
||||
|
||||
if [ -n "${STORAGEPOOL_ID}" ]; then
|
||||
echo " * Creating storage pool ID file: ${STORAGE_PATH}/${STORAGEPOOL_ID_FILE}"
|
||||
echo "${STORAGEPOOL_ID}" > "${STORAGE_PATH}/${STORAGEPOOL_ID_FILE}"
|
||||
fi
|
||||
}
|
||||
|
||||
# update config file (if enabled)
|
||||
update_config_file()
|
||||
{
|
||||
# check if config file is defined
|
||||
|
||||
if [ -z "${CFG_PATH}" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "Updating config file: ${CFG_PATH}"
|
||||
|
||||
if [ ! -f "${CFG_PATH}" ]; then
|
||||
echo " * ERROR: Config file not found: ${CFG_PATH}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "${MGMTD_HOST}" ]; then
|
||||
echo " * Setting management host: ${MGMTD_HOST}"
|
||||
sed -i "s/\(^${MGMTD_CFG_KEY}.*=\).*/\1 ${MGMTD_HOST}/" ${CFG_PATH}
|
||||
fi
|
||||
|
||||
if [ -n "${STORAGE_PATH}" ]; then
|
||||
if [ -n "${REPLACE_TARGETS}" ]; then
|
||||
echo " * Replacing target directory list in config file..."
|
||||
sed -i "s|\(^${STORAGE_PATH_CFG_KEY}.*=\).*$|\1 ${STORAGE_PATH}|" ${CFG_PATH}
|
||||
else
|
||||
echo " * Appending to target directory list in config file..."
|
||||
|
||||
set +e
|
||||
|
||||
grep "^${STORAGE_PATH_CFG_KEY}.*=.*${STORAGE_PATH}\([, ]\|$\)" "${CFG_PATH}" >/dev/null
|
||||
|
||||
GREP_RES=$?
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$GREP_RES" -eq 0 ] && [ -z "${FORCE_ACTIONS}" ]; then
|
||||
echo " * WARNING: Skipping append. Target directory seems to be included in" \
|
||||
"current targets list already. ('-f' disables this check.)"
|
||||
APPEND_SKIPPED=1
|
||||
else
|
||||
sed -i "s|\(^${STORAGE_PATH_CFG_KEY}.*=.*$\)|\0 ,${STORAGE_PATH}|" ${CFG_PATH}
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${DISABLE_UNINITED_TARGETS}" ] && [ -n "${STORAGE_PATH}" ]; then
|
||||
echo " * Disabling usage of uninitialized storage targets in config file..."
|
||||
sed -i "s/\(^${ALLOW_INIT_CFG_KEY}.*=\).*/\1 false/" ${CFG_PATH}
|
||||
|
||||
if [ -z "${APPEND_SKIPPED}" ]; then
|
||||
echo " * Fetching the underlying device..."
|
||||
DEVICE=$(df "${STORAGE_PATH}" | tail -n1 | cut -d\ -f1)
|
||||
echo "Underlying device detected: ${DEVICE}"
|
||||
echo "Fetching UUID of the file system on that device..."
|
||||
UUID=$(blkid -s UUID ${DEVICE} | cut -d= -f2 | sed "s/\"//g")
|
||||
echo "Found UUID ${UUID}"
|
||||
echo "Appending UUID to config file..."
|
||||
sed -i "s|\(^${FS_UUID_CFG_KEY}.*=.*$\)|\0 ,${UUID}|" ${CFG_PATH}
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
################## end of function definitions ##############
|
||||
|
||||
|
||||
# configurable values and their defaults
|
||||
# (for constants see above)
|
||||
|
||||
CFG_PATH="$DEFAULT_CFG_PATH" # empty path means "don't update cfg file"
|
||||
FORCE_ACTIONS=""
|
||||
TARGET_NUMID=""
|
||||
TARGET_STRID=""
|
||||
MGMTD_HOST=""
|
||||
REPLACE_TARGETS=""
|
||||
SERVER_NUMID=""
|
||||
STORAGE_PATH=""
|
||||
STORAGEPOOL_ID=""
|
||||
DISABLE_UNINITED_TARGETS="1"
|
||||
|
||||
# parse command line arguments
|
||||
# (see print_usage() for description of parameters)
|
||||
|
||||
while getopts "Cc:fhI:i:m:p:P:rS:s:u" opt; do
|
||||
case $opt in
|
||||
C)
|
||||
CFG_PATH=""
|
||||
;;
|
||||
c)
|
||||
CFG_PATH="$OPTARG"
|
||||
;;
|
||||
f)
|
||||
FORCE_ACTIONS="1"
|
||||
;;
|
||||
h)
|
||||
print_usage
|
||||
exit 0
|
||||
;;
|
||||
I)
|
||||
TARGET_STRID="$OPTARG"
|
||||
;;
|
||||
i)
|
||||
TARGET_NUMID="$OPTARG"
|
||||
;;
|
||||
m)
|
||||
MGMTD_HOST="$OPTARG"
|
||||
;;
|
||||
p)
|
||||
STORAGE_PATH="$OPTARG"
|
||||
;;
|
||||
P)
|
||||
STORAGEPOOL_ID="$OPTARG"
|
||||
;;
|
||||
r)
|
||||
REPLACE_TARGETS="1"
|
||||
;;
|
||||
S)
|
||||
echo "WARNING: The -S flag previously used to specify a string ID been deprecated and now has no effect. Starting in BeeGFS string IDs were replaced with aliases configured using BeeGFS CTL."
|
||||
;;
|
||||
s)
|
||||
SERVER_NUMID="$OPTARG"
|
||||
;;
|
||||
u)
|
||||
DISABLE_UNINITED_TARGETS=""
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: Invalid argument" >&2
|
||||
print_usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
set -e
|
||||
|
||||
# don't do anything if no arguments are provided
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
print_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# make sure target dir is defined
|
||||
|
||||
if [ -z "${STORAGE_PATH}" ]; then
|
||||
echo "ERROR: Storage target directory is undefined." >&2
|
||||
echo
|
||||
print_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# initialize storage directory
|
||||
|
||||
init_storage_dir
|
||||
|
||||
# update config file
|
||||
|
||||
update_config_file
|
||||
|
||||
|
||||
echo "All done."
|
||||
14
storage/build/dist/usr/lib/systemd/system/beegfs-storage.service
vendored
Normal file
14
storage/build/dist/usr/lib/systemd/system/beegfs-storage.service
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=BeeGFS Storage Server
|
||||
Documentation=http://www.beegfs.com/content/documentation/
|
||||
Requires=network-online.target
|
||||
# We disable the wants service, because it spams the log files
|
||||
#Wants=beegfs-mgmtd.service openibd.service openib.service rdma.service opensmd.service opensm.service
|
||||
After=network-online.target beegfs-mgmtd.service openibd.service openib.service rdma.service opensmd.service opensm.service zfs.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/opt/beegfs/sbin/beegfs-storage cfgFile=/etc/beegfs/beegfs-storage.conf runDaemonized=false
|
||||
Type=simple
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
14
storage/build/dist/usr/lib/systemd/system/beegfs-storage@.service
vendored
Normal file
14
storage/build/dist/usr/lib/systemd/system/beegfs-storage@.service
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=BeeGFS Storage Server (multimode)
|
||||
Documentation=http://www.beegfs.com/content/documentation/
|
||||
Requires=network-online.target
|
||||
# We disable the wants service, because it spams the log files
|
||||
#Wants=beegfs-mgmtd.service openibd.service openib.service rdma.service opensmd.service opensm.service
|
||||
After=network-online.target beegfs-mgmtd.service openibd.service openib.service rdma.service opensmd.service opensm.service zfs.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/opt/beegfs/sbin/beegfs-storage cfgFile=/etc/beegfs/%I.d/beegfs-storage.conf runDaemonized=false
|
||||
Type=simple
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user