From 3bcf210a5a9b922ea78b31ef0de8eaf97ff4dcb4 Mon Sep 17 00:00:00 2001 From: Ashish Pandey Date: Wed, 30 Jan 2019 14:24:14 +0530 Subject: rpm: add thin-arbiter package Discussion on thin arbiter volume - https://github.com/gluster/glusterfs/issues/352#issuecomment-350981148 Main idea of having this rpm package is to deploy thin-arbiter without glusterd and other commands on a node, and all we need on that tie-breaker node is to run a single glusterfs command. Also note that, no other glusterfs installation needs thin-arbiter.so. Make sure RPM contains sample vol file, which can work by default, and a script to configure that volfile, along with translator image. Change-Id: Ibace758373d8a991b6a19b2ecc60c93b2f8fc489 updates: bz#1672818 Signed-off-by: Amar Tumballi Signed-off-by: Ashish Pandey (cherry picked from commit ca9bef7f1538beb570fcb190ff94f86f0b8ba38a) --- extras/thin-arbiter/gluster-ta-volume.service | 13 -- extras/thin-arbiter/setup-thin-arbiter.sh | 197 ++++++++++++++++++++------ 2 files changed, 156 insertions(+), 54 deletions(-) delete mode 100644 extras/thin-arbiter/gluster-ta-volume.service (limited to 'extras/thin-arbiter') diff --git a/extras/thin-arbiter/gluster-ta-volume.service b/extras/thin-arbiter/gluster-ta-volume.service deleted file mode 100644 index 19be1757555..00000000000 --- a/extras/thin-arbiter/gluster-ta-volume.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description = Thin-arbiter process to maintain quorum for replica volume -After = network.target - -[Service] -Environment = "LOG_LEVEL=WARNING" -ExecStart = /usr/local/sbin/glusterfsd -N --volfile-id ta-vol -f /var/lib/glusterd/thin-arbiter/thin-arbiter.vol --brick-port 24007 --xlator-option ta-vol-server.transport.socket.listen-port=24007 -Restart = always -KillMode=process -SuccessExitStatus=15 - -[Install] -WantedBy = multi-user.target diff --git a/extras/thin-arbiter/setup-thin-arbiter.sh b/extras/thin-arbiter/setup-thin-arbiter.sh index 32fe7fc0cdd..1c77cf07c57 100755 --- a/extras/thin-arbiter/setup-thin-arbiter.sh +++ b/extras/thin-arbiter/setup-thin-arbiter.sh @@ -1,17 +1,61 @@ -#! /bin/bash +#!/bin/bash +# Copyright (c) 2018-2019 Red Hat, Inc. +# This file is part of GlusterFS. +# +# This file is licensed to you under your choice of the GNU Lesser +# General Public License, version 3 or any later version (LGPLv3 or +# later), or the GNU General Public License, version 2 (GPLv2), in all +# cases as published by the Free Software Foundation. + + +# This tool has been developed to setup thin-arbiter process on a node. +# Seting up a thin arbiter process involves following files - +# 1 - thin-arbiter.vol +# Thin-arbiter (TA) process will use the graph in this file to load the +# required translators. +# 2 - gluster-ta-volume.service (generated by gluster-ta-volume.service.in) +# TA process would be running as systemd service. +# +# TA process uses a location to save TA id files for every subvolume. +# This location can be taken as input from user. Once provided and the +# TA process is started on a node, it can not be changed using this +# script or by any other mean. The same location should be used in +# the gluster CLI when creating thin-arbiter volumes. + volloc="/var/lib/glusterd/thin-arbiter" mkdir -p $volloc -cp -f extras/thin-arbiter/thin-arbiter.vol $volloc/thin-arbiter.vol +if [ -f /etc/glusterfs/thin-arbiter.vol ]; then + volfile=/etc/glusterfs/thin-arbiter.vol +else + volfile=extras/thin-arbiter/thin-arbiter.vol +fi + tafile="$volloc/thin-arbiter.vol" + +help () { + echo " " + echo ' This tool helps to setup thin-arbiter (TA) process on a node. + TA process uses a location to save TA id files for every subvolume. + This location can be taken as input from user. Once provided and the + TA process is started on a node, it can not be changed using this script + or by any other mean. The same location should be used in gluster CLI + when creating thin-arbiter volumes. + + usage: setup-thin-arbiter.sh [-s] [-h] + options: + -s - Setup thin-arbiter file path and start process + -h - Show this help message and exit +' +} + volfile_set_brick_path () { while read -r line do dir=`echo "$line" | cut -d' ' -f 2` - if [ "$dir" = "directory" ] - then + if [ "$dir" = "directory" ]; then bpath=`echo "$line" | cut -d' ' -f 3` sed -i -- 's?'$bpath'?'$1'?g' $tafile return @@ -19,50 +63,121 @@ volfile_set_brick_path () { done < $tafile } -tapath="/mnt/thin-arbiter" -echo "Volume file to be used to start thin-arbiter process is :" -echo "$tafile" -echo " " -echo "Default thin-arbiter path is : $tapath" -echo -n "Do you want to change path for thin arbiter volumes. (y/N): " -echo " " -read moveon - -if [ "${moveon}" = 'N' ] || [ "${moveon}" = 'n' ]; then - echo "Default brick path, $tapath, has been set" - echo "for all thin arbiter volumes using this node" +check_ta_proc () { + pro=`ps aux | grep thin-arbiter.vol | grep "volfile-id"` + if [ "${pro}" = '' ]; then + echo "" + else + curr_loc=`cat $volloc/thin-arbiter.vol | grep option | grep directory` + loc=`echo "${curr_loc##* }"` + echo "******************************************************" + echo "Error:" + echo "Thin-arbiter process is running with thin-arbiter path = $loc" + echo "Can not change TA path on this host now." + echo "$pro" + echo "******************************************************" + exit 1 + fi +} + +getpath () { + check_ta_proc + echo "******************************************************" + echo "User will be required to enter a path/folder for arbiter volume." + echo "Please note that this path will be used for ALL VOLUMES using this" + echo "node to host thin-arbiter. After setting, if a volume" + echo "has been created using this host and path then path for" + echo "thin-arbiter can not be changed " + echo "******************************************************" echo " " -else - echo -n "Enter brick path for thin arbiter volumes: " - read tapath - echo "Entered brick path : $tapath " - echo "Please note that this brick path will be used for ALL" - echo "VOLUMES using this node to host thin-arbiter brick" + while true; + do + echo -n "Enter brick path for thin arbiter volumes: " + echo " " + read tapath + if [ "${tapath}" = '' ]; then + echo "Please enter valid path" + continue + else + echo "Entered brick path : $tapath " + echo "Please note that this brick path will be used for ALL" + echo "VOLUMES using this node to host thin-arbiter brick" + echo -n "Want to continue? (y/N): " + echo " " + read cont + + if [ "${cont}" = 'N' ] || [ "${cont}" = 'n' ]; then + exit 0 + else + break + fi + fi + done +} + +setup () { + getpath + mkdir -p $tapath/.glusterfs/indices + if [ -d $tapath/.glusterfs/indices ]; then + echo " " + else + echo "Could not create $tapath/.glusterfs/indices directory, check provided ta path." + exit 1 + fi + + cp -f --backup --suffix=_old $volfile $volloc/thin-arbiter.vol + volfile_set_brick_path "$tapath" + + echo "Directory path to be used for thin-arbiter volume is: $tapath" echo " " -fi + echo "========================================================" -mkdir -p $tapath/.glusterfs/indices -volfile_set_brick_path "$tapath" + if [ -f /usr/lib/systemd/system/gluster-ta-volume.service ]; then + echo "Starting thin-arbiter process" + else + cp ../systemd/gluster-ta-volume.service /etc/systemd/system/ + echo "Starting thin-arbiter process" + chmod 0644 /etc/systemd/system/gluster-ta-volume.service + fi -echo "Directory path to be used for thin-arbiter volume is: $tapath" -echo " " + systemctl daemon-reload + systemctl enable gluster-ta-volume + systemctl stop gluster-ta-volume + systemctl start gluster-ta-volume -echo "========================================================" + if [ $? == 0 ]; then + echo "thin-arbiter process has been setup and running" + else + echo "Failed to setup thin arbiter" + exit 1 + fi -echo "Installing and starting service for thin-arbiter process" +} -cp extras/thin-arbiter/gluster-ta-volume.service /etc/systemd/system/ +main() +{ -chmod 0777 /etc/systemd/system/gluster-ta-volume.service + if [ "$#" -ne 1 ]; then + help + exit 0 + fi -systemctl daemon-reload -systemctl enable gluster-ta-volume -systemctl stop gluster-ta-volume -systemctl start gluster-ta-volume + while getopts "sh" opt; do + case $opt in + h) + help + exit 0 + ;; + s) + setup + exit 0 + ;; + *) + help + exit 0 + ;; + esac + done +} -if [ $? == 0 ] -then - echo "thin-arbiter process is setup and running" -else - echo "Failed to setup thin arbiter" -fi +main "$@" -- cgit