马哥博客作业第十六周
架构题:前端有一个 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 "\033[01;31m' END='\033[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 "\033[01;31m' END='\033[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 "\033[01;31m' END='\033[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\]/a\skip_name_resolve=on' /etc/my.cnf sed -ri '/\[mysqld\]/a\datadir=/data/mysql' /etc/my.cnf sed -ri '/\[mysqld\]/a\server-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 "\033[01;31m' END='\033[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\]/a\skip_name_resolve=on' /etc/my.cnf sed -ri '/\[mysqld\]/a\datadir=/data/mysql' /etc/my.cnf sed -ri '/\[mysqld\]/a\server-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 status\G; *************************** 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
搞定!