马哥博客作业第十六周

架构题:前端有一个 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

 搞定!

原文地址:https://www.cnblogs.com/huangguangrui/p/13669785.html