data-serving延迟敏感程序相关

About CloudSuite

云计算正在成为向全球客户提供可伸缩在线服务的主要计算平台。当今流行的在线服务(例如,web搜索、社交网络和业务分析)的特征是大量的工作集、高度的并行性和实时约束。这些特性使云服务有别于桌面(SPEC)、并行(PARSEC)和传统的商业服务器应用程序(TPC)。为了促进对云计算和数据中心计算领域的研究,我们创建了CloudSuite,这是一个基于真实世界的在线服务的基准测试套件。
CloudSuite涵盖了当今数据中心中常见的广泛应用程序类别。第一个版本包括数据分析、数据服务、媒体流、大规模计算密集型任务、web搜索和web服务。( data analytics, data serving, media streaming, large-scale and computation-intensive tasks, web search, and web serving)。第二个版本扩展了带有图形分析和数据缓存的CloudSuite,( graph analytics and data caching)。
与以前的版本相比,CloudSuite 3.0在基准测试和基础设施方面都有重大改进,它包括代表大规模数据操作与紧密的延迟约束的基准,如:内存中的数据分析使用Apache Spark,一种新的实时视频流基准测试遵循当今最流行的视频共享网站设置,以及一种新的web服务基准测试,它反映了当今具有缓存层的多层web服务器软件栈。

Data Serving

data serving,数据服务基准依赖于Yahoo!云服务基准测试(YCSB)。YCSB是一个测试数据存储系统的框架。这个框架提供了适当的接口来填充和强调许多流行的数据服务系统。在这里,我们提供了下载和安装YCSB并将其与Cassandra数据存储一起使用的说明和指针。

Generating Datasets(生成数据集

YCSB客户端有一个数据生成器。启动Cassandra后,YCSB可以开始加载数据。首先,您需要为YCSB创建一个名为usertable的键空间和一个列族。这是YCSB加载数据并运行的必要条件。

Preparing a network between the server(s) and the client(s) (准备服务器和客户端之前的网络)

为了方便客户端和服务器之间的通信,我们构建了一个docker网络:

$ docker network create serving_network

我们将把启动的容器附加到这个新创建的docker网络

Server Container(服务器容器)

启动服务器容器,运行cassandra server并安装一个默认的keyspace usertable:

$ docker run --name cassandra-server --net serving_network cloudsuite/data-serving:server cassandra

Multiple Server Containers(多服务器容器)

对于一个集群cluster设置多个服务器,我们需要实例化一个种子服务器:

$ docker run --name cassandra-server-seed --net serving_network cloudsuite/data-serving:server

然后像之前一样准备服务器。
其他服务器容器实例化如下:

$ docker run --name cassandra-server(id) --net serving_network -e CASSANDRA_SEEDS=cassandra-server-seed cloudsuite/data-serving:server

更多完整文档: http://wiki.apache.org/cassandra/GettingStarted 和 https://hub.docker.com/_/cassandra/.

Client Container

成功创建上述模式之后,就可以使用YCSB进行基准测试了。启动客户端容器,指定服务器名或IP地址,用逗号分隔,作为最后一个命令参数:

$ docker run --name cassandra-client --net serving_network cloudsuite/data-serving:client "cassandra-server-seed,cassandra-server1"

关于生成数据集的更详细说明可以在这个链接的步骤5中找到。虽然链接中的步骤5描述了数据加载过程,但是其他步骤(例如,1、2、3、4)对于理解YCSB设置非常有用。链接: https://github.com/brianfrankcooper/YCSB/wiki/Running-a-Workload

A rule of thumb on the dataset size(关于数据集大小的经验法则)

为了模拟真实的设置,如果您有一个低延迟、高带宽I/O子系统,您可以生成比主内存的大小更多的数据。例如,对于具有24GB内存的机器,您可以生成与30GB数据集大小相对应的3000万条记录。
数据集位于Cassandra的数据文件夹中。由于数据文件具有元数据结构(例如索引),因此实际数据比记录的总大小占用更多的空间。确保有足够的磁盘空间。

Tuning the server performance(调优服务器性能)

1.通常,服务器设置位于$CASSANDRA_PATH/conf文件夹下。主文件是cassandra.yaml。该文件对所有参数都有注释。这些参数也可以在这里找到:http://wiki.apache.org/cassandra/StorageConfiguration 。
2.您可以修改目标和线程数变量来调优基准并利用服务器。吞吐量取决于服务器上的硬盘驱动器数量。如果有足够的磁盘,可以在运行基准测试10分钟后使用内核。确保操作系统文件缓冲区和缓存有一半的主内存是空闲的。
3.此外,以下链接对于性能调优非常有用:
a. http://spyced.blogspot.com/2010/01/linux-performance-basics.html
b. http://wiki.apache.org/cassandra/MemtableThresholds

Running the benchmark

基准测试在客户端容器中自动运行。可以修改数据库中的记录计数和/或基准执行的操作数,在运行客户端容器时指定相应的变量:

$ docker run -e RECORDCOUNT=<#> -e OPERATIONCOUNT=<#> --name cassandra-client --net serving_network cloudsuite/data-serving:client "cassandra-server-seed,cassandra-server1"

运行一个工作负载:

译文:
运行一个工作负载有6个步骤:
设置要测试的数据库系统
选择适当的DB接口层
选择适当的工作量
选择适当的运行时参数(客户端线程数量、目标吞吐量等)
加载数据
执行工作负载
这里描述的步骤假设您正在运行单个客户机服务器。

1.设置要测试的数据库系统

第一步是设置要测试的数据库系统。这可以在单机或集群上完成,具体取决于您希望进行基准测试的配置。您还必须创建或设置tables/keyspaces/storage(表/密钥空间/存储桶)来存储记录。详细信息根据每个数据库系统而异,并取决于您希望运行的工作负载。在YCSB客户机运行之前,必须创建表,因为客户机本身不会请求创建表。这是因为对于某些系统,有一个手动(人工操作)步骤来创建表,而对于其他系统,必须在启动数据库集群之前创建表。

Cloudsuite知识点集合

现代数据中心服务器为多种不同资源占用类型的workload提供服务:CPU密集型workload,memory密集型workload等等,因此越来越有必要对不同类型的workload分配所需的计算资源(内存,缓存,带宽等),并且将合适的类型的云服务组合起来放在一台服务器上运行,尽量减小组不同的workload对于服务器资源的抢占。
Cloudsuite套件提供的就是一组能代表现在某些类型的云服务,提供给学者来探索不同云服务类型的资源消耗情况,并且分析研究哪些CPU相关的指标可以对workload进行分类。

安装data serving(我的实验用这个延迟敏感程序)

1。从github上下载cloudsuite源码:
网址 https://github.com/parsa-epfl/cloudsuite
2。下载之后解压
3。解压之后,进入cloudsuite/benchmarks/data-serving/serve/,这里面是data-serving的serve配置源码文件,按照dockerfile里面的引导执行步骤,

FROM ubuntu:14.04
ENV CASSANDRA_VERSION 2.1.12
ENV CASSANDRA_CONFIG /etc/cassandra

RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 514A2AD631A57A16DD0047EC749D6EEC0353B12C A278B781FE4B2BDA\
	&& echo 'deb http://www.apache.org/dist/cassandra/debian 21x main' >> /etc/apt/sources.list.d/cassandra.list \
	&& apt-get update \
    	&& apt-get install -y cassandra \
    	&& rm -rf /var/lib/apt/lists/*

# https://issues.apache.org/jira/browse/CASSANDRA-11661
RUN sed -ri 's/^(JVM_PATCH_VERSION)=.*/\1=25/' /etc/cassandra/cassandra-env.sh

COPY setup_tables.txt /setup_tables.txt
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
CMD ["cassandra"]
ENTRYPOINT ["/docker-entrypoint.sh"]

EXPOSE 7000 7001 7199 9042 9160

4。直到执行cassandra(运行cassandra)时报错:
在这里插入图片描述5。查阅资料发现是因为cassandra不支持java9,支持java8
6。按照如下链接卸载java-9
https://blog.csdn.net/cui_shuang_xi/article/details/72867154
7。安装安装java-8
https://blog.csdn.net/u012206617/article/details/101679475
8。运行cassandra
9。运行./docker-entrypoint.sh,报以下错误
在这里插入图片描述10。通过谷歌,可能是因为此键值已被使用的原因,因此:
转到安装Cassandra的根文件夹下的bin文件夹,执行cqlsh
再执行describe keyspaces,查看现有的键空间。
在这里插入图片描述
发现已有usertable键值对,因此修改cloudsuite/benchmarks/data-serving/serve/下的setup_tables.txt,把usertable改为usertable1,
再次执行,可能会显示端口已占用:
执行

sudo netstat -plten |grep java

PID号为23115,执行kill命令杀死进程

sudo kill -9 23115

在这里插入图片描述
11。如果发现键值对已存在,除了步骤10的解决方法外,还有下面的方法,即键入cqlsh,进入cqlsh
执行describe keyspaces确定键值对已存在;
再执行DROP KEYSPACE usertable1;,注意后面加“;”分号
再次输入 describe keyspaces 确认键值对已删除。
之后,再重复执行./docker-entrypoint.sh 即可。
在这里插入图片描述12。在客户端另一台机器按照dataserving内client文件下的dockfile文件配置客户端,这个过程很简单一直执行即可。在这里插入图片描述13。运行dataserving
首先,服务器端执行cassandra -f,不要关闭
其次,客户端,执行client下的docker-entrypoint.sh文件。
会一直显示开始加载,但没有任何输出,经检查,这是ip的问题,按照以下步骤执行。
14。

1.最后通过以下两个网址https://github.com/cloudius-systems/osv/wiki/Benchmarking-Cassandra-and-other-NoSQL-databases-with-YCSB和
www.mamicode.com/info-detail-1913108.html,多次尝试成功实现客户端和服务器端的访问。具体步骤如下:
事先按照dataserving源码文件中的dockfile文件成功安装cassandra 和ycsb。
1.1)修改服务器端cassandra配置文件/etc/cassandra.yaml中的参数,前三个一般都是正确的,是安装cassandra时默认的参数,只需检查是否取消注释即可;后三个,192.168.123.254为服务器端机器的ip地址,192.168.123.216是客户端机器的ip地址。

1.2)服务器端Root权限下cd / 目录,创建setup-ycsb.cql文件,文件内容见上面链接,部分截图如下,注:后面一定要加exit;不然语句会一直执行,不退出。

1.3)在服务器端同目录下执行cassandra,作用:启动cassandra
1.4)执行cassandra-cli -h 192.168.123.254 -f setup-ycsb.cql,作用:修改cassandra的ip,并建立键值;此时会显示usertable名冲突,原因是之前配置时已建立过usertable,执行以下语句检查usertable键值对,并删除。之后,再重新执行以上语句,就会显示创建成功。
describe usertable;
drop keyspaces usertable;
1.5)服务器端执行sudo netstat -plten |grep java,查看当前进程号
1.6)sudo kill -9 进程号。作用:停止当前cassandra进程,
1.7)执行systemctl stop firewalld.service 关闭防火墙,否则客户端还会一直显示没有到主机的路由问题。
1.8)执行cassandra -f ,重新启动cassandra,不要退出也不要关闭页面;至此,服务器端的配置结束。

1.9)客户端(另一台机器),修改client内的docker-entrypoint.sh文件,hosts=192.168.123.254。192.168.123.254为服务器端ip地址。
1.10)执行./docker-entrypoint.sh ,运行ycsb访问。
1.11)之后会看到客户端显示执行时间和吞吐量的信息,从服务器端检测资源占用。
1.执行以下语句,报错,解决方案见1.1
docker network create serving_network

在这里插入图片描述

1.1.因此,查阅资料,依次执行以下命令
sudo yum install docker  
sudo yum install systemd
sudo systemctl start docker
sudo systemctl daemon-reload
$ sudo service docker restart
$ sudo service docker status (should see active (running))
$ sudo docker run hello-world

执行最后一条语句后,显示如下则为成功:
在这里插入图片描述

2.再执行第一次语句显示,权限被拒绝,因此前面加 sudo ,如下是执行前后的结果 .
sudo docker network create serving_network

在这里插入图片描述
在这里插入图片描述

3.安装data serving,执行命令,等待安装完整即可。这个过程会很慢,也会显示连接失败,反复执行这条语句
sudo docker pull cloudsuite/data-serving:server

在这里插入图片描述

4.启动服务器容器,运行cassandra server并安装一个默认的keyspace usertable:
sudo systemctl start docker
$ docker run --name cassandra-server --net serving_network cloudsuite/data-serving:server cassandra

在这里插入图片描述
执行以上语句,报错,解决方案见4.1–4.2

4.1.查询docker,发现确实含有cassandra-server,执行语句加sudo ,不然会提示没有权限等信息。
sudo docker ps -l

在这里插入图片描述

4.2.删除cassandra-server即可,上图显示是 41c641ccfca9 …create cassandra-server,因此,删除41c641ccfca9即可。
sudo docker stop 41c641ccfca9
sudo docker rm 41c641ccfca9

执行删除语句之后在查看,显示如下:

sudo docker ps -l

在这里插入图片描述

5.再重复执行标题4的语句,加sudo是为了获得权限
$ sudo docker run --name cassandra-server --net serving_network cloudsuite/data-serving:server cassandra

执行该条语句的时候,会提示localhost:9160失败,该问题一直没解决。

按照dataserving 的dockerfile安装:
参考的网站:https://www.linuxidc.com/Linux/2017-07/145591.htm
1.镜像安装cassandra,
1)现在通过创建一个新的存储库文件将Apache Cassandra存储库添加到您的存储库列表中。

sub /etc/yum.repos.d/cassandra.repo

2)现在将以下内容添加到cassandra.repo文件中。

[cassandra]
name=Apache Cassandra
baseurl=https://www.apache.org/dist/cassandra/redhat/311x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.apache.org/dist/cassandra/KEYS

3)运行以下命令安装Apache Cassandra。

yum -y install cassandra

4)通过运行以下命令重新加载系统守护程序:

systemctl daemon-reload

5) 你现在可以通过键入来启动Cassandra

systemctl start cassandra

6)要启用Cassandra在启动时自动启动,请运行:

systemctl enable cassandra

失败

sudo /sbin/chkconfig cassandra on

7)您可以通过键入以下命令来验证Cassandra是否正在运行。

nodetool status

如果Cassandra正在运行,您应该看到类似的输出。
在这里插入图片描述
8)之后继续执行cloudsuite/benchmark/dataserving/serve/dockfile
( https://issues.apache.org/jira/browse/CASSANDRA-11661,一个错误提示的网址)

RUN sed -ri 's/^(JVM_PATCH_VERSION)=.*/\1=25/' /etc/cassandra/conf/cassandra-env.sh

COPY setup_tables.txt /setup_tables.txt
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
CMD ["cassandra"]
ENTRYPOINT ["/docker-entrypoint.sh"]

9)运行出错,提示cassandra-cli 为找到指令,是因为cassandra-cli 在cassandra2.2以后,被抛弃。
所以按照dockfile文件提示,安装cassandra2.1版本。
方法:9.1)修改/etc/yum.repos.d/cassandra.repo,将cassandra的版本改为21x。

[cassandra]
name=Apache Cassandra
baseurl=https://www.apache.org/dist/cassandra/redhat/21x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.apache.org/dist/cassandra/KEYS

9.2) 清楚原来yum的缓存,由于之前cassandra的版本是3,现在要装cassandra2.1,如果不清楚yum的缓存,cassandra2.1的镜像会下载失败。

yum clean all
yum makecache//更新仓库源的元数据信息
yum -y update//更新源

9.3)执行安装

 sudo  yum -y install cassandra

10)找到刚刚复制的docker-entrypoint.sh的目录:执行

./docker-entrypoint.sh

在这里插入图片描述
11)执行上述命令,会一直显示localhost/9160连接失败,如下所示:
在这里插入图片描述
一直连接失败可能是因为cassandra没有正常启动的问题:
尝试执行cassandra:显示如下,则为启动成功
在这里插入图片描述

12)暴露 7000 7001 7199 9042 9160 端口。
EXPOSE 7000 7001 7199 9042 9160
执行命令如下:

关于一些其他的理解:

1.延迟敏感程序:

在这里插入图片描述
我们就根据,剩余的资源,来调整穿孔率。

删除docker记录:
在这里插入图片描述修改yum’源 ,用到的链接
https://blog.csdn.net/ltx06/article/details/78030056
https://www.runoob.com/docker/centos-docker-install.html
https://blog.csdn.net/quanqxj/article/details/79479943 修改域名解析

docker 操作中遇到的问题:

docker 在centos上安装
https://www.runoob.com/docker/centos-docker-install.html
docker hub官网
https://hub.docker.com/r/cloudsuite/cassandra/tags
1.docker search 失败
在这里插入图片描述
2.查看当前docker可用的ip

dig @114.114.114.114 registry-1.docker.io

在这里插入图片描述3.打开/etc/hosts增加ip

sudo sub /etc/hosts

在这里插入图片描述4.重新docker search 即可

sudo docker search cloudsuite

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值