高并发购物商城系统搭建实战
实验需求
搭建一个gpmall应用商城系统,所使用的技术有:数据库主从+书写分离、zookeeper+Kafka、redis、
nginx部署负载均衡
| 主机 | IP****地址 | 部署的服务 |
|---|---|---|
| mycat | 192.168.100.10 | zookeeper、Kafka、部署mycat |
| db1 | 192.168.100.20 | zookeeper、Kafka、数据库主库 |
| db2 | 192.168.100.30 | zookeeper、Kafka、数据库从库 |
| node4 | 192.168.100.40 | httpd |
操作流程:
配置环境:
步骤一:配置node4主机的yum源
rm -rf /etc/yum.repos.d/*
vim /etc/yum.repos.d/server.repo
#在server.repo文件内添加以下内容
[aa]
name=aa1
baseurl=file:///mnt
enabled=1
gpgcheck=0
#挂载
mount /dev/cdrom /mnt
步骤二:在node4主机安装httpd服务
yum -y install httpd # 安装httpd服务
此时页面资源存放的路径为/var/www/html/目录下
步骤三:把项目资源下载到node4主机的/var/www/html/目录下

systemctl restart httpd # 启动httpd服务
systemctl enable httpd
步骤四:配置其他三台主机的yum源
因为项目里面有yum源,所以需要配置其他三台主机的yum源指向项目的yum地址
# yun地址为:
/var/www/html/project4/gpmall-repo# 配置其他三台主机的yum源
rm -rf /etc/yum.repos.d/*
vim /etc/yum.repos.d/server.repo
# 在server.repo文件内添加以下内容
[aa]
name=a1
baseurl=http://192.168.100.40/project4/gpmall-repo
enabled=1
gpgcheck=0mount /dev/cdrom /mnt
步骤五:在node1中配置hosts文件
vim /etc/hosts
# 在hosts文件内容添加以下内容
192.168.100.10 mycat
192.168.100.20 db1
192.168.100.30 db2
192.168.100.10 zookeeper1
192.168.100.20 zookeeper2
192.168.100.30 zookeeper3
192.168.100.10 redis
192.168.100.10 mysql.mall
192.168.100.10 zk1.mall
192.168.100.20 zk2.mall
192.168.100.30 zk3.mall
192.168.100.10 kafka1.mall
192.168.100.20 kafka2.mall
192.168.100.30 kafka3.mall
192.168.100.10 redis.mallscp /etc/hosts root@db2:/etc/hosts # 把文件传给db2
scp /etc/hosts root@db3:/etc/hosts # 把文件传给db2
部署数据库主从:
步骤一:在db2和db3中安装mariadb数据库
# 安装数据库
yum -y install mariadb mariadb-server
# 启动maridb服务,在启动完成后才会设置开机自启
systemctl restart mariadb;systemctl enable mariadb
步骤二:数据库初始化
mysql_secure_installation # 初始化指令
# 步骤:
回车
y
设置密码
确认密码
y
n
y
y
步骤三:登录数据库,测试是否初始化成功
mysql -uroot -p123456 # 123465为初始化过程中设置的密码
步骤四:修改数据库配置文件(配置主从数据库)
# 在db2主机中
vim /etc/my.cnf
# 在my.cnf文件中添加以下内容
[mysqld]
log_bin=mysql-bin
server_id=20
# 配置主从数据库中,主数据库的server_id值应该小于从数据库的server_id值# 在db3中
vim /etc/my.cnf
# 在my.cnf文件中添加以下内容
[mysqld]
log_bin=mysql-bin
server_id=30

步骤五:在db2和db3中重启mariadb服务(因为刚才修改my.cnf文件)
systemctl restart mariadb
步骤六:db2主机在数据库中配置主从
mysql -uroot -p123456 # 进入数据库# 授权(运训root用户操作数据库中所有表,并允许该用户从任意IP地址访问)
grant all privileges on *.* to root@'%' identified by '123456';
# 创建一个user用户,当指定ip地址的主机访问数据库时使用该用户。
grant replication slave on *.* to 'user'@'192.168.100.30' identified by '123456';
# 刷新
flush privileges;
步骤七:db3主机在数据库中配置主从
mysql -uroot -p123456 # 进入数据库
grant all privileges on *.* to root@'%' identified by '123456';
change master to master_host='192.168.100.20',master_user='user',master_password='123456';
start slave; # 启动从库
show slave status \G; # 查看从库状态
步骤八:测试
# 在node2的数据库中
create database test; # 创建数据库
show databases; # 查看数据库

# 在db3的数据库中
show databases; # 查看是否存在test数据库
启动Kafka
步骤一:三台主机都启动zookeeper
zkServer.sh start # 启动zookeeper
zkServer.sh status # 可以查看三台主机分别为folloewe和leader
步骤二:三台主机启动Kafka
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
步骤三:使用jps查看Kafka服务是否开启
jps

应用集群
步骤一:把gpmall项目数据库导入db2主机中

步骤二:把gpmall.sql文件导入数据库中;
create database gpmall;
use gpmall;
source /root/gpmall.sql;
show tables;

部署读写分离:
步骤一:在mycat主机中下载mycat软件包

步骤二:解压mycat软件包
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
步骤三:修改/etc/profile文件
vim /etc/profile
# 在profile文间中添加以下内容
export MYCAT_HOME=/usr/local/mycat
source /etc/profile
步骤四:编辑schema.xml文件(配置读写分离的数据库)
# 设置数据库写入节点为db1,读取节点db2
vim /usr/local/mycat/conf/schema.xml
# 把schema.xml文件中文件内容替换成以下
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="gpmall" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema><dataNode name="dn1" dataHost="localhost1" database="gpmall" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.100.20:3306" user="root" password="123456"><readHost host="hostS1" url="192.168.100.30:3306" user="root" password="123456" /></writeHost></dataHost>
</mycat:schema>
步骤五:编辑server.xml文件
vim /usr/local/mycat/conf/server.xml
# 在server.xml文件中删除以下内容
<user name="root"><property name="password">user</property><property name="schemas">TESTDB</property><property name="readOnly">true</property>
</user>
# 并修改root用户的密码123456,访问mycat的逻辑库为USERDB,具体操作如下:<property name="password">123456</property><property name="schemas">gpmall</property>
步骤六:启动mygcat服务
/usr/local/mycat/bin/mycat start
步骤七:查看服务是否开启
ss -anlt # 查看8066和9066端口是否开启
# 8066为管理端口,9066为数据端口

步骤七:安装MariaDB
# 安装前提,配置好yum地址为node4主机的/Project4/gmall-repo目录
yum -y install MariaDB-clientmysql -uroot -p123456 -h127.0.0.1 -P8066 #进入数据库
show databases;
use USERDB;
show tables;
select * from company;
insert into company values(2,"basketball","usa");
select * from company;
步骤八:验证mycat服务对数据库读写操作分离
mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show@@datasource;'

部署redis
步骤一:在mycat主机安装redis
yum -y install redis
步骤二:修改redis.conf配置文件
vim /etc/redis.conf
# 在redis.conf文件中修改以下内容
bind 127.0.0.1 # 注释此行
protected-mode nosystemctl restart redis
systemctl enable redis
步骤三:查看redis服务是否开启
ss-anlt

部署nginx(实现负载均衡)
步骤一:下载jar包到db2和db3主机中

步骤二:在db2,db3主机中启动jar包
nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &
nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar &
nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar &
nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &
步骤三:查看jar包是否启动

步骤四:在mycat主机中安装nginx
yum -y install nginx
步骤五:删除nginx里面的页面
rm -rf /usr/share/nginx/html/
步骤六:把前端页面dist文件下载到mycat主机中

步骤七:把前端页面添加进入nginx
cp -rvf dist/* /usr/share/nginx/html/
步骤八:修改nginx配置文件实现负载均衡
vim /etc/nginx/conf.d/default.conf
# 在default.conf文件的首行添加以下内容
upstream myuser {server 192.168.100.20:8082;server 192.168.100.30:8082;ip_hash;}
upstream myshopping {server 192.168.100.20:8081;server 192.168.100.30:8081;ip_hash;
}
upstream mycashier {server 192.168.100.20:8083;server 192.168.100.30:8083;ip_hash;
}
#server {
#在server中添加以下内容location /user {proxy_pass http://myuser;}location /shopping {proxy_pass http://myshopping;}location /cashier {proxy_pass http://mycashier;}
#}systemctl restart nginx # 启动nginx
systemctl enable nginx
ss -anlt # 查看80端口是否启动

步骤九:访问页面192.168.100.10

