zoukankan      html  css  js  c++  java
  • 【Linux】MGR部署脚本

    脚本没有完善,现在只有上半部分的基础环境搭建

    【准备条件】

      1.三个节点的防火墙关闭

      2.原有mysql卸载删除

           3.文件夹名字: mgr

          所有的源码包都放在mgr的文件夹下

      4.文件位置: /root/mgr

      5.软件包和脚本

        链接:https://pan.baidu.com/s/1HCpdfE9__QLUo4CFI3nlNA 密码:zoig

    脚本文件

    #!/bin/bash
    
    #basic
       for((i=1;i<4;i++));do
        echo "please enter ip $i address and $i hostname";
            read a[$i]
            echo ${a[$i]} >> /etc/hosts
            ping -c 3 $(echo ${a[$i]} | awk '{print $1}')
            if [ $? -eq 0 ];then
                    echo "network connection sucessfully !"
            else
                    echo "network connection faild ! please check hosts file or network !"
                    exit 1
            fi
       done
    #i(stall gcc gcc-c++ ncurses-devel
      yum install gcc gcc-c++ ncurses-devel -y
    
    #install cmake
      cd /root/mgr/
      tar -zxvf cmake-3.7.2.tar.gz 
      cd cmake-3.7.2
      ./configure && gmake && gmake install
    
    #install boost
      cd /root/mgr/
      tar -zxvf boost_1_59_0.tar.gz
      cp -rvf boost_1_59_0 /usr/local/boost
    
    #install msyql5.7.17
      cd /root/mgr/
      groupadd mysql
      useradd -M -s /sbin/nologin mysql -g mysql
      tar -zxvf mysql-5.7.17.tar.gz
      cd mysql-5.7.17
      cmake -DCMAKE_INSTALL_PREFIX=/data/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_BOOST=/usr/local/boost && make && make install
      mv /etc/my.cnf /etc/my.cnf.default
      cp -rvf /data/mysql/support-files/my-default.cnf /etc/my.cnf
      /data/mysql/bin/mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data 
      echo "PATH=$PATH:/data/mysql/bin" >> /etc/profile
      source /etc/profile
      cp /data/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
      chmod +x /etc/rc.d/init.d/mysqld

      uuid和mysql随机密码后面会用到

    修改密码

    好久没写了,今天看了看以前写的脚本,虽然写的不是那么优雅,但是再瞅瞅现在,感觉自己算是废了~

    MYSQL
    #!/bin/bash
    source /etc/xiandian/openrc.sh 
    source /etc/keystone/admin-openrc.sh 
    #提示用户输入要导出的数据库
    echo "Enter the name of database you want to export:"
    #读取用户输入的数据库名
    read a
    #将用户输入的数据库名和数据库中的进行比对,看是否存在该数据库
    p=$(mysql -uroot -p000000 -e "show databases;" | grep -w $a)
    #如果不存在该数据库,提醒用户该数据库不存在,请重新输入,并退出该脚本
    if [ "$p" != "$a" ] ; then
             echo " Database does not exit ! Please enther the database name !"
            exit 1
    fi
    #创建备份目录
    bk=/opt/mysql/
    #检查是否存在该目录,不存在则创建,存在则设置不可任意改变该目录
    if [ ! -d $bk ] ; then
        mkdir -p $bk
    else
        chattr -i $bk
    fi
    #将用户需要的数据库导出到指定目录,并加上时间前缀和数据库名称来命名,以sql文件保存(例:2017-05-18-keystone.sql)
    mysqldump  -uroot -p000000 $a >$bk/$(date +%F)-$a.sql
    #判断数据库是否成功导出,成功则提示用户数据库已经成功导出,不成功则提示用户数据库导出失败,并退出该脚本
    if [ $? –eq 0 ] ; then
        echo "Database $a export to $bk sucessfully !"
    else
        echo "Database $a export to $bk failed !"
        exit 1
    fi
    #cd到备份目录下
    cd $bk
    #将导出的数据库文件赋给b,为了便于上传。
    b=$(date +%F)-$a.sql
    #创建swift
    c=swift-$a
    #上传文件到指定的容器中,如果没有该容器则会自动创建容器
    swift -U admin -K 000000 upload $c $b
    #判断文件是否上传成功,上传成功则提示用户上传文件成功,反之则提示上传失败
    if [ $? –eq 0 ] ; then
        echo "Database $b upload to $c sucessfully !"
    else
            echo "Database $b upload to $c failed !"
    fi
    
    缩减版
    #!/bin/bash
    
    source /etc/xiandian/openrc.sh 
    source /etc/keystone/admin-openrc.sh 
    #创建备份目录
    bk=/opt/keystone/
    #检查是否存在该目录,不存在则创建,存在则设置不可任意改变该目录
    if [ ! -d $bk ] ; then
        mkdir -p $bk
    else
         chattr -i $bk
    fi
    #将keystone数据库导出到指定目录,并加上时间前缀和数据库名称来命名,以sql文件保存(例:2017-05-18-keystone.sql)
    mysqldump -uroot -p000000 keystone > $bk/$(date +%F).sql
    if [ 0 –eq $?]
        echo “ Database export to $bk sucessfully!else
        echo “ Database export to $bk failled!fi
    #cd到备份目录
    cd $bk
    #上传文件到keystone容器中,如果没有该容器则会自动创建容器
    swift upload keystone  $(date +%F).sql
    #判断文件是否上传成功,上传成功则提示用户上传文件成功,反之则提示上传失败
    if [ $? –eq 0 ] ; then
        echo "Database $b upload to $c sucessfully !"
    else
            echo "Database $b upload to $c failed !"
    fi
    
    
    
    
    
    Keystone 创建版
    #!/bin/bash
    source /etc/keystone/admin-openrc.sh
    source /etc/xiandian/openrc.sh
    #读取脚本后面的参数名 $0是脚本本身名字
    file=$1
    #定义数组,使用while循环将从文件中读取到的值赋给数组
    j=0
    while read line
    do
        i=1
        while :
        do
            str=` echo $line | cut -d " " -f $i `
            if [ "$str" == "$line" ];then
                arr[j]=$str
                break
            elif [ "$str" != "" ];then
                arr[j]=$str
            else
                break
            fi
            i=$(($i+1))
            j=$(($j+1))
            a=$(($j%2))
    #将数组中的用户名和密码通过if条件分开,并分别打印出来
            if [ 0 ==  $a ] ; then
              pass=$str
              echo $pass
            else
              name=$str
              echo $name
            fi
        done
    #创建用户
    openstack user create $name --password $pass --domain $DOMAIN_NAME
    #判断用户是否创建成功,成功则提示用户创建成功,失败则提示用户创建失败,并退出脚本
    if [ 0 -eq $? ] ; then
             echo " user $name create sucessfully!"
    else
             echo " user $name create failed!"
                     exit 1
    fi
    #创建租户
    openstack project create $name --domain $DOMAIN_NAME
    #判断租户是否创建成功,成功则提示用户创建成功,失败则提示用户创建失败,并退出脚本
    if [ 0 -eq $? ] ; then
             echo " project $name create sucessfully!"
    else
             echo " project $name create failed!"
                    exit 1
    fi
    #将创建的用户添加到创建的租户中并给予user权限
    openstack role add --user $name --project $name user
    #判断授权是否创建成功,成功则提示用户创建成功,失败则提示用户创建失败,并退出脚本
    if [ 0 -eq $? ] ; then
             echo " permit grant for $name sucessfully!"
    else
             echo " permit grant for $name failed!"
                     exit1
    fi
    done < $file
    
    
    
    删除版
    #!/bin/bash
    source /etc/keystone/admin-openrc.sh
    source /etc/xiandian/openrc.sh
    #读取脚本后面的参数名 $0是脚本本身名字
    file=$1
    #定义数组,使用while循环将从文件中读取到的值赋给数组
    j=0
    while read line
    do
        i=1
        while :
        do
            str=` echo $line | cut -d " " -f $i `
            if [ "$str" == "$line" ];then
                arr[j]=$str
                break
            elif [ "$str" != "" ];then
                arr[j]=$str
            else
                break
            fi
            i=$(($i+1))
            j=$(($j+1))
            a=$(($j%2))
    #将数组中的用户名和密码通过if条件分开,并分别打印出来
            if [ 0 ==  $a ] ; then
              pass=$str
              echo $pass
            else
              name=$str
              echo $name
            fi
    done
    #移除权限
    openstack role remove --user $name --project $name user
    #判断是否成功移除权限,成功则提示用户移除成功,失败则提示用户移除失败,并退出脚本
    if [ 0 -eq $? ] ; then
             echo " remove grant for $name sucessfully!"
    else
             echo " remove grant for $name failed!"
                     exit1
    fi
    #删除用户
    openstack user delete $name  --domain $DOMAIN_NAME
    #判断是否成功删除用户,成功则提示用户删除成功,失败则提示用户删除失败,并退出脚本
    if [ 0 -eq $? ] ; then
             echo " user $name delete sucessfully!"
    else
             echo " user $name delete failed!"
                     exit 1
    fi
    #删除租户
    openstack project delete $name --domain $DOMAIN_NAME
    #判断是否成功删除租户,成功则提示用户删除成功,失败则提示用户删除失败,并退出脚本
    if [ 0 -eq $? ] ; then
             echo " project $name delete sucessfully!"
    else
             echo " project $name delete failed!"
                    exit 1
    fi
    done < $file
    
    
    
    
    
    
    Swift 创建版
    #!/bin/bash
    source /etc/keystone/admin-openrc.sh
    source /etc/xiandian/openrc.sh
    #接收跟在脚本后面的两个值
    name=$1
    pass=$2
    #判断用户是否存在
    u=`openstack user list | grep -w -o $name`
    #如果用户存在,则提示用户该用户已存在,请重新输入,并退出该脚本
    if [ "$u" = "$name" ] ; then
            echo "$name already exists. Please re-enter"
            exit 1
    fi
    #创建用户
    openstack user create $name --password $pass --domain $DOMAIN_NAME
    #判断用户是否创建成功,成功则提示用户创建成功,失败则提示用户创建失败,并退出脚本
    if [ 0 -eq $? ] ; then
            echo "$name  create sucessfully!"
    else
            echo "$name  create failure!!!"
            exit 1
    fi
    #将创建的用户添加到admin项目中并授予admin角色的权限
    openstack role add --user $name --project admin admin
    #判断授权是否成功,成功则提示用户授权成功,失败则提示用户授权失败,并退出脚本
    if [ 0 -eq $? ] ; then
            echo "$name privilege grant sucessfully!"
    else
            echo "$name  privilege grant failed!!!"
            exit 1
    fi
    #检测主机的真实IP地址
    ip=`ifconfig eth0 |grep -w 'inet' | awk '{print $2}'`
    #如果有IP地址则输出IP地址没有则提示没有获取到IP并退出脚本
    if [ 0 -eq $? ] ; then
            echo "swift controller ip $ip"
    else
            echo "No geting IP!"
    fi
    #创建swift的容器
    swift -A http://$ip:35357/v3 --os-username $name --os-user-domain-name $DOMAIN_NAME --os-project-name admin --os-project-domain-name $DOMAIN_NAME --os-password $pass post $name
    #判断容器是否创建成功,成功则提示用户创建成功,失败则提示用户创建失败,并退出脚本
    if [ 0 -eq $? ] ; then
         echo "swift  create sucessfully!"
    else
         echo "swift  create failure!!!"
         exit 1
    fi
    #上传文件到创建好的容器上,如果要上传一个目录,可直接输入目录名,也可将目录的路径给某一个值,利用此值来传递(a=/root/keystone  $a来代替)
    swift -A http://$ip:35357/v3 --os-username $name --os-user-domain-name $DOMAIN_NAME --os-project-name admin --os-project-domain-name $DOMAIN_NAME --os-password $pass upload $name 1.sh
    #判断上传是否成功,成功则提示用户上传成功,失败则提示用户上传失败,并退出脚本
    if [ 0 -eq $? ] ; then
             echo "swift  upload  sucessfully!"
    else
             echo "swift  upload failure!!!"
             exit 1
    fi
    #显示该账户创建的容器列表
    swift -A http://$ip:35357/v3 --os-username $name --os-user-domain-name $DOMAIN_NAME --os-project-name admin --os-project-domain-name $DOMAIN_NAME --os-password $pass list
    #显示该容器中的文件列表
    swift -A http://$ip:35357/v3 --os-username $name --os-user-domain-name $DOMAIN_NAME --os-project-name admin --os-project-domain-name $DOMAIN_NAME --os-password $pass list $name
    
    
    
    
    删除版
    #!/bin/bash
    source /etc/keystone/admin-openrc.sh
    source /etc/xiandian/openrc.sh
    #接收跟在脚本后面的两个值
    name=$1
    pass=$2
    #检测主机的真实IP地址
    ip=`ifconfig eth0 |grep -w 'inet' | awk '{print $2}'`
    #如果有IP地址则输出IP地址没有则提示没有获取到IP并退出脚本
    if [ 0 -eq $? ] ; then
            echo "swift controller ip $ip"
    else
            echo "No geting IP!"
            exit 1
    fi
    #显示该账户创建的容器列表
    swift -A http://$ip:35357/v3 --os-username $name --os-user-domain-name $DOMAIN_NAME --os-project-name admin --os-project-domain-name $DOMAIN_NAME --os-password $pass list
    #删除该账户创建的容器
    swift -A http://$ip:35357/v3 --os-username $name --os-user-domain-name $DOMAIN_NAME --os-project-name admin --os-project-domain-name $DOMAIN_NAME --os-password $pass delete $name
    #判断容器是否删除成功,成功则提示用户删除成功,失败则提示用户删除失败,并退出脚本
    if [ 0 -eq $? ] ; then
             echo "swift  delete  sucessfully!"
    else
             echo "swift  delete failure!!!"
             exit 1
    fi
    #判断用户是否存在
    u=`openstack user list | grep -w -o $name`
    #如果用户存在,则提示用户该用户存在,正在执行删除命令,不存在,则提示用户该用户不存在,请重新输入,并退出该脚本
    if [ "$u" = "$name" ] ; then
            echo "$name User presence is executing delete command."
    else
            echo "The user does not exist. Please re-enter it!"
            exit 1
    fi
    #移除用户权限
    openstack role remove --user $name --project admin admin
    #判断移除用户权限是否成功,成功则提示用户移除权限成功,失败则提示用户移除权限失败,并退出脚本
    if [ 0 -eq $? ] ; then
            echo "$name remove grant sucessfully!"
    else
            echo "$name remove grant failed!!!"
            exit 1
    fi
    #删除用户
    openstack user delete $name  --domain $DOMAIN_NAME
    #判断删除用户是否成功,成功则提示用户删除成功,失败则提示用户删除失败,并退出脚本
    if [ 0 -eq $? ] ; then
            echo "$name  delete sucessfully!"
    else
            echo "$name  delete failure!!!"
            exit 1
    fi
  • 相关阅读:
    Xcode修改新建项目注释模板(作者和公司名等)
    Xcode全局替换内容,一键Replace
    The type javax.ws.rs.core.MediaType cannot be resolved. It is indirectly referenced from required .class files
    IT公司的女流之辈
    论公司的核心竞争力
    人性
    如何使用yum 下载 一个 package ?如何使用 yum install package 但是保留 rpm 格式的 package ? 或者又 如何通过yum 中已经安装的package 导出它,即yum导出rpm?
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files.
    maven repo plugin archiver
    Error connecting to database [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)]
  • 原文地址:https://www.cnblogs.com/wangyang0210/p/9720852.html
Copyright © 2011-2022 走看看