1. 规划节点
使用Mycat读写分离数据库作为应用系统的数据库后端,使用ZooKeeper集群,Kafka集群提供应用系统调度服务,使用Reids提供应用系统消息队列服务,节点规划见表4-9-1。
表4-9-1 节点规划
IP | 主机名 | 节点 |
172.16.51.6 | mycat | Mycat中间件服务节点 |
172.16.51.18 | db1 | MariaDB数据库集群主节点 |
172.16.51.30 | db2 | MariaDB数据库集群从节点 |
172.16.51.23 | zookeeper1 | 集群节点 |
172.16.51.32 | zookeeper2 | 集群节点 |
172.16.51.41 | zookeeper3 | 集群节点 |
172.16.51.29 | redis | 消息队列服务节点 |
1. 修改数据库配置
(1)新建gpmall数据库
将提供的gpmall.sql数据库文件上传至数据库db1节点的/root目录下。登录db1节点,使用数据库用户名为root,密码为123456登录数据库,创建库gpmall,将提供的gpmall.sql文件导入到gpmall库中,命令如下:
[root@db1 ~]# mysql -uroot -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 19
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)]> create database gpmall;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> use gpmall
Database changed
MariaDB [gpmall]> source /root/gpmall.sql
Query OK, 0 rows affected (0.000 sec)
Query OK, 0 rows affected (0.000 sec)
…
gpmall.sql文件导入完毕后,退出数据库。
(2)修改Mycat配置
登录Mycat节点,修改schema.xml配置文件,文件位置在/usr/local/mycat/conf目录下,修改schema.xml文件内容如下,将schema name修改为gpmall,true修改为false,database修改为gpmall。
[root@mycat conf]# cat schema.xml
<?xml version="1.0"?>
<!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" dbType="mysql" dbDriver="native" writeType="0" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="172.16.51.22:3306" user="root" password="123456">
<readHost host="hostS1" url="172.16.51.26:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
登录Mycat节点,修改server.xml配置文件,文件位置在/usr/local/mycat/conf目录下。在server.xml文件的最后部分,将<property name="schemas">USERDB</property>改成<property name="schemas">gpmall</property>,具体配置文件如下:
<user name="root">
<property name="password">123456</property>
<property name="schemas">gpmall</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
(3)重启Mycat服务
登录Mycat节点,进入/usr/local/mycat/bin目录下,重启Mycat服务,命令如下:
[root@mycat bin]# ./mycat restart
Stopping Mycat-server...
Mycat-server was not running.
Starting Mycat-server...
查看Mycat服务是否启动,命令如下,如果能看到8066端口,则说明Mycat服务启动成功。
[root@mycat conf]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 945/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 862/master
tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 15039/java
tcp6 0 0 :::8066 :::* LISTEN 15039/java
tcp6 0 0 :::47746 :::* LISTEN 15039/java
tcp6 0 0 :::56870 :::* LISTEN 15039/java
tcp6 0 0 :::9066 :::* LISTEN 15039/java
tcp6 0 0 :::22 :::* LISTEN 945/sshd
tcp6 0 0 ::1:25 :::* LISTEN 862/master
tcp6 0 0 :::1984 :::* LISTEN 15039/java
2. 安装Redis服务
(1)修改主机名
登录Redis节点,修改主机名为redis,命令如下:
# hostnamectl set-hostname redis
(2)修改Yum源
将提供的gpmall-repo文件夹上传至Redis节点的/opt目录下,然后修改Yum源文件。
首先将/etc/yum.repo.d/目录下的所有文件移动到/media目录下,命令如下:
[root@redis ~]# mv /etc/yum.repos.d/* /media/
然后在/etc/yum.repo.d目录下创建local.repo文件,内容如下:
[root@redis ~]# cat /etc/yum.repos.d/local.repo
[gpmall]
name=gpmall
baseurl=file:///opt/gpmall-repo
gpgcheck=0
enabled=1
(3)安装Redis服务
使用Yum命令安装Redis服务,命令如下:
[root@redis ~]# yum install redis -y
(4)启动Redis服务
修改Redis配置文件,编辑/etc/redis.conf文件。
将bind 127.0.0.1这一行注释掉,将protected-mode yes改为protected-mode no。
启动Redis服务命令如下:
[root@mall ~]# systemctl start redis
[root@mall ~]# systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
检查Redis服务启动,命令如下,如果检查到6379端口,即证明Redis服务运行成功。
[root@redis ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1065/redis-server *
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 942/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 860/master
tcp6 0 0 :::6379 :::* LISTEN 1065/redis-server *
tcp6 0 0 :::22 :::* LISTEN 942/sshd
tcp6 0 0 ::1:25 :::* LISTEN 860/master
至此,应用商城集群部署需要的环境Mycat、Redis、Zookeeper、Kafka服务均已部署完毕。Zookeeper和Kafka集群服务直接使用实战案例4.2和4.3构建完成的,不需要做修改。
1. 规划节点
使用Mycat读写分离数据库作为应用系统的数据库后端,使用ZooKeeper集群,Kafka集群提供应用系统调度服务,使用Reids提供应用系统消息队列服务,节点规划见表4-11-1。
表4-11-1 节点规划
IP | 主机名 | 节点 |
172.16.51.6 | mycat | Mycat中间件服务节点 |
172.16.51.18 | db1 | MariaDB数据库集群主节点 |
172.16.51.30 | db2 | MariaDB数据库集群从节点 |
172.16.51.23 | zookeeper1 | 集群节点 |
172.16.51.32 | zookeeper2 | 集群节点 |
172.16.51.41 | zookeeper3 | 集群节点 |
172.16.51.40 | redis | 消息队列服务节点 |
172.16.51.11 | jar1 | Tomcat1节点 |
172.16.51.56 | jar2 | Tomcat2节点 |
172.16.51.45 | nginx | Nginx服务器 |
2. 基础准备
使用CentOS 7.2系统,flavor使用2vCPU/4G内存/50G硬盘,创建3台虚拟机分别为jar1节点、jar2节点和Nginx节点。使用提供gpmall-shopping-0.0.1-SNAPSHOT.jar、gpmall-user-0.0.1-SNAPSHOT.jar、shopping-provider-0.0.1-SNAPSHOT.jar、user-provider-0.0.1-SNAPSHOT.jar 、dist这5个包部署应用系统,其中4个JAR包为后端服务包,在jar1节点和jar2节点上均运行,dist为前端包,在Nginx节点上部署。
1. 基础环境配置
(1)修改主机名
登录172.16.51.11、172.16.51.56、172.16.51.45这3台虚拟机,使用hostnamectl命令修改3台主机的主机名。
172.16.51.11节点修改主机名命令:
[root@localhost ~]# hostnamectl set-hostname jar1
172.16.51.56节点修改主机名命令:
[root@localhost ~]# hostnamectl set-hostname jar2
172.16.51.45节点修改主机名命令:
[root@localhost ~]# hostnamectl set-hostname nginx
(2)配置Yum源
将提供的gpmall-repo文件夹上传至jar1、jar2、nginx这3个节点的/opt目录下,然后修改Yum源文件。
首先将3个节点/etc/yum.repo.d/目录下的所有文件移动到/media目录下,命令如下:
# mv /etc/yum.repos.d/* /media/
然后在/etc/yum.repo.d目录下创建local.repo文件,内容如下:
# cat /etc/yum.repos.d/local.repo
[gpmall]
name=gpmall
baseurl=file:///opt/gpmall-repo
gpgcheck=0
enabled=1
(3)安装Java环境
因为需要在jar1、jar2节点上运行提供的4个JAR包,所以需要在jar1和jar2节点上配置Java环境。安装java环境命令如下:
jar1节点:
[root@jar1 ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
[root@jar1 ~]# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
jar2节点:
[root@jar2 ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
[root@jar2 ~]# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
2. 后端配置
(1)配置hosts文件
在jar1和jar2节点,编辑/etc/hosts配置文件,文件内容如下:
jar1节点:
[root@jar1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.51.40 redis.mall
172.16.51.6 mysql.mall
172.16.51.23 kafka1.mall
172.16.51.32 kafka1.mall
172.16.51.41 kafka1.mall
172.16.51.23 zk1.mall
172.16.51.32 zk1.mall
172.16.51.41 zk1.mall
jar2节点:
[root@jar2 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.51.40 redis.mall
172.16.51.6 mysql.mall
172.16.51.23 kafka1.mall
172.16.51.32 kafka1.mall
172.16.51.41 kafka1.mall
172.16.51.23 zk1.mall
172.16.51.32 zk1.mall
172.16.51.41 zk1.mall
(2)运行jar包
将提供的4个jar包,上传至jar1、jar2节点的/root目录下,然后运行这4个jar包,命令如下:
[root@jar1 ~]# nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &
[1] 11025
[root@jar1 ~]# nohup: ignoring input and appending output to ‘nohup.out’
[root@jar1 ~]# nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar &
[2] 11039
[root@jar1 ~]# nohup: ignoring input and appending output to ‘nohup.out’
[root@jar1 ~]# nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &
[3] 11085
[root@jar1 ~]# nohup: ignoring input and appending output to ‘nohup.out’
[root@jar1 ~]# nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar &
[4] 11105
[root@jar1 ~]# nohup: ignoring input and appending output to ‘nohup.out’
检查jar包是否运行,命令如下:
[root@jar1 ~]# ps -aux |grep java
root 11025 21.9 12.1 3605624 492588 pts/0 Sl 11:49 0:11 java -jar user-provider-0.0.1-SNAPSHOT.jar
root 11039 21.3 9.9 3596260 400936 pts/0 Sl 11:49 0:10 java -jar shopping-provider-0.0.1-SNAPSHOT.jar
root 11105 28.5 9.4 3590068 384476 pts/0 Sl 11:50 0:09 java -jar gpmall-user-0.0.1-SNAPSHOT.jar
root 11193 161 12.7 3596228 514868 pts/0 Sl 11:50 0:14 java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar
root 11272 0.0 0.0 112640 960 pts/0 S+ 11:50 0:00 grep --color=auto java
jar2节点:
[root@jar2 ~]# nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &
[1] 10915
[root@jar2 ~]# nohup: ignoring input and appending output to ‘nohup.out’
[root@jar2 ~]# nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar &
[2] 10929
[root@jar2 ~]# nohup: ignoring input and appending output to ‘nohup.out’
[root@jar2 ~]# nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &
[3] 11004
[root@jar2 ~]# nohup: ignoring input and appending output to ‘nohup.out’
[root@jar2 ~]# nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar &
[4] 11024
[root@jar2 ~]# nohup: ignoring input and appending output to ‘nohup.out’
检查jar包是否运行,命令如下:
[root@jar2 ~]# ps -ef |grep java
root 10915 9970 27 11:50 pts/0 00:00:11 java -jar user-provider-0.0.1-SNAPSHOT.jar
root 10929 9970 28 11:50 pts/0 00:00:10 java -jar shopping-provider-0.0.1-SNAPSHOT.jar
root 11004 9970 49 11:51 pts/0 00:00:13 java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar
root 11024 9970 41 11:51 pts/0 00:00:09 java -jar gpmall-user-0.0.1-SNAPSHOT.jar
root 11113 9970 0 11:51 pts/0 00:00:00 grep --color=auto java
至此,应用系统部署完毕。
3. 前端配置
(1)安装Nginx服务
登录Nginx节点,安装Nginx服务,命令如下:
[root@nginx ~]# yum install nginx -y
(2)上传前端代码
将提供的dist文件夹上传至Nginx节点的/root目录下,然后将dist中的内容复制到nginx的项目目录,命令如下:
首先将Nginx默认项目目录的文件删除:
[root@nginx ~]# rm -rf /usr/share/nginx/html/*
然后将dist中的文件复制至/usr/share/nginx/html目录下:
[root@nginx ~]# cp -rvf dist/* /usr/share/nginx/html/
(3)修改Nginx配置文件
修改Nginx配置文件/etc/nginx/conf.d/default.conf如下,添加红框中的部分,IP地址为运行JAR包的2个服务器的IP。
upstream myuser {
server 172.16.51.11:8082;
server 172.16.51.56:8082;
ip_hash;
}
upstream myshopping {
server 172.16.51.11:8081;
server 172.16.51.56:8081;
ip_hash;
}
upstream mycashier {
server 172.16.51.11:8083;
server 172.16.51.56:8083;
ip_hash;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /user {
proxy_pass http://myuser;
}
location /shopping {
proxy_pass http://myshopping;
}
location /cashier {
proxy_pass http://mycashier;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
(4)启动Nginx服务
在nginx节点,启动Nginx服务,命令如下:
[root@nginx ~]# systemctl start nginx
查看Nginx是否启动,命令如下(查看80端口是否启动):
[root@nginx ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10287/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 946/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 864/master
tcp6 0 0 :::22 :::* LISTEN 946/sshd
tcp6 0 0 ::1:25 :::* LISTEN 864/master
4. 网站访问
打开浏览器,在地址栏中输入http://172.16.51.45,访问界面,如图4-11-1所示。
图4-11-1 商城首页
单击右上角“头像”,进行登录操作,使用用户名/密码为test/test进行登录。