当前位置: 首页 > 工具软件 > gpmall > 使用案例 >

gpmall项目 实施笔记

方寒
2023-12-01

1. ZooKeeper集群部署

1.1 案例目标

(1)了解ZooKeeper分布式应用程序协调服务。

(2)使用3台机器搭建ZooKeeper集群。

(3)使用ZooKeeper集群。

1.2案例分析

*1********.规划节点*

ZooKeeper集群系统的节点规划,见表4-2-1。

表4-2-1节点规划

IP主机名节点
172.16.51.23zookeeper1集群节点
172.16.51.32zookeeper2集群节点
172.16.51.41zookeeper3集群节点

*2.基础准备*

登录OpenStack平台,使用提供的CentOS_7.2_x86_64_XD.qcow2镜像,flavor使用2vCPU/4GB内存/50GB硬盘创建云主机。使用提供的zookeeper-3.4.14.tar.gz包和gpmall-repo文件夹,安装ZooKeeper服务。

1.3 案例实施

*1********.基础环境配置*

(1)主机名配置

使用secureCRT对3台云主机进行连接。

3个节点修改主机名为zookeeper1、zookeeper2、zookeeper3,命令如下:

zookeeper1节点:

[root@localhost ~]# hostnamectl set-hostname zookeeper1

zookeeper2节点:

[root@localhost ~]# hostnamectl set-hostname zookeeper2

zookeeper3节点:

[root@localhost ~]# hostnamectl set-hostname zookeeper3

修改完之后重新连接secureCRT,并查看主机名:

zookeeper1节点:

[root@zookeeper1 ~]# hostnamectl

Static hostname: zookeeper1

​ Icon name: computer-vm

​ Chassis: vm

​ Machine ID: dae72fe0cc064eb0b7797f25bfaf69df

​ Boot ID: c642ea4be7d349d0a929e557f23ce3dc

Virtualization: kvm

Operating System: CentOS Linux 7 (Core)

​ CPE OS Name: cpe:/o:centos:centos:7

​ Kernel: Linux 3.10.0-229.el7.x86_64

Architecture: x86_64

zookeeper2节点:

[root@zookeeper2 ~]# hostnamectl

Static hostname: zookeeper2

​ Icon name: computer-vm

​ Chassis: vm

​ Machine ID: dae72fe0cc064eb0b7797f25bfaf69df

​ Boot ID: cfcaf92af7a44028a098dc4792b441f4

Virtualization: kvm

Operating System: CentOS Linux 7 (Core)

​ CPE OS Name: cpe:/o:centos:centos:7

​ Kernel: Linux 3.10.0-229.el7.x86_64

Architecture: x86_64

zookeeper3节点:

[root@zookeeper3 ~]# hostnamectl

Static hostname: zookeeper3

​ Icon name: computer-vm

​ Chassis: vm

​ Machine ID: dae72fe0cc064eb0b7797f25bfaf69df

​ Boot ID: cff5bbd45243451e88d14e1ec75098c0

Virtualization: kvm

Operating System: CentOS Linux 7 (Core)

​ CPE OS Name: cpe:/o:centos:centos:7

​ Kernel: Linux 3.10.0-229.el7.x86_64

Architecture: x86_64

(2)配置hosts文件

3个节点修改/etc/hosts文件,3个节点均修改成如下代码所示:

# vi /etc/hosts

172.16.51.23 zookeeper1

172.16.51.32 zookeeper2

172.16.51.41 zookeeper3

(3)配置YUM源

将提供的gpmall-repo目录上传至3个节点的/opt目录下,首先将3个节点/etc/yum.repo.d目录下的文件移动到/media目录下,命令如下:

# 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

*2********.********搭建ZooKeeper集群*

(1)安装JDK环境

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)

(2)解压ZooKeeper软件包

将zookeeper-3.4.14.tar.gz软件包上传至3个节点的/root目录下,进行解压操作,3个节点均执行命令如下:

# tar -zxvf zookeeper-3.4.14.tar.gz

(3)修改3个节点配置文件

在zookeeper1节点,进入zookeeper-3.4.14/conf目录下,修改zoo_sample.cfg文件为zoo.cfg,并编辑该文件内容如下:

[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 server.id=host:port1:port2:其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。

l dataDir:其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内容只有一行,且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的id。

注意:zookeeper2和zookeeper3节点的操作与修改的配置和zookeeper1节点一样。

(4)创建myid文件

在3台机器dataDir目录(此处为/tmp/zookeeper)下,分别创建一个myid文件,文件内容分别只有一行,其内容为1,2,3。即文件中只有一个数字,这个数字即为上面zoo.cfg配置文件中指定的值。ZooKeeper是根据该文件来决定ZooKeeper集群各个机器的身份分配。

创建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

(5)启动ZooKeeper服务

在3台机器的zookeeper-3.4.14/bin目录下执行命令如下:

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集群配置完毕。

注意:查看状态出现问题时,所有节点都启动一下,再查看状态。

1.2实战案例——Kafka集群部署

*4.********3********.1* *案例********目标*

(1)了解Kafka分布式发布订阅消息系统。

(2)搭建Kafka分布式发布订阅消息系统。

(3)使用Kafka分布式发布订阅消息系统。

*4.3.2* *案例分析*

*1********.规划节点*

Kafka集群的节点规划,见表4-3-1。

表4-3-1节点规划

IP主机名节点
172.16.51.23zookeeper1集群节点
172.16.51.32zookeeper2集群节点
172.16.51.41zookeeper3集群节点

*2.基础准备*

使用ZooKeeper集群搭建的3个节点来构建Kafka集群,因为Kafka服务依赖于ZooKeeper服务,所以不再多创建云主机来进行试验。软件包使用提供的kafka_2.11-1.1.1.tgz软件包。

*4.3.3* *案例实施*

*搭建Kafka集群*

(1)解压Kafka软件包

将提供的kafka_2.11-1.1.1.tgz软件包,上传至3个节点的/root目录下,并执行解压操作,3个节点执行的解压命令如下:

tar -zxvf kafka_2.11-1.1.1.tgz

(2)修改3个节点配置文件

在zookeeper1节点,进入kafka_2.11-1.1.1/config目录下,编辑server.properties文件。

在配置文件中找到以下两行并注释掉(在文本前加#)如下所示:

#broker.id=0

#zookeeper.connect=localhost:2181

然后在配置文件的底部添加如下3个配置。

zookeeper1节点:

broker.id=1

zookeeper.connect=172.16.51.23:2181,172.16.51.32:2181,172.16.51.41:2181

listeners = PLAINTEXT://172.16.51.23: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

(3)启动服务

在zookeeper1节点,进入kafka_2.11-1.1.1/bin目录下,启动服务命令如下。

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

(4)测试服务

在zookeeper1节点,进入kafka_2.11-1.1.1/bin目录下,创建topic命令如下。

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”.”。

查看topic,虽然topic是在172.16.51.23上创建的,但是在其他机器上也能看到。例如在任意启动的机器kafka_2.11-1.1.1/bin的目录中执行命令如下:

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

测试成功。

1.3 实战案例——构建集群应用系统环境

*4.4.1* *案例********目标*

(1)了解集群部署应用系统的架构。

(2)构建Mycat读写分离数据库集群。

(3)构建ZooKeeper集群。

(4)构建Kafka集群。

(5)安装Redis服务。

*4.4.2* *案例分析*

*1********.规划节点*

使用Mycat读写分离数据库作为应用系统的数据库后端,使用ZooKeeper集群,Kafka集群提供应用系统调度服务,使用Reids提供应用系统消息队列服务,节点规划见表4-4-1。

表4-4-1 节点规划

IP主机名节点
172.16.51.6mycatMycat中间件服务节点
172.16.51.18db1MariaDB数据库集群主节点
172.16.51.30db2MariaDB数据库集群从节点
172.16.51.23zookeeper1集群节点
172.16.51.32zookeeper2集群节点
172.16.51.41zookeeper3集群节点
172.16.51.29redis消息队列服务节点

*2********.********基础准备*

集群应用系统的数据库使用实战案例4.1创建的Mycat读写分离数据库,ZooKeeper服务使用实战案例4.2部署的Zookeeper集群,Kafka服务使用实战案例4.3部署的Kafka集群,Redis服务使用单机部署(使用CentOS7.2系统,flavor使用2vCPU/4G内存/50G硬盘创建虚拟机)。YUM源使用提供的gpmall-repo文件夹。

*4.4.3* *案例********实施*

*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 © 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"?>

<mycat:schema xmlns:mycat=“http://io.mycat/”>

select user()

</mycat:schema>

登录Mycat节点,修改server.xml配置文件,文件位置在/usr/local/mycat/conf目录下。在server.xml文件的最后部分,将USERDB改成gpmall,具体配置文件如下:

​ 123456

​ gpmall

​ <!–

			<table name="tb01" dml="0000"></table>

			<table name="tb02" dml="1111"></table>

​ -->

(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 redisCreated 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.4实战案例-----部署集群应用系统

三台主机改名
hostnamectl set-hostname jar1
hostnamectl set-hostname jar2
hostnamectl set-hostname nginx
安装JAVA环境
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)
两个节点都要配置
修改hosts文件(/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
运行jia包(双节点)
nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &
nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar &
nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &
nohup java -jar  gpmall-user-0.0.1-SNAPSHOT.jar &
ps -aux |grep java
查看是否掉包 
或 jobs 是否运行
前端配置
 yum install nginx -y
 rm -rf /usr/share/nginx/html/*
 cp -rvf dist/* /usr/share/nginx/html/
修改NGINX配置文件
/etc/nginx/conf.d/default.conf
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;
        }
         location /user {
	    proxy_pass http://myuser;
        }

    location /shopping {
	    proxy_pass http://myshopping;
        }

    location /cashier {
	    proxy_pass http://mycashier;
        }
  启动Nginx服务(并且查看80端口是否启动)
  systemctl start nginx
  netstat -ntpl  
  网站访问(输入nginx的IP)
 类似资料: