1+X 云计算运维与开发(中级)案例实战——分布式部署集群应用商城系统

这篇具有很好参考价值的文章主要介绍了1+X 云计算运维与开发(中级)案例实战——分布式部署集群应用商城系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

学而不思则罔,思而不学则殆。

IP 主机名 节点
192.168.200.10 mycat Mycat 中间件服务节点
192.168.200.20 db1 MariaDB 数据库集群主节点
192.168.200.30 db2 MariaDB 数据库集群从节点
192.168.200.40 zookeeper1 集群节点
192.168.200.50 zookeeper2 集群节点
192.168.200.60 zookeeper3 集群节点
192.168.200.70 redis 消息队列服务节点
192.168.200.80 nginx Nginx 服务器
192.168.200.90 jar1 Tomcat1 节点
192.168.200.100 jar2 Tomcat2 节点

思路

总的来说,机子很多,操作却十分简单,思路与单节点部署应用商城系统差不了多少,只不过多了对zookeeper,kafka,mycat 分离主从读写数据库的操作。所以我们只要一步一步的操作,将大的拆解成小的,再加以练习,很快就能掌握。

1.修改主机名,配置主机映射,配置 yum源(ftp)
2.基于 mycat中间件 构建读写分离的主从数据库集群,可参考我的另一篇文章:https://blog.csdn.net/famudd/article/details/123687877?spm=1001.2014.3001.5501
3.部署 zookeeper集群kafka集群(最好了解一下kafka和zookeeper之间的关系)
4.配置消息队列 redis服务
5.配置前端服务 nginx
6.开启后端服务,也就是4个jar包

注意:10台虚拟机要注意自己的磁盘空间是否充足,另外,如果虚拟内存不够用的话,咱们大可以把每台虚拟的内存调小一点


实操

1.修改主机名,配置主机映射,配置yum源(ftp)

1.1 修改主机名

修改主机名这里只列举一台机子的配法,其他类似,代码如下:

[root@xnode1 ~]# hostnamectl set-hostname mycat
[root@xnode1 ~]# bash
[root@mycat ~]# 

1.2 配置主机映射

[mycat、db1、db2]:
/etc/hosts文件中添加以下内容:

192.168.200.10 mycat 
192.168.200.20 db1
192.168.200.30 db2

[zookeeper1,zookeeper2,zookeeper3]:
/etc/hosts文件中添加以下内容:

192.168.200.40 zookeeper1
192.168.200.50 zookeeper2
192.168.200.60 zookeeper3

[jar1、jar2]:
/etc/hosts文件中添加以下内容:

192.168.200.10 mysql.mall
192.168.200.40 zk1.mall
192.168.200.50 zk1.mall
192.168.200.60 zk1.mall
192.168.200.40 kafka1.mall
192.168.200.50 kafka1.mall
192.168.200.60 kafka1.mall
192.168.200.70 redis.mall
192.168.200.80 nginx.mall
192.168.200.90 jar1
192.168.200.100 jar2

看到这里不要觉得乱,其实很简单,接下来我来讲解一下。

先来看一下单节点部署应用商城系统中我们主机映射的配置:

192.168.200.11 mall     				--这一行将决定你的kafka进程是否会正常运行
192.168.200.11 kafka.mall
192.168.200.11 mysql.mall
192.168.200.11 redis.mall
192.168.200.11 zookeeper.mall
————————————————
版权声明:本文为CSDN博主「famudd」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/famudd/article/details/123559715
(这是我的文章>o<

1.这里之所以 ip地址只有 192.168.200.11,是因为我们之前做单节点的时候所有服务和集群都在同一台机子上,所以当我们把它们拆分的时候,自然要给不同的服务和集群赋予不同的IP地址
2.我们把拆分看成树状拆分,并且拆的层级为 2
(咱也是灵魂画师)

1+X 云计算运维与开发(中级)案例实战——分布式部署集群应用商城系统
对应关系:

单节点 多节点
mysql.mall mycat
zookeeper.mall 三个zk1.mall
kafka.mall 三个kafka.mall
mall jar1、jar2
redis.mall redis.mall
nginx.mall nginx.mall

小疑惑:

同样是后端包中,似乎对kafka和zookeeper的id不做要求,因为我讲zk1改为zk1,zk2,zk3或者zookeeper1,zookeeper2,zookeeper3仍然正常运行

1.3 配置yum源(ftp)

用到的gpmall-repo和CentOS-7-x86_64-DVD-1511.iso需要自行准备

随便选中一位幸运虚拟机(我的选择是 mycat,就决定是你了)作为我们的源yum节点,配置本地yum源,然后安装ftp,作为ftp服务器,将 /opt 作为共享文件夹
代码如下:

[root@mycat ~]# rm -rf /etc/yum.repos.d/*
[root@mycat ~]# cat /etc/yum.repos.d/local.repo 
[centos]
name=centos
baseurl=file:///opt/cdrom
gpgcheck=0
[gpmall]
name=gpmall
baseurl=file:///opt/gpmall-repo
gpgcheck=0
[root@mycat ~]# yum repolist
Loaded plugins: fastestmirror
centos                                                                          | 3.6 kB  00:00:00     
gpmall                                                                          | 2.9 kB  00:00:00     
(1/3): centos/group_gz                                                          | 155 kB  00:00:00     
(2/3): centos/primary_db                                                        | 2.8 MB  00:00:00     
(3/3): gpmall/primary_db                                                        | 144 kB  00:00:00     
Determining fastest mirrors
repo id                                          repo name                                       status
centos                                           centos                                          3,723
gpmall                                           gpmall                                            165
repolist: 3,888

使用配置好的本地yum源安装ftp服务,配置并启动

[root@mycat ~]# yum -y install vsftpd
[root@mycat ~]# vi /etc/vsftpd/vsftpd.conf
##我们的包在这个路径下
## 在vsftpd.conf文件开头添加共享文件路径信息:
anon_root=/opt
[root@mycat ~]# systemctl restart vsftpd   ## 重启生效

注意! 每台机子都要关闭防火墙!

10台机子固然很麻烦,也有简单的方法,但是这里我们就一个一个的弄,毕竟初学。

关闭防火墙,关闭防火墙,关闭防火墙:

[root@mycat ~]# systemctl stop firewalld
[root@mycat ~]# setenforce 0

以上是对源yum源的配置(防火墙每台机子都要配),接下来我们配置其余机器的yum源,其余的操作一致(所以可以复制粘贴
代码如下:

[root@db1 ~]# rm -rf /etc/yum.repos.d/*
[root@db1 ~]# cat /etc/yum.repos.d/local.repo 
[centos]
name=centos
baseurl=ftp://192.168.200.10/cdrom
gpgcheck=0
enabled=1
[gpmall]
name=gpmall
baseurl=ftp://192.168.200.10/gpmall-repo
gpgcheck=0
enabled=1
[root@db1 ~]# yum repolist
Loaded plugins: fastestmirror
centos                                                                          | 3.6 kB  00:00:00     
gpmall                                                                          | 2.9 kB  00:00:00     
(1/3): centos/group_gz                                                          | 155 kB  00:00:00     
(2/3): centos/primary_db                                                        | 2.8 MB  00:00:00     
(3/3): gpmall/primary_db                                                        | 144 kB  00:00:00     
Determining fastest mirrors
repo id                                          repo name                                       status
centos                                           centos                                          3,723
gpmall                                           gpmall                                            165
repolist: 3,888

2.搭建主从数据库集群

写到这里的时候很想直接把我的另外一篇文章放到这里TAT
这里我就略写,详细的你们去看我那篇文章吧
https://blog.csdn.net/famudd/article/details/123687877?spm=1001.2014.3001.5501

2.1 配置db1

安装mysql

[root@db1 ~]# yum -y install mariadb mariadb-server

启动mariadb,这一步关乎它让不让你初始化mysql

[root@db1 ~]# systemctl start mariadb

初始化mysql

[root@db1 ~]# mysql_secure_installation
[root@db1 ~]# mysql_secure_installation

Enter current password for root (enter for none): #直接回车
OK, successfully used password, moving on...

Set root password? [Y/n] #输入y或者直接回车
New password: #密码必须123456,后面的mycat配置文件硬性需要
Re-enter new password: #在输入一遍123456
Password updated successfully!
Reloading privilege tables..
 ... Success!
 
Remove anonymous users? [Y/n] #输入y或者直接回车
。。。
Disallow root login remotely? [Y/n] #输入n
。。。
Remove test database and access to it? [Y/n] #输入y或者直接回车
。。。
Reload privilege tables now? [Y/n] #输入y或者直接回车


修改 /etc/my.cnf文件
添加以下内容并重启服务:

[mysqld]
log-bin = mysql-bin
binlog-ignore-db = mysql
server-id = 20

datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
symbolic-links = 0

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

[root@db1 ~]# systemctl restart mariadb

如果出现重启失败,那十有八九就是你输入了错误的信息,这时候你可以查日志

在主节点 db1 虚拟机上使用 mysql 命令登录 MariaDB 数据库,授权在任何客户端机器上可以以 root 用户登录到数据库

[root@db1 ~]# mysql -uroot -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.18-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by '123456';
Query OK, 0 rows affected (0.000 sec)

在主节点 db1 数据库上创建一个 user 用户让从节点 db2 连接,并赋予从节点同步主节点数据库的权限


MariaDB [(none)]> grant replication slave on *.* to 'user'@'db2' identified by '123456';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)

2.2 配置db2

db2的前置操作请同步db1到初始化mysql
不用修改配置文件
这里就当你们初始化完了

在从节点 db2 虚拟机上使用 mysql 命令登录 MariaDB 数据库,配置从节点连接主节点的连接信息。master_host 为主节点主机名 db1master_user 为在配置db1中创建的用户 user

[root@db2 ~]# mysql -uroot -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 15
Server version: 10.3.18-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> change master to master_host='db1',master_user='user',master_password='123456';
Query OK, 0 rows affected (0.004 sec)

配置完毕主从数据库之间的连接信息之后,开启从节点服务。使用 **show slave status\G;**命令并查看从节点服务状态,如果 Slave_IO_RunningSlave_SQL_Running 的状态都为 YES,则从节点服务开启成功。


MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> show slave status \G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: db1
                   Master_User: user
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000001
           Read_Master_Log_Pos: 822
                Relay_Log_File: db2-relay-bin.000002
                 Relay_Log_Pos: 1121
         Relay_Master_Log_File: mysql-bin.000001
              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: 822
               Relay_Log_Space: 1428
               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: 20
                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
              Slave_DDL_Groups: 3
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 0
1 row in set (0.000 sec)

2.3 配置mycat

自行准备 Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

解压

[root@mycat ~]# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

赋权限,配系统变量,并使其生效

[root@mycat ~]# chmod 777 /usr/local/mycat/
[root@mycat ~]# echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile
[root@mycat ~]# source /etc/profile

修改配置文件 schema.xml

这里的修改思路在我的另一篇文章里https://blog.csdn.net/famudd/article/details/123687877?spm=1001.2014.3001.5501

注意:另一篇文章里用的数据库是test,这里数据库名是gpmall,注意区分

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="gpmall" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'>
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="gpmall" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.200.20:3306" user="root"
                                   password="123456">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS1" url="192.168.200.30:3306" user="root" password="123456" />
                </writeHost>
        </dataHost>
</mycat:schema>

这里给出需要注意的地方:
1+X 云计算运维与开发(中级)案例实战——分布式部署集群应用商城系统
接下来配置 server.xml文件

[root@mycat ~]# chown root:root /usr/local/mycat/conf/server.xml
## 配置文件末尾
        <user name="root">
                <property name="password">123456</property>
                <property name="schemas">gpmall</property>     ##这里改为gpmall

                <!-- 表级 DML 权限设置 -->
                <!--
                <privileges check="false">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>
                 -->
        </user>
        ##这里原先有几行代码,要删除
</mycat:server>

启动 mycat

[root@mycat ~]# /bin/bash /usr/local/mycat/bin/mycat start

检查是否成功启动

[root@mycat ~]# netstat -ntpl | grep 8066
##netstat如果不能使用,就用yum下载net-tools

出现报错看日志,发现是java没安装

[root@mycat ~]# cat /usr/local/mycat/logs/wrapper.log 
STATUS | wrapper  | 2022/03/25 18:22:01 | --> Wrapper Started as Daemon
STATUS | wrapper  | 2022/03/25 18:22:01 | Launching a JVM...
ERROR  | wrapper  | 2022/03/25 18:22:01 | Unable to start JVM: No such file or directory (2)
ERROR  | wrapper  | 2022/03/25 18:22:01 | JVM exited while loading the application.
STATUS | wrapper  | 2022/03/25 18:22:06 | Launching a JVM...
ERROR  | wrapper  | 2022/03/25 18:22:06 | Unable to start JVM: No such file or directory (2)
ERROR  | wrapper  | 2022/03/25 18:22:06 | JVM exited while loading the application.
STATUS | wrapper  | 2022/03/25 18:22:10 | Launching a JVM...
ERROR  | wrapper  | 2022/03/25 18:22:10 | Unable to start JVM: No such file or directory (2)
ERROR  | wrapper  | 2022/03/25 18:22:10 | JVM exited while loading the application.
STATUS | wrapper  | 2022/03/25 18:22:14 | Launching a JVM...
ERROR  | wrapper  | 2022/03/25 18:22:14 | Unable to start JVM: No such file or directory (2)
ERROR  | wrapper  | 2022/03/25 18:22:14 | JVM exited while loading the application.
STATUS | wrapper  | 2022/03/25 18:22:18 | Launching a JVM...
ERROR  | wrapper  | 2022/03/25 18:22:18 | Unable to start JVM: No such file or directory (2)
ERROR  | wrapper  | 2022/03/25 18:22:18 | JVM exited while loading the application.
FATAL  | wrapper  | 2022/03/25 18:22:18 | There were 5 failed launches in a row, each lasting less than 300 seconds.  Giving up.
FATAL  | wrapper  | 2022/03/25 18:22:18 |   There may be a configuration problem: please check the logs.
STATUS | wrapper  | 2022/03/25 18:22:19 | <-- Wrapper Stopped

安装 java

[root@mycat ~]# yum -y install java1.8.0-openjdk java-1.8.0-openjdk-devel

再次启动,此次成功:

[root@mycat ~]# /bin/bash /usr/local/mycat/bin/mycat start
Starting Mycat-server...
[root@mycat ~]# netstat -ntpl | grep 8066
tcp6       0      0 :::8066                 :::*                    LISTEN      3879/java 
[root@mycat ~]# netstat -ntpl | grep 9066
tcp6       0      0 :::9066                 :::*                    LISTEN      3879/java

还需要在主数据库创建 gpmall 数据库,并且导入 gpmall.sql (自行准备)

MariaDB [(none)]> create database gpmall;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> use gpmall;
Database changed
MariaDB [gpmall]> source /root/gpmall-cluster/gpmall.sql
Query OK, 0 rows affected (0.000 sec)

Query OK, 0 rows affected (0.000 sec)

Query OK, 0 rows affected, 1 warning (0.001 sec)
...
Query OK, 0 rows affected (0.000 sec)

检查读写分离命令

[root@mycat ~]# yum -y install MariaDB-client
[root@mycat ~]# mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show @@datasource;'
+----------+--------+-------+----------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME   | TYPE  | HOST           | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+----------------+------+------+--------+------+------+---------+-----------+------------+
| dn1      | hostM1 | mysql | 192.168.200.20 | 3306 | W    |      0 |    4 | 1000 |      16 |         0 |          0 |
| dn1      | hostS1 | mysql | 192.168.200.30 | 3306 | R    |      0 |    4 | 1000 |      16 |         0 |          0 |
+----------+--------+-------+----------------+------+------+--------+------+------+---------+-----------+------------+

至此,分离读写主从数据库集群搭建完成


3.搭建zookeeper集群和kafka集群

自行准备 zookeeper-3.4.14.tar.gzkafka_2.11-1.1.1.tgz

如果没有说明,那么三台机子zookeeper1、zookeeper2、zookeeper3都将进行相同操作

解压两个压缩包:

[root@zookeeper1 ~]# tar -zxvf zookeeper-3.4.14.tar.gz
[root@zookeeper1 ~]# tar -zxvf kafka_2.11-1.1.1.tgz

3.1 搭建zookeeper集群

重命名 /root/zookeeper-3.4.14/conf/路径下的zoo_sample.cfgzoo.cfg

重命名的原因是 zkEnv.sh 里需要,具体自行查看( /root/zookeeper-3.4.14/bin

[root@zookeeper1 ~]# cd zookeeper-3.4.14/conf/
[root@zookeeper1 conf]# mv zoo_sample.cfg zoo.cfg

编辑 zoo.cfg
在文件末尾添加以下内容:

server.1=192.168.200.40:2888:3888
server.2=192.168.200.50:2888:3888
server.3=192.168.200.60:2888:3888

注意:这里开始3台机子开始不同
创建 /tmp 目录下的 zookeeper 目录,在该目录下创建 myid 文件,文件里分别输入 1,2,3对应他们机子的编号,以下用zookeeper1做示范:

[root@zookeeper1 ~]# mkdir /tmp/zookeeper
[root@zookeeper1 ~]# vi /tmp/zookeeper/myid
1

简单来说就是 myid里的内容不同,分别为 1,2,3

注意:这里开始3台机子开始相同
启动 zookeeper

[root@zookeeper2 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

至此,zookeeper集群搭建完成

3.2 搭建kafka集群

修改配置文件

[root@zookeeper2 ~]# vi kafka_2.11-1.1.1/config/server.properties

21 行:将 0 改为 1\2\3

意思是服务器id号,每台都不一样

     21 broker.id=1

31 行:去掉注释,在 // 后面添加IP地址(例如zookeeper1,则添加 192.168.200.40

意思是开启监听端口

     31 listeners=PLAINTEXT://192.168.200.40:9092

123 行:添加三台机子的IP地址加上 zookeeper 服务的端口号

kafka依赖于zookeeper,所以这里要与zookeepr关联,就需要添加3台机子的IP地址和zookeeper服务的端口号

    123 zookeeper.connect=192.168.200.40:2181,192.168.200.50:2181,192.168.200.60:2181

进入 kafkabin 目录,启动 kafka服务

[root@zookeeper1 bin]# ./kafka-server-start.sh -daemon ../config/server.properties
[root@zookeeper1 bin]# jps
3592 QuorumPeerMain
4216 Kafka
5418 Jps

测试 kafka

[root@zookeeper1 bin]# ./kafka-topics.sh --create --zookeeper 192.168.200.40:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test".
[root@zookeeper2 bin]# ./kafka-topics.sh --list -zookeeper 192.168.200.40:2181
test

至此,kafka集群搭建完成


4. 搭建redis服务器

redis机 上安装 redis服务
代码如下:

[root@redis ~]# yum -y install redis

修改 redis服务 的配置文件 /etc/redis.conf

[root@redis ~]# vi /etc/redis.conf

第61行:将该行注释

     61 #bind 127.0.0.1

第80行:讲该行的 yes 改为 no

     80 protected-mode no

使配置生效

[root@redis ~]# systemctl restart redis

至此,消息队列服务redis配置完成

配置文件详解具体请看这篇文章,转载自:https://www.cnblogs.com/Draymonder/p/11938114.html


5.配置前端服务器nginx

nginx机 上安装 nginx服务

[root@nginx ~]# yum -y install nginx

修改配置文件 ( /etc/nginx/conf.d/default.conf)
在文件开头添加以下内容:

upstream myuser{
                server 192.168.200.90:8082;
                server 192.168.200.100:8082;
                ip_hash;
                }
upstream myshopping{
                server 192.168.200.90:8081;
                server 192.168.200.100:8081;
                ip_hash;
                }
upstream mycashier{
                server 192.168.200.90:8083;
                server 192.168.200.100:8083;
                ip_hash;
                }

在 " #error_page 404 "上一行添加以下内容:

     24     location / {
     25         root   /usr/share/nginx/html;
     26         index  index.html index.htm;
     27     }
     28     location /user{
     29                 proxy_pass http://myuser;
     30                 }
     31     location /shopping{
     32                 proxy_pass http://myshopping;
     33                 }
     34     location /cashier{
     35                 proxy_pass http://mycashier;
     36                 }

最终的结果为(截至38行):

      1 upstream myuser{
     2                 server 192.168.200.90:8082;
     3                 server 192.168.200.100:8082;
     4                 ip_hash;
     5                 }
     6 upstream myshopping{
     7                 server 192.168.200.90:8081;
     8                 server 192.168.200.100:8081;
     9                 ip_hash;
    10                 }
    11 upstream mycashier{
    12                 server 192.168.200.90:8083;
    13                 server 192.168.200.100:8083;
    14                 ip_hash;
    15                 }
    16 
    17 server {
    18     listen       80;
    19     server_name  localhost;
    20 
    21     #charset koi8-r;
    22     #access_log  /var/log/nginx/host.access.log  main;
    23 
    24     location / {
    25         root   /usr/share/nginx/html;
    26         index  index.html index.htm;
    27     }
    28     location /user{
    29                 proxy_pass http://myuser;
    30                 }
    31     location /shopping{
    32                 proxy_pass http://myshopping;
    33                 }
    34     location /cashier{
    35                 proxy_pass http://mycashier;
    36                 }
    37 
    38     #error_page  404              /404.html;

将前端文件从 /etc/gpmall-cluster/dist 中移至 /usr/share/nginx/html/

[root@nginx ~]# rm -rf /usr/share/nginx/html/*
[root@nginx ~]# cp -R /root/gpmall-cluster/dist/* /usr/share/nginx/html/

前端文件需要自行准备

启动 nginx服务

[root@nginx ~]# systemctl start nginx

至此nginx的配置结束


6.启动后端服务

接下来对 jar1jar2 机子进行相同操作

安装 java

[root@jar1 ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

一定要按照顺序启动4个.jar包,jar1、jar2操作相同

[root@jar1 gpmall-cluster]# nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar &
[1] 3583
[root@jar1 gpmall-cluster]# nohup: ignoring input and appending output to ‘nohup.out’

[root@jar1 gpmall-cluster]# nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &
[2] 3624
[root@jar1 gpmall-cluster]# nohup: ignoring input and appending output to ‘nohup.out’

[root@jar1 gpmall-cluster]# nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &
[3] 3654
[root@jar1 gpmall-cluster]# nohup: ignoring input and appending output to ‘nohup.out’

[root@jar1 gpmall-cluster]# nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar &
[4] 3685
[root@jar1 gpmall-cluster]# nohup: ignoring input and appending output to ‘nohup.out’

-------------------------------------------------------------------------------------
[root@jar1 gpmall-cluster]# jobs
[1]   Running                 nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar &
[2]   Running                 nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &
[3]-  Running                 nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &
[4]+  Running                 nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar &

说明:每输入一遍 nohup命令之后,它会自动弹出一个提示,所以一共输入了 四次nohup,如果输入的结果 不正常(正不正常看[1]这样的提示,一般来讲[1],[2],[3],[4]),请 kill进程然后排错后重新按照顺序启动,最后,请 关闭防火墙

附:
查看进程(安装完java后):jps、jobs
强制杀进程:kill -9 <进程号>


7.最后

浏览器中输入nginx机子的IP地址(前端):

界面显示出来和单节点不一样,因为我们这里用的gpmall.sql 和单节点部署的时候导入的gpmall.sql不一样

1+X 云计算运维与开发(中级)案例实战——分布式部署集群应用商城系统
该界面如有报错或者错误显示,请参考这篇文章,转载自:
https://www.cnblogs.com/sh1ny2/p/13976801.html


总结

理解和练习是最好的学习文章来源地址https://www.toymoban.com/news/detail-422186.html

到了这里,关于1+X 云计算运维与开发(中级)案例实战——分布式部署集群应用商城系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云计算1+X平台运维与开发认证(初级)认证考试

    1、下面哪个阶段不是项目管理流程中的阶段?【 B 】 A、 项目立项 B、 项目质保 C、 项目测试 D、 项目开发 2、为满足金融业务的监管和安全要求,平台不需要考虑下列哪个应用?   [ A ] A、 文档版本管理 B、 防火墙策略 C、 安全漏洞扫描 D、 多租户安全隔离 3、以下哪一项最

    2023年04月16日
    浏览(34)
  • 1+X云计算平台运维与开发认证(初级)多选大全

    下面属于测试用例黑盒技术的是(15分)  A、等价类划分(正确答案)  B、边界值分析(正确答案)  C、错误推测(正确答案)  D、因果图(正确答案) 批量删除当前目录下后缀名为.c的文件。如a.c、b.c。(15分)  A、rm *.c(正确答案)  B、find . -name \\\"*.c\\\" -maxdepth 1 | xargs rm(正确答案)  C、find

    2024年02月08日
    浏览(42)
  • 云计算平台运维与开发-第五章私有云技术(wlw)

    用脚本部署OpenStack平台 虚拟机安装教程 1.新建虚拟机 2.自定义 3.下一步 4.稍后安装操作系统 5.选择CentOS7 64位 6.改名称,下一步 7.下一步  8. 9. 10.  11. 12.  13. 14. 15.自定义硬件  16.添加-网络适配器-完成 17.设置网络适配器2为NAT模式 18.点击完成  19. 20.点击 X 21.点击设置 22. 23

    2024年02月04日
    浏览(33)
  • (四)库存超卖案例实战——优化redis分布式锁

    在上一节内容中,我们已经实现了使用redis分布式锁解决商品“超卖”的问题,本节内容是对redis分布式锁的优化。在上一节的redis分布式锁中,我们的锁有俩个可以优化的问题。第一,锁需要实现可重入,同一个线程不用重复去获取锁;第二,锁没有续期功能,导致业务没有

    2024年02月07日
    浏览(36)
  • 云计算实验2 Spark分布式内存计算框架配置及编程案例

    掌握分布式多节点计算平台Spark配置,Spark编程环境IDEA配置,示例程序启动与运行 Linux的虚拟机环境、线上操作视频和实验指导手册 完成Spark开发环境安装、熟悉基本功能和编程方法。 请按照线上操作视频和实验指导手册 ,完成以下实验内容: 实验2-1 Spark安装部署:Standal

    2023年04月13日
    浏览(48)
  • (五)库存超卖案例实战——使用zookeeper分布式锁解决“超卖”问题

    本节内容使用zookeeper实现分布式锁,完成并发访问“超卖”问题的解决。相对于redis分布式锁,zookeeper能够保证足够的安全性。关于zookeeper的安装内容这里不做介绍,开始本节内容之前先自行安装好zookeeper中间键服务。这里我们利用创建zookeeper路径节点的唯一性实现分布式锁

    2024年02月06日
    浏览(35)
  • elasticsearch(ES)分布式搜索引擎03——(RestClient查询文档,ES旅游案例实战)

    文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括: 1)准备Request对象 2)准备请求参数 3)发起请求 4)解析响应 我们以match_all查询为例 3.1.1.发起查询请求 代码解读: 第一步,创建 SearchRequest 对象,指定索引库名 第二步,利用 request.source() 构建DSL,DSL中可

    2024年02月07日
    浏览(44)
  • 分布式系统开发实战:安全通道

    数据安全是一个非常值得关注的问题。数据在网络上传播,数据很容易被侦听、窃取,如果想要实现数据的安全,一个非常重要的方式就是给数据加密。SSL/TLS和TLS就是这类安全协议,它们层叠在其他协议之上,用于实现数据的安全。 安全套接字层(Secure Sockets Layer,SS-L)是

    2024年04月27日
    浏览(31)
  • 【项目实战】分布式计算和通信框架(AKKA)入门介绍

    Akka是一个用于构建高并发、分布式、可容错、事件驱动的应用程序的工具包和运行时。它基于Actor模型,提供了一种高效的并发编程模型,可以轻松地编写出高并发、分布式、可容错的应用程序。Akka还提供了一些常用的组件,如路由、集群、持久化等,可以帮助开发人员更加

    2024年02月08日
    浏览(41)
  • Redis实战案例14-分布式锁的基本原理、不同实现方法对比以及基于Redis进行实现思路

    基于数据库的分布式锁:这种方式使用数据库的特性来实现分布式锁。具体流程如下: 获取锁:当一个节点需要获得锁时,它尝试在数据库中插入一个特定的唯一键值(如唯一约束的主键),如果插入成功,则表示获得了锁。 释放锁:当节点完成任务后,通过删除该唯一键

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包