Ubuntu实现电商网站+Mysql主从复制+NFS
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的更多相关文章
- Django项目之Web端电商网站的实战开发(一)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶电商项目开发流程 三丶项目需求 四丶项目架构概览 五丶项目数据库设计 六丶项目框架搭建 一丶项目介绍 产品 ...
- 搭建LAMP环境部署Ecshop电商网站
实战-部署Ecshop电商网站 实验环境 Centos7 ip:192.168.121.17 一.关闭防火墙和selinux [root@localhost ~]# systemctl stop fi ...
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...
- 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车
阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...
- 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念
一.前言 DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...
- 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发
阅读目录 前言 单元测试 纠正错误,重新出发 结语 一.前言 实际编码已经写了2篇了,在这过程中非常感谢有听到观点不同的声音,借着这个契机,今天这篇就把大家提出的建议一个个的过一遍,重新整理,重新出发 ...
随机推荐
- 手把手教你怎么将linux的一个函数性能搞奔溃
static struct fib_table *fib_empty_table(struct net *net){ u32 id; for (id = 1; id <= RT_TA ...
- spring接口多实现类,该依赖注入哪一个?
一.问题的描述 在实际的系统应用开发中我经常会遇到这样的一类需求,相信大家在工作中也会经常遇到: 同一个系统在多个省份部署. 一个业务在北京是一种实现方式,是基于北京用户的需求. 同样的业务在上海是另 ...
- windows系统-不能打印问题:PDF打印软件正常打开PDF文件,点击打印后软件卡死并提示未响应(No response)
电脑突然出现PDF软件卡死问题,导致无法打印:初步思路记录: 导致问题出现的原因可能为文件问题(文件过大,打印机容量小).打印机问题(打印机未连接.故障等).电脑驱动问题(打印机驱动损坏).电脑补丁问 ...
- TFT-eSPI入门使用教程
一.准备资料 开发板:ESP32-S3 屏驱动是:ST7789_DRIVER 开发环境:VS Code + PlatformIO 注意:以上是我使用的环境,不一定需要和是使用的东西一样,这里主要是学习 ...
- C#,使用NPOI,导出excel文件
/// <summary> /// 导出excel文件 /// </summary> /// <param name="dt">Table表数据 ...
- 2020年12月-第01阶段-前端基础-HTML CSS 项目阶段(三)
品优购项目(三) 1. 首页制作 1). 楼层区 floor 注意这个floor 一个大盒子 包含, 不要给高度,内容有多少,算多少 2). 家用电器模块 这个模块 简单 不需要写样式 版心居中对齐 ...
- JAVA中容器设计的进化史:从白盒到黑盒,再到跻身为设计模式之一的迭代器
大家好,又见面了. 在我们的项目编码中,不可避免的会用到一些容器类,我们可以直接使用List.Map.Set.Array等类型.当然,为了体现业务层面的含义,我们也会根据实际需要自行封装一些专门的Be ...
- 使用Gitlab CI/CD功能在本地部署 Spring Boot 项目
前提条件: 1.Docker安装Gitlab,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13814730.html 2.Docker安装Gitlab-runn ...
- Kubernetes Operator: Operator
Operator 就可以看成是 CRD 和 Controller 的一种组合特例,Operator 是一种思想,它结合了特定领域知识并通过 CRD 机制扩展了 Kubernetes API 资源,使用 ...
- 使用 Auditbeat 模块监控 shell 命令
使用 Auditbeat 模块监控 shell 命令 Auditbeat Audited 模块可以用来监控所有用户在系统上执行的 shell 命令.在终端用户偶尔才会登录的服务器上,通常需要进行监控. ...