Linux自动化部署工程

树懒·闪电

忘掉那些冗繁复杂的安装部署文档吧,自动化安装脚本才是你需要的!
欢迎加入树懒·闪电计划 》》 加入码云GIT

通过编辑linux或windows脚本,自动化部署安装所需软件,并优化相关配置,实现目标:

  1. 一键安装部署服务器端生产环境,包括集群与分布式部署,并进行相关优化配置,如mysq主从,Apache和tomcat负载均衡……
  2. 一键安装个人PC开发环境, 保证统一的、标准的开发环境,包括:java web开发,java rcp开发,C#客户端开发,Android开发,iOS开发……
  3. 批量升级维护服务器软件
  4. 定制解决方案,如高性能web服务器部署:jdk + 负载均衡 + 缓存服务器 + 数据库集群 + 静态资源服务……

mysql主从安装脚本

#!/bin/bash
set -e
## 检查输入参数
if [ $# -lt 1 ]; then
    echo "$0 错误:请传入参数,(1、服务ID; 2、服务类型:master/slave)!"
    echo "例如:./$0 1 master 或 ./$0 1 master"
    exit 2
fi
## 读取配置文件
. ../config/my-config.sh

if [ ! -f "$MYSQL_FILE" ]
then
## 重新设置下载链接
    MYSQL_URL=$URL_FILE/mysql

##1.下载安装包,并上传到服务器;
    wget $MYSQL_URL/$MYSQL_FILE
fi

##2. 解压安装包到指定目录,修改文件的读写执行权限;
rm -rf $MYSQL_HOME
rm -rf $MYSQL_DATA
tar -zxvf $MYSQL_FILE -C /home

## 新增用户组和用户
#create user if not exists  
#egrep "^mysql" /etc/passwd >& /dev/null  
if !(egrep "^mysql" /etc/passwd >& /dev/null)
then  
    groupadd mysql
    useradd -g mysql mysql
fi

#改变当前目录的拥有者和用户组
chown -R mysql $MYSQL_HOME
chgrp -R mysql $MYSQL_HOME

##3. 编译源文件,并进行安装;
# 已经编译过的,解压可用

##4. 修改软件的相关配置文件,本地化或优化配置;可从support-files/my-default.cnf获取
## 向配置文件中输入基本信息
cat > /etc/my.cnf <<END
[mysqld]
basedir = $MYSQL_HOME
datadir = $MYSQL_DATA
port = $MYSQL_PORT
server_id = $1
# socket = .....

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
## 修改临时表大小,提高查询速度
tmp_table_size=300M
max_heap_table_size=500M
## 最大连接数
max_connections=768
## 表名大小写不敏感
lower_case_table_names=1

## 日志配置
log_error=$MYSQL_DATA/mysql.err
#log=$MYSQL_DATA/mysql.log
slow-query-log=on
slow-query-log-file=$MYSQL_DATA/mysql.slow
long_query_time=3
END

## 写入初始化文件
cat > init.sql <<END
CREATE USER if not exists '${dbUser1}'@'%' IDENTIFIED BY '${dbPwd1}';
GRANT All ON *.* TO '${dbUser1}'@'%';
CREATE USER if not exists '${dbUser1}'@'localhost' IDENTIFIED BY '${dbPwd1}';
GRANT All ON *.* TO '${dbUser1}'@'localhost';
flush privileges;
create database if not exists bufferdb character set = 'utf8' collate = 'utf8_general_ci';
END

## 主从选择
if [ "$2" == "master" ];then
    cat >> /etc/my.cnf <<END
## 主从配置-主库
log-bin=mysql-bin
## 日志的过期天数
expire_logs_days = 7
## 需要同步的数据库
#binlog-do-db=db1 
#binlog-do-db=db2
#binlog-do-db=db3
## 不需要同步的数据库
#binlog-ignore-db=mysql
END
    echo  "GRANT REPLICATION SLAVE ON *.* to '${mySyncUser}'@'%' identified by '${mySyncPwd}'; " >> init.sql
elif [ "$2" == "slave" ];then
    cat >> /etc/my.cnf <<END
## 主从配置-从库
log_bin = mysql-bin
expire_logs_days = 7
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1
## 需要复制的库
#replicate-do-db=db1
## 不需要复制的库
#replicate-ignore-db=mysql
END
    cat >> init.sql <<END
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='${hosts[0]}', MASTER_PORT=${MYSQL_PORT}, MASTER_USER='${mySyncUser}', MASTER_PASSWORD='${mySyncPwd}', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154, MASTER_CONNECT_RETRY=60;
START SLAVE;
END
    ## 删除从库的uuid,否则启动从服务报错 because master and slave have equal MySQL server UUIDs;
    rm -f $MYSQL_HOME/data/auto.cnf
fi

##5. 把软件注册为服务,并随系统启动;可从support-files/mysql.server获取
cp -f $MYSQL_INID /etc/init.d/$MYSQL_INID
chmod a+x /etc/init.d/$MYSQL_INID
sed -i "s#@{myhome}#$MYSQL_HOME#g" /etc/init.d/$MYSQL_INID
sed -i "s#@{mydata}#$MYSQL_DATA#g" /etc/init.d/$MYSQL_INID
chkconfig $MYSQL_INID on

##6. 修改用户环境变量,或建立软链接,方便快速调用软件命令;
ln -sf $MYSQL_HOME/bin/mysql /usr/bin

##7. 修改防火墙配置,以便外部访问;
../common/change-iptables.sh $MYSQL_PORT

##8. 设置监控日志
ln -sf $MYSQL_HOME/data/mysql.err $HOME_LOG
ln -sf $MYSQL_HOME/data/mysql.slow $HOME_LOG

## 启动定时日志清理和备份方案
#cp -f haha.cnf /home/backup/haha
#cp -f haha.cnf /home/backup/haha

## 启动数据库,并执行初始化脚本
service mysqld restart
## 无密码的
mysql -u root --auto-rehash --line-numbers --show-warnings mysql < init.sql

以上脚本保存后,只需要执行./install-mysql.sh(这里还依赖了两个通用的脚本,一个是全局环境变量配置脚本my-config.sh,一个是快速修改防火墙的脚本),即可快速安装mysql数据库。当然这个脚本还有很多不足之处,它没有定时备份计划,也没有定期删除日志计划,还需要不断去完善。
通过多个脚本组合,就可以形成一个整体解决方案,快速安装部署服务器生产环境,乃至分布式集群化!!!

hadoop-2.4.0集群安装脚本

#!/bin/bash
## 说明:Hadoop-2.4.0家族环境自动化部署安装脚本
## 作者:yaodh
## 博客:http://www.cnblogs.com/lucky110100
## 码云:http://git.oschina.net/signup?inviter=lucky110100
set -e
## 检查输入参数
if [ $# -lt 3 ]; then
    echo "$0 错误:请传入参数,(1、类型:name/node;2、机器名:name00/node01;3、机器IP)!"
    echo "例如:$0 name name00 127.0.0.1"
    exit 2
fi

echo "参数确认: 类型:$1   机器名: $2    机器IP:$3"

read -p "继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    echo '                  开始安装……'
else 
    echo '                  退出安装!!!'
    exit 2
fi

if [ ! -f 'hadoop.info'  ];then
    touch hadoop.info
fi
#写入集群信息——很重要
sed -i "/$2/d" hadoop.info
echo "$1	$2   $3" >> hadoop.info

URL_SHELL=http://172.16.11.10:9300

read -p "SSH链接慢?(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    ssh root@$3 "sed -i 's@#UseDNS yes@UseDNS no@g' /etc/ssh/sshd_config;sed -i 's@#   GSSAPIAuthentication no@GSSAPIAuthentication no@g' /etc/ssh/ssh_config;service sshd restart"
else 
    echo '                  跳过……'
fi

read -p "授权公钥……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    wget $URL_SHELL/common/auth-key.sh;chmod a+x auth-key.sh;./auth-key.sh $1 $3
else 
    echo '                  跳过……'
fi

read -p "下载脚本……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    ##下载脚本,并删除已rpm安装的软件
    ssh root@$3 "mkdir -p /home/install"
    ## 下载脚本
    #ssh root@$3 "cd /home/install;wget -N -r -nH -np -k -L -p $URL_SHELL" #层级下载有点问题
    ## 下载脚本包
    ssh root@$3 "cd /home/install;rm -f linux.zip;wget $URL_SHELL/linux.zip"
    ## 解压并提权
    ssh root@$3 "cd /home/install;unzip -o linux.zip;chmod a+x /home/install -R"
else 
    echo '                  跳过……'
fi

read -p "删除已rpm安装的软件……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    ## 删除rpm安装的软件
    ssh root@$3 "cd /home/install/common;./uninstall-rpm.sh"
else 
    echo '                  跳过……'
fi

read -p "安装java……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    ssh root@$3 "cd /home/install/java;./installed-jdk.sh"
else 
    echo '                  跳过……'
fi

read -p "安装mysql……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    ssh root@$3 "cd /home/install/mysql;./installed-mysql.sh 1 single"
else 
    echo '                  跳过……'
fi

read -p "安装hadoop……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    ssh root@$3 "cd /home/install/hadoop;./hadoop-single.sh $1 $2 $3"
else
    echo '                  跳过……'
fi

read -p "安装hive……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    ssh root@$3 "cd /home/install/hadoop;./hive-single.sh"
else
    echo '                  跳过……'
fi

read -p "安装zookeeper……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    echo '                  未完成……'
else 
    echo '                  跳过……'
fi

read -p "安装hbase……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    ssh root@$3 "cd /home/install/hadoop;./hadoop-single.sh $1 $2 $3"
else 
    echo '                  跳过……'
fi

read -p "设置环境变量……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    ssh root@$3 "cd /home/install/config;./my-profile.sh;source /etc/profile"
    ssh root@$3 "source /etc/profile"
else 
    echo '                  跳过……'
fi

read -p "立即加入Hadoop集群……继续/跳过(Y/N):" isY
if [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then
    ./hadoop-cluster.sh
else 
    echo '                  跳过……'
fi

最后,有两个要求:

1、安装过程中需要修改或替换系统中原有的文件前,要进行备份,这个非常非常非常重要!!!
2、既然有安装那么就要有卸载脚本,一旦安装过程中出现问题,我们可以把添加修改过的文件还原,重新安装,坚持谁污染谁治理原则!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值