菜单形式安装Haproxy的脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜单形式安装Haproxy的脚本相关的知识,希望对你有一定的参考价值。

为简化工作中手动部署Haproxy的工作量以及降低错误概率,特地编写依菜单的形式安装Haproxy的脚本,具体如下:
    #!/bin/bash                                                                                                                                          
    #*************************************************************
    #Author:             fanfubin
    #QQ:                 502422514
    #Date:               2019-03-19
    #FileName:           haproxy.sh
    #Description:        The install haproxy script
    #Copyright (C):      2019 All rights reserved
    #*************************************************************
    source /etc/init.d/functions

    BLACK_COLOR=‘\E[1;30m‘       
    RED_COLOR=‘\E[1;31m‘       
    GREEN_COLOR=‘\E[1;32m‘       
    YELLOW_COLOR=‘\E[1;33m‘       
    BLUE_COLOR=‘\E[1;34m‘       
    PINK_COLOR=‘\E[1;35m‘ #紫色       
    SKYBLUE_COLOR=‘\E[1;36m‘ #天蓝色       
    WHITE_COLOR=‘\E[1;37m‘ #白色       

    SHAN=‘\E[31;5m‘ #字体闪烁       
    RES=‘\E[0m‘

    f_color() 
        case "$1" in
                black)
                        echo -e "$PINK_COLOR$2 $RES"
                        ;;
                red)
                        echo -e "$RED_COLOR$2 $RES"
                        ;;
                green)
                        echo -e "$GREEN_COLOR$2 $RES"
                        ;;
                yellow)
                        echo -e "$YELLOW_COLOR$2 $RES"
                        ;;
                blue)
                        echo -e "$BLUE_COLOR$2 $RES"
                        ;;
                skyblue)
                        echo -e "$PINK_COLOR$2 $RES"
                        ;;
                pink)
                        echo -e "$PINK_COLOR$2 $RES"
                        ;;
                white)
                        echo -e "$PINK_COLOR$2 $RES"
                        ;;
                shan)
                        echo -e "$SHAN$2 $RES"
                        ;;
                *)
                        exit    
    esac
    

    #返回值: 0-错误  1-正确     只能判断+/- int num
    f_is_num() 
            [ $# -eq 1 ] && 
                    expr $1 + 1 &>/dev/null
                    if [ $? -eq 0 -a "$1" != "-1" ];then
                            return 1
                    else
                            return 0
                    fi
             || 
                    return 0
            
    

    f_main_title() 
            f_color green "`echo -e "\t服务器监控系统"`"
    

    cpu_count=`lscpu|awk -F ‘ +‘ ‘/^CPU\(s\):/print $2‘`
            if [ $cpu_count -le 2 ];then
                    export cpu_num="1"
            else
                    let cpu_num=`lscpu|awk -F ‘ +‘ ‘/^CPU\(s\):/print $2‘`-1
                    export cpu_num
            fi

    export httpd_user="nginx" 
    export httpd_group="nginx"
    export httpd_id="2000"
    export haproxy_install_ver="haproxy-1.8.20.tar.gz"

    ##创建通用的用户名和id(user:nginx  id:2000)
    id $httpd_user                                                                                                                                                          
            if [ `echo $?` -ne 0 ];then
                    useradd -s /sbin/nologin -M -u $httpd_id $httpd_user
            else
                 test_httpd_id=`id $httpd_user | awk -F ‘[=(]‘ ‘print $2‘`
                 test_httpd_gid=`id $httpd_user | awk -F ‘[=(]‘ ‘print $4‘`
                 if [ $test_httpd_id -ne $httpd_id -o $test_httpd_gid -ne $httpd_id ];then
                         userdel -r $httpd_id
                         useradd -s /sbin/nologin -M -u $httpd_id $httpd_user
                 fi
            fi

    f_menu_3_install_server_haproxy_list() 

        local path
        local haproxy_install_dir
        local num
        local target
        local system_one_ver
        local system_two_ver
        local system_three_ver
        local choose_num
        local locate_server_num

        echo
        f_main_title
        echo "==================================" 
        cat <<-EOF
        【1. 】 Show install version
        【2. 】 Source install haproxy 
        【0. 】 Exit

        EOF
        echo "=================================="

        # haproxy  .tar. is exist?
        yum -y install mlocate &> /dev/null
        updatedb &> /dev/null
        locate_server_num=`locate $haproxy_install_ver| wc -l`
        if [ ! -e $haproxy_install_ver ];then
            if [ $locate_server_num -eq 1 ];then
                \cp `locate $haproxy_install_ver` . -a
            elif [ $locate_server_num -ge 2 ];then
                \cp `locate $haproxy_install_ver | head -n1` . -a
            else
                f_color red "`echo "$haproxy_install_ver is not exist!"`"
                f_menu_3_install_server_haproxy_list
            fi
        fi
        haproxy_cpu_count=`lscpu|awk -F ‘ +‘ ‘/^CPU\(s\):/print $2‘`
        haproxy_install_dir=`echo $haproxy_install_ver | awk -F ‘.tar.‘ ‘print $1‘`
        sys_one_ver=`uname -r|awk -F ‘.‘ ‘print $1‘`
        sys_two_ver=`uname -r|awk -F ‘.‘ ‘print $2‘`
        sys_three_ver=`uname -r|awk -F ‘.‘ ‘print $3‘`
        if [ $sys_one_ver -eq 2 ];then
            if [ $sys_two_ver -ge 6 ];then
                if [ $sys_three_ver -ge 28 ];then
                    target="linux2628"
                else
                    target="linux26"
                fi
            else
                f_color red "`echo "Your system is not exist $haproxy_install_ver"`"
                f_menu_3_install_server_haproxy_list
            fi
        elif [ $sys_one_ver -eq 3 ];then
            target="linux2628"
        else
            f_color red "`echo "Your system is not exist $haproxy_install_ver"`"
            f_menu_3_install_server_haproxy_list
        fi

        read -p "Pls input a num:" num
        f_is_num $num
        [ $? -eq 1 ] ||  action "Pls input valid num!" false ; f_menu_3_install_server_haproxy_list;

        case "$num" in 
            1)
                echo
                echo -e "\t$haproxy_install_ver"
                f_menu_3_install_server_haproxy_list
                ;;
            2)
                echo
                read -p "Pls input 1-install or 2-quit: " choose_num
                f_is_num $choose_num
                [ $? -eq 1 ] ||  action "Pls input valid num!" false ; f_menu_3_install_server_haproxy_list;

                case "$choose_num" in
                    1)
                        echo
                        read -p "Pls input install Path or null: " path

                        if [ -z "$path" ];then
                            echo "Defaults install Path is /apps/$haproxy_install_dir"

                            yum -y install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel                                 systemd-devel zlib-devel &> /dev/null

                            tar xf $haproxy_install_ver 
                            cd $haproxy_install_dir
                            sleep 1

                            make ARCH=x86_64 TARGET="$target" USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1                                 USE_CPU_AFFINITY=1 PREFIX="/apps/$haproxy_install_dir"
                            sleep 1
                            make install PREFIX="/apps/$haproxy_install_dir"
                            cp haproxy /usr/sbin/
                            sleep 1

                            cat >/usr/lib/systemd/system/haproxy.service<<-EOF
                                [Unit]
                                Description=HAProxy Load Balancer
                                After=syslog.target network.target
                                [Service]
                                ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
                                ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
                                ExecReload=/bin/kill -USR2 $MAINPID
                                [Install]
                                WantedBy=multi-user.target
                            EOF

                            mkdir -p /etc/haproxy
                            cat >/etc/haproxy/haproxy.cfg<<-EOF
                                global
                                maxconn 100000
                                chroot "/apps/$haproxy_install_dir"
                                #stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
                                uid $httpd_id
                                gid $httpd_id
                                daemon
                                nbproc $haproxy_cpu_count 
                                pidfile /run/haproxy.pid
                                log 127.0.0.1 local3 info

                                defaults
                                option http-keep-alive
                                option  forwardfor
                                maxconn 100000
                                mode http
                                timeout connect 300000ms
                                timeout client  300000ms
                                timeout server  300000ms

                                listen stats
                                    mode http
                                    bind 0.0.0.0:9000
                                    stats enable
                                    log global
                                    stats uri     /haproxy-status
                                    stats auth    haadmin:q1w2e3r4ys

                            EOF
                            for i in `seq $haproxy_cpu_count`
                                do
                                                        let bind_cpu=$i-1
                                                        sed -ri ‘/nbproc/acpu-map ‘$i‘ ‘$bind_cpu‘‘ /etc/haproxy/haproxy.cfg
                                done

                            mkdir -p /var/lib/haproxy
                            chown $httpd_user.$httpd_user /var/lib/haproxy/ -R
                            systemctl daemon-reload
                            systemctl restart haproxy
                            cd - &> /dev/null

                            f_color shan "`echo "haproxy install path is: /apps/$haproxy_install_dir"`"
                            sleep 1
                        else
                            yum -y install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel                                 systemd-devel zlib-devel &> /dev/null

                            tar xf $haproxy_install_ver 
                            cd $haproxy_install_dir
                            sleep 1

                            make ARCH=x86_64 TARGET="$target" USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1                                 USE_CPU_AFFINITY=1 PREFIX="$path"
                            sleep 1
                            make install PREFIX="$path"
                            cp haproxy /usr/sbin/
                            sleep 1

                            cat >/usr/lib/systemd/system/haproxy.service<<-EOF
                                [Unit]
                                Description=HAProxy Load Balancer
                                After=syslog.target network.target
                                [Service]
                                ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
                                ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
                                ExecReload=/bin/kill -USR2 $MAINPID
                                [Install]
                                WantedBy=multi-user.target
                            EOF

                            mkdir -p /etc/haproxy
                            cat >/etc/haproxy/haproxy.cfg<<-EOF
                                global
                                maxconn 100000
                                chroot "$path"
                                #stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
                                uid $httpd_id
                                gid $httpd_id
                                daemon
                                nbproc $haproxy_cpu_count 
                                pidfile /run/haproxy.pid
                                log 127.0.0.1 local3 info

                                defaults
                                option http-keep-alive
                                option  forwardfor
                                maxconn 100000
                                mode http
                                timeout connect 300000ms
                                timeout client  300000ms
                                timeout server  300000ms

                                listen stats
                                    mode http
                                    bind 0.0.0.0:9000
                                    stats enable
                                    log global
                                    stats uri     /haproxy-status
                                    stats auth    haadmin:q1w2e3r4ys
                            EOF

                            for i in `seq $haproxy_cpu_count`
                                do
                                                        let bind_cpu=$i-1
                                                        sed -ri ‘/nbproc/acpu-map ‘$i‘ ‘$bind_cpu‘‘ /etc/haproxy/haproxy.cfg
                                done

                            mkdir -p /var/lib/haproxy
                            chown $httpd_user.$httpd_user /var/lib/haproxy/ -R
                            systemctl daemon-reload
                            systemctl restart haproxy
                            cd - &> /dev/null

                            f_color shan "`echo "haproxy install path is: $path"`"
                            sleep 1
                        fi

                        f_menu_3_install_server_haproxy_list
                        ;;
                    2)
                        f_menu_3_install_server_haproxy_list
                        ;;
                    *)      
                        f_menu_3_install_server_haproxy_list
                        ;;
                esac
                ;;
            0)
                exit 1
                ;;
            *)
                echo
                f_menu_3_install_server_haproxy_list
        esac    
        unset path
        unset haproxy_install_dir
        unset num
        unset target
        unset system_one_ver
        unset system_two_ver
        unset system_three_ver
        unset choose_num
        unset locate_server_num
    

    Flag=true
    while $Flag
    do
        f_menu_3_install_server_haproxy_list
            if [ $? -eq 0 ];then
                    Flag=false
            fi
    done

以上是关于菜单形式安装Haproxy的脚本的主要内容,如果未能解决你的问题,请参考以下文章

Haproxy的安装以及启动脚本的调试

cnetos 7 脚本部署HAproxy+nginx+nfs -脚本

haproxy+keepalived 部署脚本

keepalived+haproxy 安装配置

菜单形式部署redis 集群的脚本

安装配置Haproxy代理MySQL Galera集群