zoukankan      html  css  js  c++  java
  • 马哥博客作业第十六周

    架构题:前端有一个 LAMP 架构通过 wordpress 来部署,后端构建一个 NFS 服务器实现要求将用户上传的图片保存至后端 NFS 服务器上

    部署分布式LAMP架构:

    LAP 1:10.0.0.7
    
    #!/bin/bash
    #
    #********************************************************************
    #Author:            huangguangrui
    #QQ:                158086268
    #Date:              2020-09-09
    #FileName:         install_httpd24_php74.sh
    #URL:               http://www.xxx.com
    #Description:      The test script
    #Copyright (C):    2020 All rights reserved
    #********************************************************************
    SRC="/usr/local/src"
    HDIR="/apps/httpd24"
    PDIR="/apps/php74"
    
    HTTP="httpd-2.4.46.tar.bz2"
    HTTP_DIR="httpd-2.4.46"
    PHP="php-7.4.10.tar.bz2"
    PHP_DIR="php-7.4.10"
    
    APR="apr-1.7.0.tar.bz2"
    APR_UTIL="apr-util-1.6.1.tar.bz2"
    
    WP="wordpress-5.4.2-zh_CN.tar.gz"
    
    COL='echo -e "33[01;31m'
    END='33[0m"'
    
    
    ##安装必要软件
     ${COL} 系统安装必要软件中...请稍等... $END
    yum install gcc make pcre-devel lbzip2 openssl-devel expat-devel bzip2-devel make wget libaio  libxml2-devel  libmcrypt-devel sqlite-devel oniguruma unzip  -y 
    
    ##修改计算机名
    hostnamectl set-hostname LAP1
    
    check(){
    
    cd ${SRC}
    ${COL}检测当前网络状态$END
    
    ping -c1 baidu.com  &> /dev/null
    if  [ $? -eq 0 ];then
        ${COL}当前网络可以联网,下载安装包中...$END
        if [ ! -e ${HTTP} ];then
            wget -c https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/${HTTP} && ${COL}${HTTP}下载完成!$END
        else
            ${COL}${HTTP}已存在!$END
        fi
    
        if [ ! -e ${APR} ];then
            wget -c  https://mirrors.bfsu.edu.cn/apache//apr/${APR} && ${COL}${APR}下载完成!$END
        else
            ${COL}${APR}已存在!$END
        fi
    
        if [ ! -e ${APR_UTIL} ];then
             wget -c  https://mirrors.tuna.tsinghua.edu.cn/apache//apr/${APR_UTIL} && ${COL}${APR_UTIL}下载完成!$END
        else
            ${COL}${APR_UTIL}已存在!$END
        fi
    
        if [ ! -e ${PHP} ];then
             wget -c https://www.php.net/distributions/php-7.4.10.tar.bz2 && ${COL}${PHP}下载完成!$END
        else
             ${COL}${PHP}已存在!$END
        fi    
        
        if [ ! -e ${WP} ];then
             wget -c https://cn.wordpress.org/latest-zh_CN.tar.gz && ${COL}${WP}下载完成!$END
        else
             ${COL}${WP}已存在!$END         
        fi
    else 
        ${COL}当前网络无法联网,正在检测相关文件...$END
        if [ ! -e ${HTTP} ];then
            ${COL}缺少${HTTP}文件$END
            ${COL}请下载好相关文件放到${SRC}目录下$END
            exit
          elif [ ! -e ${APR} ];then 
            ${COL}缺少${APR}文件$END
            ${COL}请下载好相关文件放到${SRC}目录下$END
            exit
          elif [ ! -e ${APR_UTIL} ];then 
            ${COL}缺少${APR_UTIL}文件$END
            ${COL}请下载好相关文件放到${SRC}目录下$END
            exit
          elif [ ! -e ${PHP} ];then
            ${COL}缺少${PHP}文件$END
            ${COL}请下载好相关文件放到${SRC}目录下$END
            exit
          elif [ ! -e ${WP} ];then
            ${COL}缺少${WP}文件$END
            ${COL}请下载好相关文件放到${SRC}目录下$END
            exit  
        else
            ${COL}所有文件都齐全.$END
            return
        fi
    fi
    }
    
    install_httpd24() {
    ${COL}开始安装httpd..$END
    groupadd -r -g 48 apache
    useradd -r -u 48 -g apache -s /sbin/nologin apache
    
    ##解压
    tar xf ${APR}
    tar xf ${APR_UTIL}
    tar xf ${HTTP}
    
    ##合并安装包
    mv apr-1.7.0 ${HTTP_DIR}/srclib/apr
    mv apr-util-1.6.1 ${HTTP_DIR}/srclib/apr-util
    
    ##编译
    cd ${HTTP_DIR}
    ./configure --prefix=${HDIR} 
    --enable-so 
    --enable-ssl 
    --enable-cgi 
    --enable-rewrite 
    --with-zlib 
    --with-pcre 
    --with-included-apr 
    --enable-modules=most 
    --enable-mpms-shared=all 
    --with-mpm=event
    
    ##安装
    make -j 4 && make install 
    
    ## 修改配置文件
    sed -ri 's/^User.*$/User apache/' ${HDIR}/conf/httpd.conf 
    sed -ri 's/^Group.*$/Group apache/' ${HDIR}/conf/httpd.conf
    sed -ri 's/^#(ServerName.*$)/1/' ${HDIR}/conf/httpd.conf
    
    ##可选项--
    #sed -ri 's/^#(.*mod_mpm_event.so)$/1/' ${DIR}/conf/httpd.conf
    #sed -ri 's/^#(.*mod_mpm_perfork.so)$/1/' ${DIR}/conf/httpd.conf
    #sed -ri 's/^#(.*mod_mpm_worker.so)$/1/' ${DIR}/conf/httpd.conf
    
    
    ## 在/etc/man_db.conf的22行后面添加${DIR}/man
    sed -ri "N;22 a MANDATORY_MANPATH         ${HDIR}/man" /etc/man_db.conf 
    
    ##添加变量,并生效
    echo PATH=${HDIR}/bin:$PATH > /etc/profile.d/httpd24.sh
    source  /etc/profile.d/httpd24.sh
    
    ##检查语法
    httpd -t 
    
    ##创建service文件
    cat > /usr/lib/systemd/system/httpd24.service <<-EOF
    [Unit]
    Description=The Apache HTTP_DIR Server
    After=network.target remote-fs.target nss-lookup.target
    Documentation=man:httpd(8)
    Documentation=man:apachectl(8)
    
    [Service]
    Type=forking
    #EnvironmentFile=/etc/sysconfig/httpd
    
    ExecStart=${HDIR}/bin/apachectl start
    ExecReload=${HDIR}/bin/apachectl graceful
    ExecStop=${HDIR}/bin/apachectl stop
    
    
    # We want systemd to give httpd some time to finish gracefully, but still want
    # it to kill httpd after TimeoutStopSec if something went wrong during the
    # graceful stop. Normally, Systemd sends SIGTERM signal right after the
    # ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
    # httpd time to finish.
    KillSignal=SIGCONT
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    ##启动服务
    systemctl daemon-reload
    systemctl enable --now  httpd24
    [ $? -eq 0 ] && ${COL}httpd24安装成功...$END || ${COL}httpd24安装失败...$END
    ss -ntl |grep 80
    [ $? -eq 0 ] && ${COL}httpd24启动成功...$END || ${COL}httpd24启动失败...$END
    }
    
    install_php74(){
    ${COL}开始安装httpd..$END
    
    cd ${SRC}
    tar xf ${PHP} 
    
    ##编译PHP
    cd ${PHP_DIR}
    ./configure 
    --prefix=${PDIR} 
    --enable-mysqlnd 
    --with-mysqli=mysqlnd 
    --with-pdo-mysql=mysqlnd 
    --with-openssl 
    --with-zlib 
    --with-config-file-path=/etc 
    --with-config-file-scan-dir=/etc/php.d 
    --enable-mbstring 
    --enable-xml 
    --enable-sockets 
    --enable-fpm 
    --enable-maintainer-zts 
    --disable-fileinfo
    
    ##安装
    make -j 4 && make install
    
    ##追加PATH变量
    echo "PATH=${PDIR}/bin:$PATH" > /etc/profile.d/php74.sh
    . /etc/profile.d/php74.sh
    
    ##查看版本
    php --version
    [ $? -eq 0 ] && ${COL}php-fpm安装成功...$END || ${COL}php-fpm安装失败...$END
    
    ##准备php配置文件和启动文件
    cp php.ini-production /etc/php.ini
    cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
    
    cd ${PDIR}/etc/
    cp php-fpm.conf.default php-fpm.conf
    cp php-fpm.d/www.conf.default php-fpm.d/www.conf
    
    ##修改配置的用户和组
    sed -ri "s/^user.*$/user = apache/"  php-fpm.d/www.conf
    sed -ri "s/^group.*$/group = apache/"  php-fpm.d/www.conf
    
    ##支持status和ping页面
    sed -ri "s@;(pm.status_path).*@1 = /fpm_status@" php-fpm.d/www.conf
    sed -ri "s/;(ping.path.*)/1/" php-fpm.d/www.conf
    
    ##支持opcache加速
    mkdir /etc/php.d
    cat > /etc/php.d/opcache.ini <<-EOF
    [opcache]
    zend_extension=opcache.so
    opcache.enable=1
    EOF
    
    ##重启PHP-fpm服务
    systemctl daemon-reload
    systemctl enable --now php-fpm.service
    systemctl status php-fpm.service
    
    
    ##修改httpd24配置文件,使之支持php-fpm
    sed -ri 's/#(.*mod_proxy.so$)/1/' ${HDIR}/conf/httpd.conf
    sed -ri 's/#(.*mod_proxy_fcgi.so$)/1/' ${HDIR}/conf/httpd.conf
    sed -ri 's/(DirectoryIndex) (index.html)/1 index.php 2/' ${HDIR}/conf/httpd.conf
    
    cat >>${HDIR}/conf/httpd.conf  <<-EOF 
    AddType application/x-httpd-php .php
    proxyrequests off
    
    <virtualhost *:80>                                                                                                                                                  
        servername blog.guangrui.com
        documentroot "/data/wordpress"
        <directory "/data/wordpress">
        require all granted
        </directory>
        proxypassmatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
        proxypassmatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
        customlog "logs/access_wordpress_log" common
    </virtualhost>
     
    EOF
    systemctl    restart php-fpm
    [ $? -eq 0 ] && ${COL}php-fpm启动成功...$END || ${COL}php-fpm启动失败...$END
    }
    
    wp(){
    [ -d /data ] || mkdir /data  && rm -rf /data/wordpress/* 
    
    cd ${SRC}
    
    tar xf ${WP}
    mv wordpress /data
    setfacl -R -m u:apache:rwx /data/wordpress
    
    systemctl restart httpd24.service
    [ $? -eq 0 ] && ${COL}httpd_php部署完成...,请部署mariadb...$END
    }
    
    check
    install_httpd24
    install_php74
    wp
    LAP2:10.0.0.17
    
    #!/bin/bash
    #
    #********************************************************************
    #Author:            huangguangrui
    #QQ:                158086268
    #Date:              2020-09-09
    #FileName:         install_httpd24_php74.sh
    #URL:               http://www.xxx.com
    #Description:      The test script
    #Copyright (C):    2020 All rights reserved
    #********************************************************************
    SRC="/usr/local/src"
    HDIR="/apps/httpd24"
    PDIR="/apps/php74"
    
    HTTP="httpd-2.4.46.tar.bz2"
    HTTP_DIR="httpd-2.4.46"
    PHP="php-7.4.10.tar.bz2"
    PHP_DIR="php-7.4.10"
    
    APR="apr-1.7.0.tar.bz2"
    APR_UTIL="apr-util-1.6.1.tar.bz2"
    
    WP="wordpress-5.4.2-zh_CN.tar.gz"
    
    COL='echo -e "33[01;31m'
    END='33[0m"'
    
    
    ##安装必要软件
     ${COL} 系统安装必要软件中...请稍等... $END
    yum install gcc make pcre-devel lbzip2 openssl-devel expat-devel bzip2-devel make wget libaio  libxml2-devel  libmcrypt-devel sqlite-devel oniguruma unzip  -y 
    
    ##修改计算机名
    hostnamectl set-hostname LAP2
    
    check(){
    
    cd ${SRC}
    ${COL}检测当前网络状态$END
    
    ping -c1 baidu.com  &> /dev/null
    if  [ $? -eq 0 ];then
        ${COL}当前网络可以联网,下载安装包中...$END
        if [ ! -e ${HTTP} ];then
            wget -c https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/${HTTP} && ${COL}${HTTP}下载完成!$END
        else
            ${COL}${HTTP}已存在!$END
        fi
    
        if [ ! -e ${APR} ];then
            wget -c  https://mirrors.bfsu.edu.cn/apache//apr/${APR} && ${COL}${APR}下载完成!$END
        else
            ${COL}${APR}已存在!$END
        fi
    
        if [ ! -e ${APR_UTIL} ];then
             wget -c  https://mirrors.tuna.tsinghua.edu.cn/apache//apr/${APR_UTIL} && ${COL}${APR_UTIL}下载完成!$END
        else
            ${COL}${APR_UTIL}已存在!$END
        fi
    
        if [ ! -e ${PHP} ];then
             wget -c https://www.php.net/distributions/php-7.4.10.tar.bz2 && ${COL}${PHP}下载完成!$END
        else
             ${COL}${PHP}已存在!$END
        fi    
        
        if [ ! -e ${WP} ];then
             wget -c https://cn.wordpress.org/latest-zh_CN.tar.gz && ${COL}${WP}下载完成!$END
        else
             ${COL}${WP}已存在!$END         
        fi
    else 
        ${COL}当前网络无法联网,正在检测相关文件...$END
        if [ ! -e ${HTTP} ];then
            ${COL}缺少${HTTP}文件$END
            ${COL}请下载好相关文件放到${SRC}目录下$END
            exit
          elif [ ! -e ${APR} ];then 
            ${COL}缺少${APR}文件$END
            ${COL}请下载好相关文件放到${SRC}目录下$END
            exit
          elif [ ! -e ${APR_UTIL} ];then 
            ${COL}缺少${APR_UTIL}文件$END
            ${COL}请下载好相关文件放到${SRC}目录下$END
            exit
          elif [ ! -e ${PHP} ];then
            ${COL}缺少${PHP}文件$END
            ${COL}请下载好相关文件放到${SRC}目录下$END
            exit
          elif [ ! -e ${WP} ];then
            ${COL}缺少${WP}文件$END
            ${COL}请下载好相关文件放到${SRC}目录下$END
            exit  
        else
            ${COL}所有文件都齐全.$END
            return
        fi
    fi
    }
    
    install_httpd24() {
    ${COL}开始安装httpd..$END
    groupadd -r -g 48 apache
    useradd -r -u 48 -g apache -s /sbin/nologin apache
    
    ##解压
    tar xf ${APR}
    tar xf ${APR_UTIL}
    tar xf ${HTTP}
    
    ##合并安装包
    mv apr-1.7.0 ${HTTP_DIR}/srclib/apr
    mv apr-util-1.6.1 ${HTTP_DIR}/srclib/apr-util
    
    ##编译
    cd ${HTTP_DIR}
    ./configure --prefix=${HDIR} 
    --enable-so 
    --enable-ssl 
    --enable-cgi 
    --enable-rewrite 
    --with-zlib 
    --with-pcre 
    --with-included-apr 
    --enable-modules=most 
    --enable-mpms-shared=all 
    --with-mpm=event
    
    ##安装
    make -j 4 && make install 
    
    ## 修改配置文件
    sed -ri 's/^User.*$/User apache/' ${HDIR}/conf/httpd.conf 
    sed -ri 's/^Group.*$/Group apache/' ${HDIR}/conf/httpd.conf
    sed -ri 's/^#(ServerName.*$)/1/' ${HDIR}/conf/httpd.conf
    
    ##可选项--
    #sed -ri 's/^#(.*mod_mpm_event.so)$/1/' ${DIR}/conf/httpd.conf
    #sed -ri 's/^#(.*mod_mpm_perfork.so)$/1/' ${DIR}/conf/httpd.conf
    #sed -ri 's/^#(.*mod_mpm_worker.so)$/1/' ${DIR}/conf/httpd.conf
    
    
    ## 在/etc/man_db.conf的22行后面添加${DIR}/man
    sed -ri "N;22 a MANDATORY_MANPATH         ${HDIR}/man" /etc/man_db.conf 
    
    ##添加变量,并生效
    echo PATH=${HDIR}/bin:$PATH > /etc/profile.d/httpd24.sh
    source  /etc/profile.d/httpd24.sh
    
    ##检查语法
    httpd -t 
    
    ##创建service文件
    cat > /usr/lib/systemd/system/httpd24.service <<-EOF
    [Unit]
    Description=The Apache HTTP_DIR Server
    After=network.target remote-fs.target nss-lookup.target
    Documentation=man:httpd(8)
    Documentation=man:apachectl(8)
    
    [Service]
    Type=forking
    #EnvironmentFile=/etc/sysconfig/httpd
    
    ExecStart=${HDIR}/bin/apachectl start
    ExecReload=${HDIR}/bin/apachectl graceful
    ExecStop=${HDIR}/bin/apachectl stop
    
    
    # We want systemd to give httpd some time to finish gracefully, but still want
    # it to kill httpd after TimeoutStopSec if something went wrong during the
    # graceful stop. Normally, Systemd sends SIGTERM signal right after the
    # ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
    # httpd time to finish.
    KillSignal=SIGCONT
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    ##启动服务
    systemctl daemon-reload
    systemctl enable --now  httpd24
    [ $? -eq 0 ] && ${COL}httpd24安装成功...$END || ${COL}httpd24安装失败...$END
    ss -ntl |grep 80
    [ $? -eq 0 ] && ${COL}httpd24启动成功...$END || ${COL}httpd24启动失败...$END
    }
    
    install_php74(){
    ${COL}开始安装httpd..$END
    
    cd ${SRC}
    tar xf ${PHP} 
    
    ##编译PHP
    cd ${PHP_DIR}
    ./configure 
    --prefix=${PDIR} 
    --enable-mysqlnd 
    --with-mysqli=mysqlnd 
    --with-pdo-mysql=mysqlnd 
    --with-openssl 
    --with-zlib 
    --with-config-file-path=/etc 
    --with-config-file-scan-dir=/etc/php.d 
    --enable-mbstring 
    --enable-xml 
    --enable-sockets 
    --enable-fpm 
    --enable-maintainer-zts 
    --disable-fileinfo
    
    ##安装
    make -j 4 && make install
    
    ##追加PATH变量
    echo "PATH=${PDIR}/bin:$PATH" > /etc/profile.d/php74.sh
    . /etc/profile.d/php74.sh
    
    ##查看版本
    php --version
    [ $? -eq 0 ] && ${COL}php-fpm安装成功...$END || ${COL}php-fpm安装失败...$END
    
    ##准备php配置文件和启动文件
    cp php.ini-production /etc/php.ini
    cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
    
    cd ${PDIR}/etc/
    cp php-fpm.conf.default php-fpm.conf
    cp php-fpm.d/www.conf.default php-fpm.d/www.conf
    
    ##修改配置的用户和组
    sed -ri "s/^user.*$/user = apache/"  php-fpm.d/www.conf
    sed -ri "s/^group.*$/group = apache/"  php-fpm.d/www.conf
    
    ##支持status和ping页面
    sed -ri "s@;(pm.status_path).*@1 = /fpm_status@" php-fpm.d/www.conf
    sed -ri "s/;(ping.path.*)/1/" php-fpm.d/www.conf
    
    ##支持opcache加速
    mkdir /etc/php.d
    cat > /etc/php.d/opcache.ini <<-EOF
    [opcache]
    zend_extension=opcache.so
    opcache.enable=1
    EOF
    
    ##重启PHP-fpm服务
    systemctl daemon-reload
    systemctl enable --now php-fpm.service
    systemctl status php-fpm.service
    
    
    ##修改httpd24配置文件,使之支持php-fpm
    sed -ri 's/#(.*mod_proxy.so$)/1/' ${HDIR}/conf/httpd.conf
    sed -ri 's/#(.*mod_proxy_fcgi.so$)/1/' ${HDIR}/conf/httpd.conf
    sed -ri 's/(DirectoryIndex) (index.html)/1 index.php 2/' ${HDIR}/conf/httpd.conf
    
    cat >>${HDIR}/conf/httpd.conf  <<-EOF 
    AddType application/x-httpd-php .php
    proxyrequests off
    
    <virtualhost *:80>                                                                                                                                                  
        servername blog.guangrui.com
        documentroot "/data/wordpress"
        <directory "/data/wordpress">
        require all granted
        </directory>
        proxypassmatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
        proxypassmatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
        customlog "logs/access_wordpress_log" common
    </virtualhost>
     
    EOF
    systemctl    restart php-fpm
    [ $? -eq 0 ] && ${COL}php-fpm启动成功...$END || ${COL}php-fpm启动失败...$END
    }
    
    wp(){
    [ -d /data ] || mkdir /data  && rm -rf /data/wordpress/* 
    
    cd ${SRC}
    
    tar xf ${WP}
    mv wordpress /data
    setfacl -R -m u:apache:rwx /data/wordpress
    
    systemctl restart httpd24.service
    [ $? -eq 0 ] && ${COL}httpd_php部署完成...,请部署mariadb...$END
    }
    
    check
    install_httpd24
    install_php74
    wp
    mariadb:10.0.0.68
    
    #!/bin/bash
    #
    #********************************************************************
    #Author:            huangguangrui
    #QQ:                158086268
    #Date:              2020-09-09
    #FileName:         install_mariadb(10.2).sh
    #URL:               http://www.xxx.com
    #Description:      The test script
    #Copyright (C):    2020 All rights reserved
    #********************************************************************
    SRC="/usr/local/src"
    DIR="/data/mysql"
    MYSQL="mariadb-10.2.33-linux-x86_64.tar.gz"
    COL='echo -e "33[01;31m'
    END='33[0m"'
    
    ##安装必要软件
     ${COL} "系统安装必要软件中...请稍等..." $END
    yum install gcc make pcre-devel openssl-devel expat-devel bzip2-devel make wget libaio  libxml2-devel  libmcrypt-devel sqlite-devel  -y
    
    hostnamectl set-hostname master
    
    check(){
    cd ${SRC}
    ${COL}"检测当前网络状态"$END
    
    ping -c1 baidu.com &> /dev/null
    if  [ $? -eq 0 ];then
        ${COL}"当前网络可以联网,下载${MYSQL}中..."$END
        [ -e ${MYSQL} ] || wget -O ${SRC}/${MYSQL} https://mirrors.ustc.edu.cn/mariadb//mariadb-10.2.33/bintar-linux-x86_64/mariadb-10.2.33-linux-x86_64.tar.gz && ${COL}"${MYSQL}下载完成!"$END
    else 
        ${COL}"当前网络无法联网,正在检测相关文件..."$END
        if [ ! -e ${MYSQL} ];then
            ${COL}"缺少${MYSQL}"文件$END
            ${COL}"请下载好相关文件放到${SRC}目录下"$END
            exit
        elif [ -e /usr/local/mysql ];then 
            ${COL} "数据库已存在,安装失败" $END
            exit
        else
            return
        fi
    fi
    }
    
    install_mariadb(){
    ${COL} "开始安装数据库..." $END
    id mysql || useradd -s /sbin/nologin  -r mysql
    
    ##解压到/usr/local目录
    tar xf ${MYSQL} -C /usr/local/ &> /dev/null
    
    ##软链接
    cd /usr/local/
    ln -sv mariadb-10.2.33-linux-x86_64 mysql &> /dev/null
    
    ##修改权限
    cd mysql
    chown -R root.root ./* &> /dev/null
    
    ##创建数据库存放目录
    mkdir ${DIR} -p 
    chown -R mysql.mysql ${DIR}
    
    mkdir /etc/mysql &> /dev/null
    chown -R mysql.mysql /etc/mysql
    
    cp support-files/my-huge.cnf /etc/my.cnf
    sed -ri '/^server-id.*$/d' /etc/my.cnf
    sed -ri '/[mysqld]/askip_name_resolve=on' /etc/my.cnf
    sed -ri '/[mysqld]/adatadir=/data/mysql' /etc/my.cnf
    sed -ri '/[mysqld]/aserver-id=68' /etc/my.cnf
    
    ##增加PATH路径,并生效
    echo "PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
    . /etc/profile.d/mysql.sh
    
    ##安装数据库并关联mysql用户和数据存放目录
    scripts/mysql_install_db --user=mysql --datadir=/data/mysql &> /dev/null
    
    ##复制server文件到启动目录
    cp support-files/mysql.server /etc/rc.d/init.d/mysqld
    
    ##添加到开机启动
    chkconfig --add mysqld  &> /dev/null
    
    ##启动服务
    service mysqld start
    #[ $? -eq 0 ] && { ${COL} "数据库安装成功..." $END } || { ${COL} "数据库安装失败..." $END;exit; }
    ss -ntl |grep 3306
    [ $? -eq 0 ] && ${COL} "数据库启动成功..." $END || ${COL} "数据库启动失败..." $END
    }
    
    chang_mysql(){
    mysql -e "drop database test;"
    
    mysql -e "create database wordpress;"
    #mysql -e "create database discuz;"
    mysql -e "grant all on wordpress.* to wpuser@'10.0.0.%' identified by 'Admin@120';"
    #mysql -e "grant all on discuz.* to discuz@'10.0.0.%' identified by '123456';"
    }
    
    check
    install_mariadb
    chang_mysql

     LAMP架构已经搭好了;测试一下正常.

    接下来做:mariadb的主从配置

    安装slave:10.0.0.69
    
    #!/bin/bash
    #
    #********************************************************************
    #Author:            huangguangrui
    #QQ:                158086268
    #Date:              2020-09-09
    #FileName:         install_mariadb(10.2).sh
    #URL:               http://www.xxx.com
    #Description:      The test script
    #Copyright (C):    2020 All rights reserved
    #********************************************************************
    SRC="/usr/local/src"
    DIR="/data/mysql"
    MYSQL="mariadb-10.2.33-linux-x86_64.tar.gz"
    COL='echo -e "33[01;31m'
    END='33[0m"'
    
    ##安装必要软件
     ${COL} "系统安装必要软件中...请稍等..." $END
    yum install gcc make pcre-devel openssl-devel expat-devel bzip2-devel make wget libaio  libxml2-devel  libmcrypt-devel sqlite-devel  -y
    
    hostnamectl set-hostname slave
    
    check(){
    cd ${SRC}
    ${COL}"检测当前网络状态"$END
    
    ping -c1 baidu.com &> /dev/null
    if  [ $? -eq 0 ];then
        ${COL}"当前网络可以联网,下载${MYSQL}中..."$END
        [ -e ${MYSQL} ] || wget -O ${SRC}/${MYSQL} https://mirrors.ustc.edu.cn/mariadb//mariadb-10.2.33/bintar-linux-x86_64/mariadb-10.2.33-linux-x86_64.tar.gz && ${COL}"${MYSQL}下载完成!"$END
    else 
        ${COL}"当前网络无法联网,正在检测相关文件..."$END
        if [ ! -e ${MYSQL} ];then
            ${COL}"缺少${MYSQL}"文件$END
            ${COL}"请下载好相关文件放到${SRC}目录下"$END
            exit
        elif [ -e /usr/local/mysql ];then 
            ${COL} "数据库已存在,安装失败" $END
            exit
        else
            return
        fi
    fi
    }
    
    install_mariadb(){
    ${COL} "开始安装数据库..." $END
    id mysql || useradd -s /sbin/nologin  -r mysql
    
    ##解压到/usr/local目录
    tar xf ${MYSQL} -C /usr/local/ &> /dev/null
    
    ##软链接
    cd /usr/local/
    ln -sv mariadb-10.2.33-linux-x86_64 mysql &> /dev/null
    
    ##修改权限
    cd mysql
    chown -R root.root ./* &> /dev/null
    
    ##创建数据库存放目录
    mkdir ${DIR} -p 
    chown -R mysql.mysql ${DIR}
    
    mkdir /etc/mysql &> /dev/null
    chown -R mysql.mysql /etc/mysql
    
    cp support-files/my-huge.cnf /etc/my.cnf
    sed -ri '/^server-id.*$/d' /etc/my.cnf
    sed -ri '/[mysqld]/askip_name_resolve=on' /etc/my.cnf
    sed -ri '/[mysqld]/adatadir=/data/mysql' /etc/my.cnf
    sed -ri '/[mysqld]/aserver-id=68' /etc/my.cnf
    
    ##增加PATH路径,并生效
    echo "PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
    . /etc/profile.d/mysql.sh
    
    ##安装数据库并关联mysql用户和数据存放目录
    scripts/mysql_install_db --user=mysql --datadir=/data/mysql &> /dev/null
    
    ##复制server文件到启动目录
    cp support-files/mysql.server /etc/rc.d/init.d/mysqld
    
    ##添加到开机启动
    chkconfig --add mysqld  &> /dev/null
    
    ##启动服务
    service mysqld start
    #[ $? -eq 0 ] && { ${COL} "数据库安装成功..." $END } || { ${COL} "数据库安装失败..." $END;exit; }
    ss -ntl |grep 3306
    [ $? -eq 0 ] && ${COL} "数据库启动成功..." $END || ${COL} "数据库启动失败..." $END
    }
    
    chang_mysql(){
    mysql -e "drop database test;"
    }
    
    check
    install_mariadb
    chang_mysql
    master:10.0.0.68
    
    [14:10:57 root@centos8 ~]#vim /etc/my.cnf 
    server-id=68
    [14:11:05 root@centos8 ~]#systemctl restart mysqld
    
    [14:12:12 root@mariadb ~]#mysqldump -A -F --single-transaction --master-data=1 > /data/all.sql
    [14:12:13 root@mariadb ~]#scp /data/all.sql 10.0.0.69:/data/
    The authenticity of host '10.0.0.69 (10.0.0.69)' can't be established.
    ECDSA key fingerprint is SHA256:4/6qR3p9i6Rp+1VPtzdlP1C7waRXc8iDWzAD8WZgL+s.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added '10.0.0.69' (ECDSA) to the list of known hosts.
    root@10.0.0.69's password: 
    all.sql                                                                                                          100%  467KB  13.7MB/s   00:00    
    [14:12:24 root@mariadb ~]#mysql -e 'grant replication slave on *.* to repluser@"10.0.0.%" identified by "Admin@120";'
    [14:12:34 root@mariadb ~]#mysql -e 'select user,host from mysql.user;'
    +----------+-----------+
    | user     | host      |
    +----------+-----------+
    | repluser | 10.0.0.%  |
    | wpuser   | 10.0.0.%  |
    | root     | 127.0.0.1 |
    | root     | ::1       |
    |          | localhost |
    | root     | localhost |
    |          | mariadb   |
    | root     | mariadb   |
    +----------+-----------+
    slave :10.0.0.69
    
    [root@slave ~]#vim /etc/mysql/my.cnf
    
    server-id   = 69
    read_only=on 
    [root@slave ~]#systemctl restart mysqld
    [root@slave ~]#grep '^CHANGE MASTER' /data/all.sql 
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=385;
    [root@slave ~]#vim /data/all.sql 
    
    CHANGE MASTER TO 
    MASTER_HOST='10.0.0.68',
    MASTER_USER='repluser',
    MASTER_PASSWORD='Admin@120',
    MASTER_PORT=3306,   
    
    [root@slave ~]#systemctl restart mysqld
    
    [root@slave ~]#grep '^CHANGE MASTER' /data/all.sql 
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=385;
    [root@slave ~]#vim /data/all.sql 
    [root@slave ~]#mysql < /data/all.sql 
    [root@slave ~]#mysql
    
    MariaDB [(none)]> start slave;
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> show slave statusG;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.0.0.68
                      Master_User: repluser
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000003
              Read_Master_Log_Pos: 585
                   Relay_Log_File: slave-relay-bin.000002
                    Relay_Log_Pos: 755
            Relay_Master_Log_File: mysql-bin.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 585
                  Relay_Log_Space: 1064
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 68
                   Master_SSL_Crl: 
               Master_SSL_Crlpath: 
                       Using_Gtid: No
                      Gtid_IO_Pos: 
          Replicate_Do_Domain_Ids: 
      Replicate_Ignore_Domain_Ids: 
                    Parallel_Mode: conservative
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
    1 row in set (0.00 sec)

     主从复制配置完成,接下来配置NFS

    NFS :10.0.0.8
    
    [root@NFS ~]#groupadd -r -g 48 apache
    [root@NFS ~]#useradd -r -u 48 -g apache -s /sbin/nologin apache
    [root@NFS ~]#yum install nfs-utils.x86_64 -y
    
    [root@NFS ~]#systemctl enable --now nfs-server.service 
    Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
    [root@NFS ~]#mkdir /data/wordpress/wp-content/uploads -pv
    mkdir: created directory '/data/wordpress'
    mkdir: created directory '/data/wordpress/wp-content'
    mkdir: created directory '/data/wordpress/wp-content/uploads'
    
    [root@NFS ~]#vim /etc/exports
    /data/wordpress/wp-content/uploads 10.0.0.*(rw,no_root_squash) 
    [root@NFS ~]#setfacl -R -m u:apache:rwx /data/wordpress
    [root@NFS ~]#exportfs -r
    [root@NFS ~]#exportfs -v
    /data/wordpress/wp-content/uploads 10.0.0.*(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
    LAP1:10.0.0.7
    
    [root@lap1 ~]#yum install nfs-utils.x86_64 -y
    
    [root@lap1 ~]#showmount -e 10.0.0.8
    Export list for 10.0.0.8:
    /data/wordpress/wp-content/uploads 10.0.0.*
    
    [root@lap1 ~]#vim /etc/fstab
    10.0.0.8:/data/wordpress/wp-content/uploads /data/wordpress/wp-content/uploads nfs4 defaults,_netdev 0 0
    
    [root@lap1 ~]#mount -a
    [root@lap1 ~]#df -h
    Filesystem                                   Size  Used Avail Use% Mounted on
    devtmpfs                                     1.9G     0  1.9G   0% /dev
    tmpfs                                        1.9G     0  1.9G   0% /dev/shm
    tmpfs                                        1.9G   12M  1.9G   1% /run
    tmpfs                                        1.9G     0  1.9G   0% /sys/fs/cgroup
    /dev/mapper/centos-root                      100G  2.7G   98G   3% /
    /dev/mapper/centos-data                       50G   85M   50G   1% /data
    /dev/sda1                                   1014M  152M  863M  15% /boot
    tmpfs                                        378M     0  378M   0% /run/user/0
    10.0.0.8:/data/wordpress/wp-content/uploads   50G  390M   50G   1% /data/wordpress/wp-content/uploads

    挂载完成,在LAP1上传一个图片,测试文件成功存放在NFS服务上.

     此时已经成功了一半了,继续挂载到LAP2

    [root@lap2 ~]#yum install nfs-utils.x86_64 -y
    
    [root@lap2 ~]#showmount -e 10.0.0.8
    Export list for 10.0.0.8:
    /data/wordpress/wp-content/uploads 10.0.0.*
    
    [root@lap2 ~]#vim /etc/fstab
    10.0.0.8:/data/wordpress/wp-content/uploads /data/wordpress/wp-content/uploads nfs4 defaults,_netdev 0 0
    
    [root@lap2 ~]#mount -a
    [root@lap2 ~]#df -h
    Filesystem                                   Size  Used Avail Use% Mounted on
    devtmpfs                                     1.9G     0  1.9G   0% /dev
    tmpfs                                        1.9G     0  1.9G   0% /dev/shm
    tmpfs                                        1.9G   12M  1.9G   1% /run
    tmpfs                                        1.9G     0  1.9G   0% /sys/fs/cgroup
    /dev/mapper/centos-root                      100G  2.7G   98G   3% /
    /dev/sda1                                   1014M  152M  863M  15% /boot
    /dev/mapper/centos-data                       50G   85M   50G   1% /data
    tmpfs                                        378M     0  378M   0% /run/user/0
    10.0.0.8:/data/wordpress/wp-content/uploads   50G  391M   50G   1% /data/wordpress/wp-content/uploads

    测试是否有LAP1上传的图片

    配置DNS服务器:

    DNS服务器:10.0.0.100
    
    [root@DNS ~]vim /etc/named.conf  
    
      listen-on port 53 { loaclhost; };
      allow-query { any; };
      dnssec-enable no;
      dnssec-validation no;
    
    [root@DNS ~]vim  /etc/named.rfc1912.zones
    zone "guangrui.com" {
    type master; 
    file "guangrui.com.zone";
    }; 
     [root@DNS ~]cp -p /var/named/named.localhost /var/named/guangrui.com.zone 
    [root@88 ~]vim /var/named/guangrui.com.zone
    $TTL 1D
    @ IN SOA master admin (
                0 ; serial
                1D ; refresh
                1H ; retry
                1W ; expire
                3H ) ; minimum
           NS master
    master    A 10.0.0.100
    blog      A 10.0.0.7
    blog      A 10.0.0.17
      [root@DNS ~]named-checkconf 
      [root@DNS ~]named-checkzone guangrui.com /var/named/guangrui.com.zone
      [root@DNS ~]rndc reload

    测试DNS

    [root@DNS /var/named]#dig blog.guangrui.com
    
    ; <<>> DiG 9.11.13-RedHat-9.11.13-5.el8_2 <<>> blog.guangrui.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54476
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ; COOKIE: 21df4b79619e813f446e1ad25f6073b6c1ded0665c32d572 (good)
    ;; QUESTION SECTION:
    ;blog.guangrui.com.        IN    A
    
    ;; ANSWER SECTION:
    blog.guangrui.com.    86400    IN    A    10.0.0.17
    blog.guangrui.com.    86400    IN    A    10.0.0.7
    
    ;; AUTHORITY SECTION:
    guangrui.com.        86400    IN    NS    master.guangrui.com.
    
    ;; ADDITIONAL SECTION:
    master.guangrui.com.    86400    IN    A    10.0.0.100
    
    ;; Query time: 0 msec
    ;; SERVER: 10.0.0.100#53(10.0.0.100)
    ;; WHEN: Tue Sep 15 15:56:38 CST 2020
    ;; MSG SIZE  rcvd: 143

     搞定!

  • 相关阅读:
    Linux 信号:signal 与 sigaction
    Linux shell(1)
    【Beta阶段】第一次scrum meeting
    【Beta阶段】计划安排
    团队作业7——Alpha冲刺之事后诸葛亮
    团队作业5——测试与发布(Alpha版本)
    【Alpha阶段汇总】成果展示与体验总结
    【Alpha阶段】第七次scrum meeting
    【Alpha阶段】第六次scrum meeting
    【Alpha阶段】第五次scrum meeting
  • 原文地址:https://www.cnblogs.com/huangguangrui/p/13669785.html
Copyright © 2011-2022 走看看