#!/bin/bash
#AUTHOR:AN
#VERSION:1.1.0
#DATE:2019-06-19
#FUNCTION:部署GlusterFS分布式存储系统
#DESCRIPTION:单台服务器做RAID0,可以提高磁盘的读写速度,数据的安全性可以通过GlusterFS来保证
######################定义变量######################
Nfs_Dir=/cloud_nsd #NFS共享目录
Script_Path=$Nfs_Dir/shell #脚本路径
Ftp_Server=192.168.1.200 #FTP服务器
####################IP地址---主机名###################
node1=192.168.1.210
node2=192.168.1.211
node3=192.168.1.212
docker1=192.168.1.21
#加载函数库
if [ -f "$Script_Path/myfunction.lib" ];then
source $Script_Path/myfunction.lib
else
echo -e "\033[31m函数库不存在\033[0m"
exit 68
fi
##############################################################
#GlusterFS的rpm包放入自建YUM仓库
YUM_CONF(){
local Yum_Conf=/etc/yum.repos.d/local.repo
[ ! -f $Yum_Conf ] && touch $Yum_Conf || > $Yum_Conf
cat >> $Yum_Conf << EOF
[local_repo]
name=CentOS-\$releasever - Base
baseurl="ftp://$Ftp_Server/centos-1804"
enabled=1
gpgcheck=1
[myrepo]
name=myrepo
baseurl="ftp://$Ftp_Server/myrepo"
enabled=1
gpgcheck=0
EOF
yum clean all && yum repolist
}
#主机名解析
HOSTS(){
cat >> /etc/hosts << EOF
$node1 node1
$node2 node2
$node3 node3
$docker1 docker1
EOF
}
##############################################################
#创建RAID0
CREATE_RAID0(){
mdadm -C /dev/md0 -l 0 -n $1 $2 $3 $4
mdadm --detail /dev/md0 &>/dev/null && OK RAID0
}
#创建逻辑卷
Volume_Name=myvg
CREATE_LV(){
vgcreate $Volume_Name /dev/md0
for i in `seq $1`
do
lvcreate -n ${HOSTNAME}-brick$i -L $2 myvg
mkfs.xfs -i size=512 /dev/myvg/${HOSTNAME}-brick$i
mkdir -p /bricks/brick-$i
echo "/dev/myvg/${HOSTNAME}-brick$i /bricks/brick-$i xfs defaults 0 0" >> /etc/fstab
done
mount -a && cecho 36 "逻辑卷创建成功" || cecho 31 "逻辑卷创建失败"
for i in `seq $1`
do
mkdir /bricks/brick-$i/brick
done
}
#配置YUM源,设置主机名解析,安装软件
INIT(){
YUM_CONF
HOSTS
YUM glusterfs-server
STR_SVC glusterd
CA_SERVICE glusterd
}
#创建信任池
CREATE_POOL(){
gluster peer probe $1
}
#创建共享卷()
CREATE_SHARE(){
gluster volume create docker_data replica 3 \
node1:/bricks/brick-3/brick \
node2:/bricks/brick-3/brick \
node3:/bricks/brick-3/brick \
node1:/bricks/brick-4/brick \
node2:/bricks/brick-4/brick \
node3:/bricks/brick-4/brick
gluster volume start docker_data
gluster volume info docker_data &>/dev/null && OK docker_data && exit 0
ERROR docker_data && exit $ISERROR
}
##############################################################
#客户端挂载使用
CLIENT(){
HOSTS
YUM glusterfs-fuse
# mount -t glusterfs 192.168.1.210:/docker_data /docker_data
echo "192.168.1.210:/docker_data /docker_data glusterfs _netdev 0 0" >>/etc/fstab
mount -a
}
#帮助信息
HELP(){
cat << EOF
GlusterFS.sh version 1.1.0
Usage: GlusterFS [-h] [-raid0 磁盘数量 磁盘名1 磁盘名2......] [-lv num 逻辑卷数量 size 逻辑卷大小]
[-init] [-pool 节点1 节点2] [-volume]
=======================================================================
optional arguments:
-h 提供帮助信息
#所有节点都需要操作
-raid0 创建RAID0
-lv 创建逻辑卷
-init 配置YUM源,主机名解析,安装glusterd
#只需要在一个节点上操作
-pool 将节点加入信任池
-volume 创建共享卷
EXAMPLE:
bash GlusterFS.sh -raid0 3 /dev/vdb /dev/vdc /dev/vdd
bash GlusterFS.sh -lv num 4 size 25G
bash GlusterFS.sh -pool node2 node3
EOF
}
#############################主程序#############################
[ $# -eq 0 ] && HELP
case $1 in
-h)
HELP;;
-raid0)
Disk_Num=$2
if [ $# -ne "$[Disk_Num+2]" ];then
cecho 31 "Invalid option:bash `basename $0` [-h]"
else
CREATE_RAID0 $2 $3 $4 $5
fi;;
-lv)
[ -n $3 -a -n $5 ] && CREATE_LV $3 $5 || cecho 31 "Invalid option:bash `basename $0` [-h]";;
-init)
INIT;;
-pool)
for i in $@;do
if [ "$i" == "-pool" ];then
continue
else
CREATE_POOL $i
fi
done;;
-volume)
CREATE_SHARE;;
*)
cecho 31 "Invalid option:bash `basename $0` [-h]"
esac
shell脚本部署GlusterFS分布式存储系统
最新推荐文章于 2021-08-26 15:52:32 发布