1、一键部署redis,版本任意指定:
如果有朋友想自定义安装路径,或者Redis的默认端口等,可以直接修改前面的变量。这个脚本主要是用到了redis源码自带的初始化脚本。如果遇到报错可以评论区反馈,由于个人写脚本不太喜欢注释,所以劳费各人仔细端详了。

#!/bin/bash
#by lutixia
#############################

REDIS_DIR="/usr/local/redis"
REDIS_IP="0.0.0.0"
REDIS_PORT="6379"
REDIS_VERSION="redis-5.0.5"

init() {
    echo -e "$REDIS_PORT\n$REDIS_DIR/$REDIS_PORT/$REDIS_PORT.conf\n$REDIS_DIR/$REDIS_PORT/$REDIS_PORT.log\n$REDIS_DIR/$REDIS_PORT\n${REDIS_DIR}/bin/redis-server" |/usr/src/$REDIS_VERSION/utils/install_server.sh
    }

install() {
        rm -rf $REDIS_VERSION && tar xf  $REDIS_VERSION.tar.gz
                cd $REDIS_VERSION  && make PREFIX=$REDIS_DIR  install
                echo -e "$REDIS_PORT\n$REDIS_DIR/$REDIS_PORT/$REDIS_PORT.conf\n$REDIS_DIR/$REDIS_PORT/$REDIS_PORT.log\n$REDIS_DIR/$REDIS_PORT\n$REDIS_DIR/bin/redis-server" | /usr/src/$REDIS_VERSION/utils/install_server.sh
                sed -i "/^bind/cbind $REDIS_IP" $REDIS_DIR/$REDIS_PORT/$REDIS_PORT.conf
                /etc/init.d/redis_$REDIS_PORT restart
    }

#安装redis
if [ -x $REDIS_DIR/bin/redis-server ];then
                echo "redis已经编译安装完成。"
        init
else
    #创建目录
    if [ ! -d $REDIS_DIR ];then
        mkdir -p $REDIS_DIR
        cd $REDIS_DIR && mkdir $REDIS_PORT
    else
        rm -rf $REDIS_DIR/*
        cd $REDIS_DIR && mkdir $REDIS_PORT
    fi
    cd /usr/src/
    if [ ! -f $REDIS_VERSION.tar.gz ];then
        wget http://download.redis.io/releases/$REDIS_VERSION.tar.gz 
        install
    else
        install
        fi
fi

2、redis单机集群一键部署:

#!/bin/bash
# by lutixia
#############################

REDIS_DIR="/usr/local/redis-cluster"
REDIS_IP="127.0.0.1"

#安装redis
cd /usr/src/
if [ -d /usr/src/redis-5.0.5 ] && [ -x /usr/local/redis/bin/redis-server ];then
    echo "redis已经编译安装完成。"
else
    if [ ! -f redis-5.0.5.tar.gz ];then
        wget -c http://download.redis.io/releases/redis-5.0.5.tar.gz
        tar xf  redis-5.0.5.tar.gz && cd redis-5.0.5 
        make clean &&  make  PREFIX=/usr/local/redis install && cp /usr/local/redis/bin/redis-server $REDIS_DIR/
    else
        tar xf  redis-5.0.5.tar.gz && cd redis-5.0.5 
        make clean &&  make  PREFIX=/usr/local/redis install && cp /usr/local/redis/bin/redis-server $REDIS_DIR/

    fi
fi
#部署redis集群:
#创建目录
if [ ! -d $REDIS_DIR ];then
    mkdir -p $REDIS_DIR
    cd $REDIS_DIR && mkdir 700{0..5}
else
    rm -rf $REDIS_DIR/*
    cd $REDIS_DIR && mkdir 700{0..5}
fi

\cp /usr/local/redis/bin/redis-* $REDIS_DIR/
for i in `seq 0 5`;do
     echo -e "700$i\n$REDIS_DIR/700$i/700$i.conf\n$REDIS_DIR/700$i/700$i.log\n$REDIS_DIR/700$i/\n$REDIS_DIR/redis-server" |/usr/src/redis-5.0.5/utils/install_server.sh
done

pkill redis-server
for i in `seq 0 5`;do
    sed -i "s/# cluster-enabled yes/cluster-enabled yes/" $REDIS_DIR/700$i/700$i.conf
    sed -i "s/# cluster-config-file nodes-6379.conf/cluster-config-file nodes-700$i.conf/"  $REDIS_DIR/700$i/700$i.conf
    sed -i "s/# cluster-node-timeout 15000/cluster-node-timeout 15000/" $REDIS_DIR/700$i/700$i.conf
    sed -i "s/appendonly no/appendonly yes/" $REDIS_DIR/700$i/700$i.conf
    #sed -i "s/bind 127.0.0.1/bind 0.0.0.0/" $REDIS_DIR/700$i/700$i.conf
    /etc/init.d/redis_700$i restart  &>/dev/null
    sleep 2
done
value=`ps -ef|grep redis-server|grep -v grep|wc -l`
if [ $value -eq 6 ];then
    echo yes | $REDIS_DIR/redis-cli --cluster create $REDIS_IP:7000 $REDIS_IP:7001 $REDIS_IP:7002 $REDIS_IP:7003 $REDIS_IP:7004 $REDIS_IP:7005 --cluster-replicas 1
else
    echo "redis 集群有部分节点启动失败"
fi

3、一键源码部署lnmp,版本任意选:
这个脚本可以根据需要安装单个nginx或者PHP等,也可以一键部署Nginx、PHP、MySQL。版本和路径也是可以根据自己的需要指定的,如果遇到报错可以评论区反馈,由于个人写脚本不太喜欢注释,所以劳费各人仔细端详了。

#!/bin/bash
#by lutixia
#############################

# 设置源码目录:
BASE_DIR=/usr/src/

### 部署nginx:
install_nginx() {
    NGINX_VERSION=1.18.0

    if [ -d /usr/local/nginx ];then
        echo "请核实在/usr/local/目录下是否已经安装nginx服务!"
    else
        # 安装依赖:
        yum install wget pcre-devel zlib-devel -y 
        wget -c -P "$BASE_DIR" http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz 
        if [ $? -ne 0 ];then  
            echo "请检查网络是否正常或者链接是否失效!"
        else    
            cd "$BASE_DIR"
            tar xf nginx-$NGINX_VERSION.tar.gz
            cd nginx-$NGINX_VERSION
            ./configure --prefix=/usr/local/nginx && make && make install 
            echo "nginx 部署成功!"
        fi
    fi
}

### 部署php:

install_php() {
    PHP_VERSION=5.6.8
    if [ -d /usr/local/php ];then
        echo "请核实在/usr/local/目录下是否已经安装php服务!"
    else
        # 安装依赖:
        yum -y install wget  gd curl curl-devel libjpeg libjpeg-devel libpng \
        libpng-devel freetype freetype-devel libxml2 libxml2-devel 

        wget -c -P /usr/src/  http://mirrors.sohu.com/php/php-$PHP_VERSION.tar.gz 
        if [ $? -ne 0 ];then  
            echo "请检查网络是否正常或者链接是否失效!"
        else
            cd $BASE_DIR
            tar xf php-$PHP_VERSION.tar.gz
            cd php-$PHP_VERSION
            ./configure  --prefix=/usr/local/php  \
                         --enable-fpm \
                         --enable-debug \
                         --with-gd \
                         --with-jpeg-dir \
                         --with-png-dir \
                         --with-freetype-dir \
                         --enable-mbstring \
                         --with-curl \
                         --with-mysql=mysqlnd \
                         --with-mysqli=mysqlnd \
                         --with-pdo-mysql=mysqlnd \
                         --with-config-file-path=/usr/local/php/etc \
                         --with-zlib-dir
             [ $? -eq 0 ] && {
                    make && make install
            }
            # 初始化PHP:
            \cp php.ini-development  /usr/local/php/etc/php.ini
            \cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
            \cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
            chmod +x /etc/init.d/php-fpm
            echo "php 部署成功!"
        fi
    fi
}


### 部署MySQL

install_mysql() {
    MYSQL_VERSION=5.5.60
    if [ -d  /usr/local/mysql ];then
            echo "请核实在/usr/local/目录下是否已经安装MySQL服务!"
    else
        # 安装依赖:
        yum install wget gcc libaio bison gcc-c++  git cmake  ncurses-devel ncurses -y
        [ $? -eq 0 ] && {
            wget -c -P $BASE_DIR \
            http://mirrors.163.com/mysql/Downloads/MySQL-5.5/mysql-$MYSQL_VERSION.tar.gz
            if [ $? -ne 0 ];then  
                echo "请检查网络或者链接是否失效!"
            else
                cd $BASE_DIR
                tar xf mysql-$MYSQL_VERSION.tar.gz
                cd mysql-$MYSQL_VERSION
                cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
                    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
                    -DMYSQL_DATADIR=/data/mysql \
                    -DSYSCONFDIR=/usr/local/mysql/ \
                    -DMYSQL_USER=mysql \
                    -DMYSQL_TCP_PORT=3306 \
                    -DWITH_XTRADB_STORAGE_ENGINE=1 \
                    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
                    -DWITH_PARTITION_STORAGE_ENGINE=1 \
                    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
                    -DWITH_MYISAM_STORAGE_ENGINE=1 \
                    -DWITH_READLINE=1 \
                    -DENABLED_LOCAL_INFILE=1 \
                    -DWITH_EXTRA_CHARSETS=1 \
                    -DDEFAULT_CHARSET=utf8 \
                    -DDEFAULT_COLLATION=utf8_general_ci \
                    -DEXTRA_CHARSETS=all \
                    -DWITH_BIG_TABLES=1 \
                    -DWITH_DEBUG=0                
                [ $? -eq 0 ] && {
                    make && make install
                }
                # 初始化MySQL:
                \cp support-files/my-large.cnf /usr/local/mysql/my.cnf
                \cp support-files/mysql.server /etc/init.d/mysqld
                chmod +x  /etc/init.d/mysqld
                mkdir -p /data/mysql
                useradd -s /sbin/nologin mysql
                chown -R mysql. /data/mysql
                /usr/local/mysql55/scripts/mysql_install_db  --user=mysql \
                --datadir=/data/mysql --basedir=/usr/local/mysql
                echo "MySQL 部署成功!"
            fi
        }                            
    fi    
}

all_install() {
    install_nginx && install_php && install_mysql
    }

echo
echo -e "1) 安装nginx\n"
echo -e "2) 安装php\n"
echo -e "3) 安装mysql\n"
echo -e "4) lnmp一键部署\n"

read -p "请根据需要输入指定数值选项:"  num
case $num in
    1) 
    install_nginx
    ;;
    2)
    install_php
    ;;
    3)
    install_mysql
    ;;
    4)
    all_install
    ;;
    *)
    echo "请输入正确数值选项!"
    ;;
esac 

4、lvs DR模式,一键部署脚本:
在这个脚本VIP和RIP等都是可以自定义的。并且脚本可以根据主机名自动的判断是配置vip和rip,即实现一个脚本到处执行。

#!/bin/bash
#by lutixia
#############################

# 获取主机名
HOSTNAME=`hostname`
# 设置VIP和RIP的主机名变量
VIP_HOSTNAME="LVS-72-200"
RIP_HOSTNAME_1="RIP-72-127"
RIP_HOSTNAME_2="RIP-72-128"


VIP=192.168.72.200
RIP1=192.168.72.127
RIP2=192.168.72.128
PORT=80
# VIP服务器的VIP子网卡
VIP_INTERFACE=ens32:1
# 后端服务器的lo子网卡
LO_INTERFACE=lo:1
# VIP和RIP出去的网关,该网关为路由器的内网地址
GATEWAY=192.168.72.130

# 配置LVS:
if [ "$HOSTNAME" = "$VIP_HOSTNAME" ];then
    case "$1" in
        start)
            ping  -c2 $VIP &>/dev/null
            if [ $? -ne 0 ];then
                cd /etc/sysconfig/network-scripts/ 
                cat > ifcfg-$VIP_INTERFACE <<-EOF
                TYPE="Ethernet"
                BOOTPROTO="none"
                DEVICE="${VIP_INTERFACE}"
                ONBOOT="yes"
                IPADDR=$VIP
                PREFIX=24
                GATEWAY=$GATEWAY
                EOF
                ifup ${VIP_INTERFACE}
                # 设置VIP虚拟服务器
                /usr/sbin/ipvsadm -A -t $VIP:$PORT  -s rr
                for i in $RIP{1..2};do
                    /usr/sbin/ipvsadm -a -t $VIP:$PORT  -r ${i}
                done
                echo -e "\nVIP服务部署成功!配置如下:\n`ipvsadm -ln`"
            else
                echo "检查VIP是否已经被使用!"
            fi
            ;; 
        stop)
            /usr/sbin/ipvsadm -D -t $VIP:$PORT
            cd /etc/sysconfig/network-scripts/ 
            ifdown ${VIP_INTERFACE} &>/dev/null
            rm -rf ifcfg-${VIP_INTERFACE}
            route del default gw $GATEWAY &>/dev/null
            echo "VIP service  stopped!"
            ;; 
        status) 
            ipvsadm -ln
            ;; 
        *) 
            echo "Usage: $0 {start|stop|status}"
            ;; 
    esac
# 配置RIP
elif [ "$HOSTNAME" = "$RIP_HOSTNAME_1" ];then
    case "$1" in
        start) 
            cd /etc/sysconfig/network-scripts/
            cat > ifcfg-$LO_INTERFACE <<-EOF
            DEVICE=$LO_INTERFACE
            IPADDR=$VIP
            NETMASK=255.255.255.255
            ONBOOT=yes
            NAME=loopback
            EOF
            ifdown $LO_INTERFACE &>/dev/null && ifup ${LO_INTERFACE}
            echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
            echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
            route add default gw $GATEWAY &>/dev/null
            ;; 
        stop) 
            ifdown $LO_INTERFACE &>/dev/null
            cd /etc/sysconfig/network-scripts/
            rm -rf ifcfg-$LO_INTERFACE
            route del default gw $GATEWAY &>/dev/null 
            ;; 
        status) 
            echo "VIP: `ip a | awk '/lo:1/{print $2}'`"
            echo "GATEWAY: `route -n | awk 'NR==3{print $2}'`"
            ;; 
        *) 
            echo "$0: Usage: $0 {start|status|stop}"
            exit 1
            ;;
    esac

elif [ "$HOSTNAME" = "$RIP_HOSTNAME_2" ];then
    case "$1" in
        start) 
            cd /etc/sysconfig/network-scripts/
            cat > ifcfg-$LO_INTERFACE <<-EOF
            DEVICE=$LO_INTERFACE
            IPADDR=$VIP
            NETMASK=255.255.255.255
            ONBOOT=yes
            NAME=loopback
            EOF
            ifdown $LO_INTERFACE &>/dev/null && ifup ${LO_INTERFACE}
            echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
            echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
            route add default gw $GATEWAY &>/dev/null
            ;; 
        stop) 
            ifdown $LO_INTERFACE &>/dev/null
            cd /etc/sysconfig/network-scripts/
            rm -rf ifcfg-$LO_INTERFACE 
            ;; 
        status) 
            echo "VIP: `ip a | awk '/lo:1/{print $2}'`"
            echo "GATEWAY: `route -n | awk 'NR==3{print $2}'`"
            ;; 
        *) 
            echo "$0: Usage: $0 {start|status|stop}"
            exit 1
            ;;
    esac    
fi

更多精彩内容更新,欢迎大家关注我的知乎:运维朱工

标签: shell脚本, shell编程, linux教程

已有 2 条评论

  1. 星瑶 星瑶

    OωO写得不错!

    1. 谢谢୧(๑•̀⌄•́๑)૭

添加新评论