其中两台虚拟机master和slave部署mysql数据库服务,搭建主从数据库集群;master作为主节点,负责写入数据库信息;slave作为从节点,负责读取数据库信息。
虚拟机Mycat部署Mycat数据库中间件服务,将用户提交得读写操作识别分发给相应得数据库外节点。
在使用Mycat读写分离数据库作为应用系统的数据库后端,使用zookeepeer 集群,kafka集群提供应用系统调度服务,使用Reids提供应用系统消息队列服务
· Tomcat 应用服务器 1(jar1):
· Tomcat 应用服务器 2(jar2):
· Nginx 服务器(nginx):
IP | 主机名 | 节点 |
192.168.213.151 | mycat | Mycat中间件服务节点 |
192.168.213.153 | Master | MariaDB数据库集群主节点 |
192.168.213.146 | Slave | MariaDB数据库集群从节点 |
192.168.213.161 | zookeeper1 | 集群节点 |
192.168.213.162 | zookeeper2 | 集群节点 |
192.168.213.163 | zookeeper3 | 集群节点 |
192.168.213.166 | redis | 消息队列服务节点 |
192.168.213.167 | jar1 | Tomcat1节点 |
192.168.213.168 | jar2 | Tomcat2节点 |
192.168.213.169 | nginx | Nginx服务器 |
使用CentOS 7.2系统,flavor使用2vCPU/4GB内存/50GB硬盘创建云主机 虚拟机Mycat部署Mycat数据库中间件服务,将用户提交的读写操作识别分发给相应的数据库节点。
此外Mycat所使用的压缩包为Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
在主从节点安装mariadb,并配置主从复制功能,三个集群节点分别安装zookeeper服务,kafka服务,在redis节点安装redis
使用提供的zookeeper-3.4.14.tar.gz包和gpmall-repo文件夹,安装ZooKeeper服务
使用ZooKeeper集群搭建的3个节点来构建Kafka集群,因为Kafka服务依赖于ZooKeeper服务,所以不再多创建云主机来进行试验。软件包使用提供的kafka_2.11-1.1.1.tgz软件包。
Redis节点yum源使用提供的gpmall-repo文件夹
使用提供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节点上部署。
这些包我已经整理好了,有需要的的可以私信我
登录这10台虚拟机分别使用hostnamectl set-hostname命令修改成对应的主机名
[root@localhost ~]# hostnamectl set-hostname jar1
[root@localhost ~]#bash
关闭这10台虚拟机的防火墙输入如下命令
[root@localhost ~]# hostnamectl set-hostname jar1
[root@localhost ~]# bash
直接挂载aliyun YUM源(同理都可以配置aliyunYUM源)
在主从节点上配置yum源
此链接挂载过程
在zookeeper集群配置yum源
# mv /etc/yum.repos.d/* /media/
在3个节点上创建/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
# yum clean all
# yum list
在redis节点挂载yum源
[root@redis ~]# mv /etc/yum.repos.d/* /media/
[root@redis ~]# cat /etc/yum.repos.d/local.repo
[gpmall]
name=gpmall
baseurl=file:///opt/gpmall-repo
gpgcheck=0
enabled=1
载nginx节点挂载yum
# mv /etc/yum.repos.d/* /media/
# cat /etc/yum.repos.d/local.repo
[gpmall]
name=gpmall
baseurl=file:///opt/gpmall-repo
gpgcheck=0
enabled=1
在三台主从中间件节点在 /etc/hosts 均添加如下内容
[root@slave ~]# vi /etc/hosts |
再部署Mycat中间件服务时需要先安装JDK软件,注意JDK1.7软件版本需要及以上
Mycat节点安装java环境
[root@mycat ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel [root@mycat ~]# java -version |
在master主节点和slave从节点上分别安装mariadb服务
[root@slave ~]# yum install -y mariadb mariadb-server |
安装完成后,master和slave节点均启动mariadb服务,并设置开机自启动
[root@master ~]# systemctl start mariadb [root@master ~]# systemctl enable mariadb |
在master和slave节点上初始化mariadb数据库,设置数据库root访问用户密码为123456
[root@master ~]# mysql_secure_installation |
编辑master主节点的数据库配置文件my.cnf并添加如下内容
[root@master ~]# vi /etc/my.cnf
编辑完成后重启mysql服务
[root@master ~]# systemctl restart maysql
登录主节点master数据库,设置权限在任何客户端均可以root登录数据库
[root@master ~]# mysql -uroot -p123456
mysql> grant all privileges on *.* to root@'%' identified by "123456";
在master数据库中创建user用户让从节点slave连接,并赋予从节点同步主节点数据库的权限
[root@master ~]# Mysql> grant replication slave on *.* to 'user'@'slave' identified by '123456';
编辑slave主节点的数据库配置文件 my.cnf并添加如下内容
[root@slave ~]# vi /etc/my.cnf
[root@master ~]# systemctl restart mysql
[root@slave ~]# mysql -uroot -p123456
Mysql>change master to master_host='master',master_user='user',master_password='123456';
注意:这里要关闭从库的复制线程这将停止从库的l/o线程和SQL线程
[root@master ~]# service mysqld status ERROR! Multiple MySQL running but PID file could not be found (24749 24447 24030 23285 11898)
[r\oot@master ~]#
在正常登陆数据库或重启数据库,启动数据库,关闭数据库等电源操作时,有时会弹出PID丢失的问题,是常见的问题之一,出现这个报错信息意味着有多个数据库进程正在使用,但服务器无法识别PID文件,这是由于之前的操作中,mysql服务被异常终止,或手动启动了多个数据库的问题导致的。
查看后台所有的mysql进程
ps -aux|grep mysql
手动关掉这些进程
kill -9 进程号
使用pkill命令
pkill -9 -f mysqld来终止后台
其中master_host为主节点名、master_user为创建的主从连接的用户user
mysql>change master to master_host='master',master_user='user',master_password='123456';
Mysql> start slave; Mysql> show slave status\G |
在master节点的MySQL中创建test数据库,并在test库中创建company表,并向表中添加数据(创建非空表并创建name和addr两个列,在表中添加shenyang china)
Mysql> create database test; Mysql> use test; Mysql> create table company(id int not null primary key,name varchar(50),addr varchar(255)); Mysql> insert into company values(1,"shenyang","china"); |
前面已经创建了所以直接使用
从slave节点查看数据库的内容,从节点db2的数据库就会同步主节点数据库创建的test库,可以在从节点查询test数据库与表company
[root@mycat ~]# chown -R 777 /usr/local/mycat/ |
将mycat服务变量添加至系统/etc/profile 变量文件中,并使其生效
[root@mycat ~]# echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile [root@mycat ~]# source /etc/profile |
[root@mycat ~]# vi /usr/local/mycat/conf/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.213.153:3306" user="root" password="123456"> <readHost host="hostS1" url="192.168.213.146:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema> |
给以下代码说明
<?xml version="1.0"?> XML文件的版本 <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 指定文档类型和DTD文件,用于XML文件验证 <mycat:schema xmlns:mycat="http://io.mycat/"> 定义mycat的命名 <schema name="USERDB" mcheckSQLschea="true" sqlMaxLimit="100" dataNode="dn1"></schema> 定义逻辑库USERDB Name 指定了逻辑库的名称 checkSQLschema 表示是否检查SQL语句的逻辑库 SqlMaxLimit 定义了SQL语句中允许的最大数量限制 DataNode 指定逻辑库映射到的数据节点 <dataNode name="dn1" dataHost="localhost1" database="test" /> 定义了一个数据节点 dn1 name 属性指定了数据节点的名称。 dataHost 指定了数据节点关联的数据主机。 database 指定了数据节点关联的具体数据库 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1" slaveThreshold="100"> 定义一个数据主机localhost1 name 属性指定了数据主机的名称。 maxCon 定义了最大连接数。 minCon 定义了最小连接数。 balance 定义了负载均衡策略。 dbType 指定了数据库类型。 dbDriver 指定了数据库连接驱动。 writeType 指定了写操作的类型。 switchType 指定了切换类型。 slaveThreshold 定义了从库的阈值。 <heartbeat>select user()</heartbeat> 心跳检查SQL语句,检测连接的可用性 <writeHost host="hostM1" url="192.168.213.153:3306" user="root" password="123456"> <readHost host="hostS1" url="192.168.213.146:3306" user="root" password="123456" /> writeHost 定义了主写主机的连接信息,包括主机名、URL、用户名和密码。 readHost 定义了从读主机的连接信息,同样包括主机名、URL、用户名和密码 </writeHost> </dataHost> </mycat:schema> |
[root@mycat ~]# chown root:root /usr/local/mycat/conf/schema.xml |
修改/usr/local/mycat/conf/server.xml文件
在文档最后部分,修改标注的字段即可
[root@mycat ~]# vi /usr/local/mycat/conf/server.xml <user name="root"> <property name="password">123456</property> <property name="schemas">gpmall</property> |
此段编辑完成后,删除一下字段
<user name="user"> <property name="password">user</property> <property name="schemas">TESTDB</property> <property name="readOnly">true</property> </user> |
更改完成确认无误后,保存退出
[root@mycat ~]# /bin/bash /usr/local/mycat/bin/mycat start [root@mycat ~]# netstat -ntpl |
启动成功后,查看端口的开放状态,若有8066和9066端口,表示mycat服务开启成功
若可以查询到信息,验证主从数据库集群功能在正常运行
至此,MySQL主从连接全部结束
先在Mycat虚拟机上使用Yum安装mariadb-client服务。
[root@mycat ~]# yum install -y MariaDB-client
在Mycat虚拟机上使用mysql命令查看Mycat服务的逻辑库USERDB,因为Mycat的逻辑库USERDB对应数据库test(在部署主从数据库时已安装),所以可以查看库中已经创建的表company。命令如下。
[root@mycat ~]# mysql -h127.0.0.1 -P8066 -uroot -p123456
MySQL [(none)]> show databases;
MySQL [(none)]> use gpmall
MySQL [gpmall]> show tables;
MySQL [gpamll]> select * from company;
在Mycat虚拟机上使用mysql命令对表company添加一条数据(2,"basketball","usa"),添加完毕后查看表信息。命令如下。
MySQL [gpmall]> insert into company values(2,"bastetball","usa");
在Mycat虚拟机节点使用mysql命令,通过9066端口查询对数据库读写操作的分离信息。可以看到所有的写入操作WRITE_LOAD数都在db1主数据库节点上,所有的读取操作READ_LOAD数都在db2主数据库节点上。由此可见,数据库读写操作已经分离到db1和db2节点上了。命令如下。
[root@mycat ~]# mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show @@datasource;'
查询结果如图所示。
Mycat ,mysql日志文件及位置
mycat日志文件位置:/usr/local/mycat/logs/mycat.log
Mysql (mariadb) 日志文件位置:/data/mysql/master.err
在数据库里可以查询日志文件位置:#show variables like '%log_error%';、
下面分别是mysql,mysql日志
harset、Transaction Isolation 和 Autocommit 设置:
Connection Info:
连接池管理:
连接获取事件:
Connection 状态:
这段日志主要描述了 MyCat 在管理与 MySQL 数据库的连接时的行为。由于空闲连接不足,MyCat 创建了新的连接,并且分别连接到了主库和从库。日志中详细列出了连接的相关属性,包括字符集、事务隔离级别、自动提交状态等。
InnoDB 相关信息:
MySQL 恢复信息:
网络和 IPv6 支持:
Server socket 信息:
警告:
建议添加 --relay-log=master-relay-bin 参数来指定 relay log,以避免潜在问题。
Event Scheduler 信息:
最后的启动成功信息:
MySQL server ready for connections:MySQL 服务器已经启动并准备接受连接。显示了 MySQL 版本 5.6.35-log,监听在 /tmp/mysql.sock socket 文件上,端口为 3306。
3个节点修改/etc/hosts 文件,3个节点均修改成如下代码所示:
# vi /etc/hosts
192.168.213.161 zookeeper1
192.168.213.162 zookeeper2
192.168.213.163 zookeeper3
3个节点安装Java JDK环境,3个节点均执行命令如下:
# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
# 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)
# tar -zxvf zookeeper-3.4.14.tar.gz
创建myid文件,命令如下:
zookeeper1节点:
[root@zookeeper1 ~]# mkdir /tmp/zookeeper
[root@zookeeper1 ~]# vi /tmp/zookeeper/myid
[root@zookeeper1 ~]# cat /tmp/zookeeper/myid
1
zookeeper2节点:
[root@zookeeper2 ~]# mkdir /tmp/zookeeper
[root@zookeeper2 ~]# vi /tmp/zookeeper/myid
[root@zookeeper2 ~]# cat /tmp/zookeeper/myid
2
zookeeper3节点:
[root@zookeeper3 ~]# mkdir /tmp/zookeeper
[root@zookeeper3 ~]# vi /tmp/zookeeper/myid
[root@zookeeper3 ~]# cat /tmp/zookeeper/myid
3
[root@zookeeper1 conf]# vi zoo.cfg
[root@zookeeper1 conf]# grep -n '^'[a-Z] zoo.cfg
2:tickTime=2000
5:initLimit=10
8:syncLimit=5
12:dataDir=/tmp/zookeeper
14:clientPort=2181
29:server.1=172.16.51.23:2888:3888
30:server.2=172.16.51.32:2888:3888
31:server.3=172.16.51.41:2888:3888
命令解析:
l initLimit:ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。
l syncLimit:配置follower和leader之间发送消息,请求和应答的最大时间长度。
l tickTime:tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒。
l dataDir:其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内容只有一行,且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的id。
注意:zookeeper2和zookeeper3节点的操作与修改的配置和zookeeper1节点一样。
zookeeper1节点:
[root@zookeeper1 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper1 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
zookeeper2节点:
[root@zookeeper2 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 10175.
[root@zookeeper2 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader
zookeeper3节点:
[root@zookeeper3 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper3 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
可以看到,3个节点,zookeeper2为leader,其他的都是follower。
至此,ZooKeeper集群配置完毕。
注意:查看状态出现问题时,所有节点都启动一下,再查看状态。
Zookeeper日志文件及位置
日志位置:/opt/zookeeper-3.4.14/bin/zookeeper.out
日志解析:
1. 时间戳
DEBUG:调试信息,通常开发阶段使用。
INFO:信息级别,表示正常的运行信息。
WARN:警告信息,表示可能会出现问题,但不一定会影响服务。
ERROR:错误信息,表示运行中的严重问题。
Closed socket connection: 表示该客户端的连接已关闭。
0x10001a5eeec0000: 这是 ZooKeeper 为客户端生成的唯一会话标识符,每个客户端的会话都有不同的 session ID。
# tar -zxvf kafka_2.11-1.1.1.tgz |
在配置文件中找到以下两行并注释掉(在文本前加#)如下所示:
#broker.id=0
#zookeeper.connect=localhost:2181
然后在配置文件的底部添加如下3个配置。
zookeeper1节点:
broker.id=1
zookeeper.connect=192.168.213.161:2181,192.168.213.162:2181,192.168.213.163:2181
listeners = PLAINTEXT://192.168.213.161:9092
命令解析:
l broker.id:每台机器不能一样。
l zookeeper.connect:因为有3台ZooKeeper服务器,所以在这里zookeeper.connect设置为3台。
l listeners:在配置集群的时候,必须设置,不然以后的操作会报找不到leader的错误。
另外两台服务器,zookeeper.connect的配置跟这里的一样,但是broker.id和listeners不能一样。
zookeeper2节点:
broker.id=2
zookeeper.connect=172.16.51.23:2181,172.16.51.32:2181,172.16.51.41:2181
listeners = PLAINTEXT://172.16.51.32:9092
zookeeper3节点:
broker.id=3
zookeeper.connect=172.16.51.23:2181,172.16.51.32:2181,172.16.51.41:2181
listeners = PLAINTEXT://172.16.51.41:9092
启动服务需要权限用chmod命令在增加权限
zookeeper1节点:
[root@zookeeper1 bin]# ./kafka-server-start.sh -daemon ../config/server.properties
[root@zookeeper1 bin]# jps
11416 Kafka
11464 Jps
10479 QuorumPeerMain
zookeeper2节点:
[root@zookeeper2 bin]# ./kafka-server-start.sh -daemon ../config/server.properties
[root@zookeeper2 bin]# jps
11121 Kafka
11188 Jps
10175 QuorumPeerMain
zookeeper3节点:
[root@zookeeper3 bin]# ./kafka-server-start.sh -daemon ../config/server.properties
[root@zookeeper3 bin]# jps
11080 Kafka
10188 QuorumPeerMain
11149 Jps
zookeeper1节点:
[root@zookeeper1 bin]# ./kafka-topics.sh --create --zookeeper 172.16.51.23:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test".
如果成功的话,会输出“Created topic "test".”。
zookeeper2节点:
[root@zookeeper2 bin]# ./kafka-topics.sh --list --zookeeper 172.16.51.32:2181
test
zookeeper3节点:
[root@zookeeper3 bin]# ./kafka-topics.sh --list --zookeeper 172.16.51.41:2181
test
测试成功。
Kafka服务日志文件及位置
日志位置:输出日志/opt/kafka_2.11-1.1.1/logs/kafkaServer.out
日志主要是描述了 Kafka 服务器正常或异常关闭的整个过程。
4o
[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文件导入完毕后,退出数据库。
[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>
<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>
[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
使用Yum命令安装Redis服务,命令如下:
[root@redis ~]# yum install redis -y
修改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集群服务直接使用
Redis日志文件及位置
Redis 服务器在 2024 年 9 月 12 日 18:06:05 启动,版本是 3.2.12。
警告:overcommit_memory 参数设置为 0,这意味着系统在内存不足时,可能无法执行 Redis 的后台保存操作。
解决方案:通过命令 sysctl vm.overcommit_memory=1 修改此参数,或将 vm.overcommit_memory = 1 添加到 /etc/sysctl.conf 并重启。
警告:内核启用了透明大页(THP)功能。Redis 不推荐使用该功能,因为可能会导致延迟增加和内存使用效率降低。
解决方案:运行 echo never > /sys/kernel/mm/transparent_hugepage/enabled 关闭该功能,并将其添加到 /etc/rc.local,确保重启后仍生效。
Redis 从磁盘加载数据库,加载时间为 0.000 秒,表示数据量较小或加载速度非常快。
Redis 服务器已经准备好接受客户端连接,监听端口为 6379。
在过去的 900 秒(15分钟) 内,Redis 发生了 1 次修改,因此触发了保存操作。
Redis 的子进程 2008 开始执行后台保存操作,将数据保存到磁盘。
数据库已成功保存到磁盘。
Redis 使用了 4 MB 的内存来执行写时复制(copy-on-write)操作,表明在保存数据时,Redis 创建了一个数据的副本以避免影响正常的操作。
后台保存任务成功完成。
在过去的 300 秒(5分钟) 内发生了 10 次修改,因此再次触发了保存操作。
Redis 的子进程 2010 开始执行新的后台保存操作。
数据库成功保存到磁盘。
与前一次保存相同,Redis 在这次保存操作中也使用了 4 MB 的内存进行写时复制操作。
后台保存任务再次成功完成。
因为需要在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)
在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
192.168.213.166 redis.mall
192.168.213.151 mysql.mall
192.168.213.161 kafka.mall
192.168.213.162 kafka.mall
192.168.213.163 kafka.mall
192.168.213.161 zookeeper.mall
192.168.213.162 zookeeper.mall
192.168.213.163 zookeeper.mall
jar2节点:
[root@jar2 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.213.166 redis.mall
192.168.213.151 mysql.mall
192.168.213.161 kafka.mall
192.168.213.162 kafka.mall
192.168.213.163 kafka.mall
192.168.213.161 zookeeper.mall
192.168.213.162 zookeeper.mall
192.168.213.163 zookeeper.mall
jar1节点:
[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
至此,应用系统部署完毕。
jar包日志位置及解析
日志位置:nohup.out
日志解析:
登录Nginx节点,安装Nginx服务,命令如下:
[root@nginx ~]# yum install nginx -y
[root@nginx ~]# rm -rf /usr/share/nginx/html/*
[root@nginx ~]# cp -rvf dist/* /usr/share/nginx/html/
upstream myuser {
server 192.168.213.167:8082;
server 192.168.213.168:8082;
ip_hash;
}
upstream myshopping {
server 192.168.213.167:8081;
server 192.168.213.168:8081;
ip_hash;
}
upstream mycashier {
server 192.168.213.167:8083;
server 192.168.213.168: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;
#}
}
在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
nginx日志文件及位置
日志位置: /var/log/nginx/error.log(错误日志)access。log(正确日志)
日志解析:
这段日志是来自 Nginx 或 Apache 服务器的 访问日志,记录了用户从浏览器向服务器发出请求的详细信息。让我们逐行解析其含义:
①192.168.213.1 ②- - [12/Sep/2024:23:10:48 +0800] ③"GET /static/images/nav_logo.png HTTP/1.1": ④200 29939 ⑤"http://192.168.213.169/" ⑥"Mozilla/5.0 (Windows NT 10.0; Win64; x64) ⑦AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0" " |
①192.168.213.1:
c
②[12/Sep/2024:23:10:48 +0800]:
时间戳:表示请求的时间为 2024 年 9 月 12 日 23:10:48,时区为 +0800(即东八区,中国标准时间)。
③"GET /static/images/nav_logo.png HTTP/1.1":
请求方法和资源路径:
GET:HTTP 请求方法,表示客户端正在请求获取资源。
/static/images/nav_logo.png:请求的资源路径,表示客户端请求了服务器上的一个静态图片资源。
HTTP/1.1:HTTP 协议版本。
④ 200:
状态码:表示服务器响应的状态,200 意味着请求成功,服务器正确返回了资源。
⑤ 29939:
响应大小:表示服务器返回的数据大小,单位为字节。在这里,服务器返回了 29,939 字节的数据。
⑥ "http://192.168.213.169/":
引用页面:表示用户从哪个页面发起的请求。这里是 http://192.168.213.169/,表示用户从该 URL 页面发出了图片请求。
⑦"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0":
用户代理(User-Agent):表示发出请求的客户端的浏览器和操作系统信息。这里是:
操作系统:Windows 10 (x64)
浏览器内核:AppleWebKit/537.36(与 Chrome、Edge 使用的相同)
浏览器:Edge 128.0.0.0。
"-":
额外信息:这部分通常用来记录请求中的某些额外字段信息。在这里为 "-",表示没有额外信息。
每一行的结构类似,表示不同的请求:
如果对你有帮助的话一键三连呦会持续更新
因篇幅问题不能全部显示,请点此查看更多更全内容