Linux自动化部署工程

来源:互联网 发布:顶级时尚杂志知乎 编辑:程序博客网 时间:2024/05/20 05:53

树懒·闪电

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

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

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

mysql主从安装脚本

#!/bin/bashset -e## 检查输入参数if [ $# -lt 1 ]; then    echo "$0 错误:请传入参数,(1、服务ID; 2、服务类型:master/slave)!"    echo "例如:./$0 1 master 或 ./$0 1 master"    exit 2fi## 读取配置文件. ../config/my-config.shif [ ! -f "$MYSQL_FILE" ]then## 重新设置下载链接    MYSQL_URL=$URL_FILE/mysql##1.下载安装包,并上传到服务器;    wget $MYSQL_URL/$MYSQL_FILEfi##2. 解压安装包到指定目录,修改文件的读写执行权限;rm -rf $MYSQL_HOMErm -rf $MYSQL_DATAtar -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 mysqlfi#改变当前目录的拥有者和用户组chown -R mysql $MYSQL_HOMEchgrp -R mysql $MYSQL_HOME##3. 编译源文件,并进行安装;# 已经编译过的,解压可用##4. 修改软件的相关配置文件,本地化或优化配置;可从support-files/my-default.cnf获取## 向配置文件中输入基本信息cat > /etc/my.cnf <<END[mysqld]basedir = $MYSQL_HOMEdatadir = $MYSQL_DATAport = $MYSQL_PORTserver_id = $1# socket = .....sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES## 修改临时表大小,提高查询速度tmp_table_size=300Mmax_heap_table_size=500M## 最大连接数max_connections=768## 表名大小写不敏感lower_case_table_names=1## 日志配置log_error=$MYSQL_DATA/mysql.err#log=$MYSQL_DATA/mysql.logslow-query-log=onslow-query-log-file=$MYSQL_DATA/mysql.slowlong_query_time=3END## 写入初始化文件cat > init.sql <<ENDCREATE 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=mysqlEND    echo  "GRANT REPLICATION SLAVE ON *.* to '${mySyncUser}'@'%' identified by '${mySyncPwd}'; " >> init.sqlelif [ "$2" == "slave" ];then    cat >> /etc/my.cnf <<END## 主从配置-从库log_bin = mysql-binexpire_logs_days = 7relay_log = mysql-relay-binlog_slave_updates = 1read_only = 1## 需要复制的库#replicate-do-db=db1## 不需要复制的库#replicate-ignore-db=mysqlEND    cat >> init.sql <<ENDSTOP 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.cnffi##5. 把软件注册为服务,并随系统启动;可从support-files/mysql.server获取cp -f $MYSQL_INID /etc/init.d/$MYSQL_INIDchmod a+x /etc/init.d/$MYSQL_INIDsed -i "s#@{myhome}#$MYSQL_HOME#g" /etc/init.d/$MYSQL_INIDsed -i "s#@{mydata}#$MYSQL_DATA#g" /etc/init.d/$MYSQL_INIDchkconfig $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_LOGln -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=lucky110100set -e## 检查输入参数if [ $# -lt 3 ]; then    echo "$0 错误:请传入参数,(1、类型:name/node;2、机器名:name00/node01;3、机器IP)!"    echo "例如:$0 name name00 127.0.0.1"    exit 2fiecho "参数确认: 类型:$1   机器名: $2    机器IP:$3"read -p "继续/跳过(Y/N):" isYif [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then    echo '                  开始安装……'else     echo '                  退出安装!!!'    exit 2fiif [ ! -f 'hadoop.info'  ];then    touch hadoop.infofi#写入集群信息——很重要sed -i "/$2/d" hadoop.infoecho "$1$2   $3" >> hadoop.infoURL_SHELL=http://172.16.11.10:9300read -p "SSH链接慢?(Y/N):" isYif [ "${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 '                  跳过……'firead -p "授权公钥……继续/跳过(Y/N):" isYif [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then    wget $URL_SHELL/common/auth-key.sh;chmod a+x auth-key.sh;./auth-key.sh $1 $3else     echo '                  跳过……'firead -p "下载脚本……继续/跳过(Y/N):" isYif [ "${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 '                  跳过……'firead -p "删除已rpm安装的软件……继续/跳过(Y/N):" isYif [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then    ## 删除rpm安装的软件    ssh root@$3 "cd /home/install/common;./uninstall-rpm.sh"else     echo '                  跳过……'firead -p "安装java……继续/跳过(Y/N):" isYif [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then    ssh root@$3 "cd /home/install/java;./installed-jdk.sh"else     echo '                  跳过……'firead -p "安装mysql……继续/跳过(Y/N):" isYif [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then    ssh root@$3 "cd /home/install/mysql;./installed-mysql.sh 1 single"else     echo '                  跳过……'firead -p "安装hadoop……继续/跳过(Y/N):" isYif [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then    ssh root@$3 "cd /home/install/hadoop;./hadoop-single.sh $1 $2 $3"else    echo '                  跳过……'firead -p "安装hive……继续/跳过(Y/N):" isYif [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then    ssh root@$3 "cd /home/install/hadoop;./hive-single.sh"else    echo '                  跳过……'firead -p "安装zookeeper……继续/跳过(Y/N):" isYif [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then    echo '                  未完成……'else     echo '                  跳过……'firead -p "安装hbase……继续/跳过(Y/N):" isYif [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then    ssh root@$3 "cd /home/install/hadoop;./hadoop-single.sh $1 $2 $3"else     echo '                  跳过……'firead -p "设置环境变量……继续/跳过(Y/N):" isYif [ "${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 '                  跳过……'firead -p "立即加入Hadoop集群……继续/跳过(Y/N):" isYif [ "${isY}" == "y" ] || [ "${isY}" == "Y" ];then    ./hadoop-cluster.shelse     echo '                  跳过……'fi

最后,有两个要求:

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

0 0
原创粉丝点击