Ubuntu实现电商网站+Mysql主从复制+NFS

1、环境准备

提前准备:Mysql8.0.30安装包、Mysql安装脚本、shopxo2.3.0安装包、DNS脚本

服务器 IP地址 作用 系统版本
Mysql-master 10.0.0.103 shopxo网站主数据库 Ubuntu2004
Mysql-slave 10.0.0.104 shopxo网站备份数据库 Ubuntu2004
NFS-data 10.0.0.105 shopxo图片视频等多媒体大文件存放NFS Ubuntu2004
NFS-backup 10.0.0.106 NFS备份服务器 Ubuntu2004
shopxo1 10.0.0.101 shopxo1网站 Ubuntu2004
shopxo2 10.0.0.102 shopxo1备份网站 Ubuntu2004
DNS 10.0.0.100 域名解析 Ubuntu2004

2、搭建Mysql主服务器

# mysql-master:(提前脚本安装好mysql)
[root@mysql-master ~]#vim /etc/my.cnf #更改配置文件
[mysqld]
server-id=104
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
default_authentication_plugin=mysql_native_password
gtid_mode=ON
enforce_gtid_consistency
[client]
socket=/data/mysql/mysql.sock
[root@mysql-master ~]#systemctl restart mysql
[root@mysql-master ~]#mysql -p123456
mysql> create user repluser@'10.0.0.%' identified by '123456'; #创建主从同步账号并授权
mysql> grant replication slave on *.* to repluser@'10.0.0.%'; mysql> create user shopxo@'10.0.0.%' identified by '123456'; #创建主从同步账号并授权
mysql> grant all on shopxo.* to shopxo@'10.0.0.%';

3、搭建Mysql从服务器

# mysql-slave: (提前脚本安装好mysql)
[root@ubuntu2004 ~]#vim /etc/my.cnf
[mysqld]
server-id=104
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
default_authentication_plugin=mysql_native_password
gtid_mode=ON
enforce_gtid_consistency
[client]
socket=/data/mysql/mysql.sock
[root@ubuntu2004 ~]#systemctl restart mysql
[root@ubuntu2004 ~]#mysql -p123456
CHANGE MASTER TO
MASTER_HOST='10.0.0.103',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1; mysql> start slave;

4、搭建nfs-backup服务器

## nfs-backup:
[root@nfs-backup ~]#apt install -y rsync
[root@nfs-backup ~]#vim /etc/rsyncd.conf
uid = root
gid = root
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
[backup]
path = /data/backup/
comment = backup dir
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pas [root@nfs-backup ~]#echo rsyncuser:123456 > /etc/rsync.pas
[root@nfs-backup ~]#chmod 600 /etc/rsync.pas
[root@nfs-backup ~]#mkdir /data/backup -p
[root@nfs-backup ~]#systemctl restart rsync.service # 105服务器nfs-data验证:
[root@nfs-data ~]#rsync rsyncuser@10.0.0.106::backup
Password:
drwxr-xr-x 4,096 2022/09/07 20:18:38 .

5、搭建nfs-data服务器

# 105服务器nfs-data:

[root@nfs-data ~]#apt install -y rsync
[root@nfs-data ~]#tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local
[root@nfs-data ~]#cd /usr/local
[root@nfs-data local]#mv GNU-Linux-x86/ sersync2
[root@nfs-data local]#cd sersync2/
[root@nfs-data sersync2]#vim confxml.xml
<rsync>
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify> <sersync>
<localpath watch="/data/www/">
<remote ip="10.0.0.106" name="backup"/> #更改为备份服务器的ip地址
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync> <plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin> <plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head> [root@nfs-data sersync2]#mkdir /data/www -p
[root@nfs-data sersync2]#echo 123456 > /etc/rsync.pas
[root@nfs-data sersync2]#chmod 600 /etc/rsync.pas
[root@nfs-data sersync2]#screen
[root@nfs-data sersync2]#./sersync2 -dro ./confxml.xml [root@nfs-data sersync2]#vim /etc/exports
/data/www 10.0.0.0/24(rw,all_squash,anonuid=33,anongid=33)
[root@nfs-data sersync2]#exportfs -r
[root@nfs-data sersync2]#exportfs -v

6、搭建shopxo1主服务器

101服务器shopxo1
[root@shopxo1 ~]#apt -y install apache2 php7.4-fpm libapache2-mod-php7.4 php7.4-mysql php7.4-json php7.4-xml php7.4-mbstring php7.4-zip php7.4-gd php7.4-curl
[root@shopxo1 ~]#rm -f /var/www/html/index.html
[root@shopxo1 ~]#unzip shopxo-v2.3.0.zip
[root@shopxo1 ~]#mv shopxo-v2.3.0/* /var/www/html/
[root@shopxo1 ~]#chown -R www-data. /var/www/html
[root@shopxo1 ~]#systemctl restart apache2.service [root@shopxo1 ~]#scp -r /var/www/html/public/static/upload/* 10.0.0.105:/data/www [root@shopxo1 ~]#vim /etc/fstab
10.0.0.105:/data/www /var/www/html/public/static/upload/ nfs _netdev 0 0
[root@shopxo1 ~]#mount -a

7、搭建shopxo1备服务器

102服务器shopxo2
[root@shopxo2 ~]#apt -y install apache2 php7.4-fpm libapache2-mod-php7.4 php7.4-mysql php7.4-json php7.4-xml php7.4-mbstring php7.4-zip php7.4-gd php7.4-curl
[root@shopxo2 ~]#rm -f /var/www/html/index.html
[root@shopxo2 ~]#unzip shopxo-v2.3.0.zip
[root@shopxo2 ~]#mv shopxo-v2.3.0/* /var/www/html/
[root@shopxo2 ~]#chown -R www-data. /var/www/html
[root@shopxo2 ~]#systemctl restart apache2.service [root@shopxo2 ~]#vim /etc/fstab
10.0.0.105:/data/www /var/www/html/public/static/upload/ nfs _netdev 0 0
[root@shopxo2 ~]#mount -a

8、搭建DNS服务器

dns
[root@DNS ~]#apt install -y bind9 bind9-utils
[root@DNS ~]#vim install_dns.sh
DOMAIN=wang.org
HOST=www
HOST_IP=10.0.0.101 #修改成需要解析的域名
....
[root@DNS ~]#chmod +x install_dns.sh
[root@DNS ~]#./install_dns.sh
$TTL 1D
@ IN SOA master admin (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.100
www A 10.0.0.101
www A 10.0.0.102

Ubuntu实现电商网站+Mysql主从复制+NFS的更多相关文章

  1. Django项目之Web端电商网站的实战开发(一)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶电商项目开发流程 三丶项目需求 四丶项目架构概览 五丶项目数据库设计 六丶项目框架搭建 一丶项目介绍 产品 ...

  2. 搭建LAMP环境部署Ecshop电商网站

    实战-部署Ecshop电商网站 实验环境 Centos7 ip:192.168.121.17 一.关闭防火墙和selinux [root@localhost ~]# systemctl stop fi ...

  3. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  4. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  5. 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

     阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...

  6. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

  7. 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

    阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...

  8. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

    阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...

  9. 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发

    阅读目录 前言 单元测试 纠正错误,重新出发 结语 一.前言 实际编码已经写了2篇了,在这过程中非常感谢有听到观点不同的声音,借着这个契机,今天这篇就把大家提出的建议一个个的过一遍,重新整理,重新出发 ...

随机推荐

  1. Windows下ESP32 环境搭建(基于esp-idf FreeRTOS)

    1. 之前的尝试(失败的尝试) 咸鱼买了3块ESP32开发板.背面写了NODEMCU v1.1,好像这玩意可以直接写lua,也可以刷Micropython写python,还可以用Arduino IDE ...

  2. GoogleTest环境配置以及应用

    1 GoogleTest源码编译: GoogleTest代码仓库URL: https://github.com/google/googletest.git 下载源代码: git clone --bra ...

  3. 向日葵远程RCE漏洞分析及漏洞利用脚本编写

    0x00 漏洞概述 向日葵是一款免费的,集远程控制电脑.手机.远程桌面连接.远程开机.远程管理.支持内网穿透等功能的一体化远程控制管理软件.如果想要手机远控电脑,或者电脑远控手机可以利用向日葵:如果是 ...

  4. [CTSC2007]数据备份Backup (贪心)

    题面 Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐 ...

  5. 【java】学习路径21-基本类型的包装类

    int i =100; //Integer i2 = new Integer(100); //我们发现已被弃用,现在我们一般的方法是使用valueOf Integer i2 = null; i2 = ...

  6. 输入a、b、c三个整数,按先大后小的顺序输出a、b和c。注意请使用指针变量的方式进行比较和输出。

    `void swap(int *a,int *b,int c){ if(a < *b){ int temp = *a; //防止temp没有初始化 随机存放地址指向系统工作区间 可以对temp初 ...

  7. HBase 安装与配置及常用Shell命令

    HBase 安装与配置 首要配置 配置时间同步(所有节点上执行) yum -y install chrony vi /etc/chrony.conf #写入(7版本用server:8版本用pool): ...

  8. Sentinel源码分析-滑动窗口统计原理

    滑动窗口技术是Sentinel比较关键的核心技术,主要用于数据统计 通过分析StatisticSlot来慢慢引出这个概念 @Override public void entry(Context con ...

  9. shell实现自动挂载优盘

    #!/bin/sh is_empty_dir(){ return `ls -A $1|wc -w` } is_usb_in(){ return `dmesg |tail -100000|grep -i ...

  10. 使用filebeat接收rsyslog的日志

    安装 下载好rpm包后直接安装 curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.7.0-x86_ ...