apache

Linux-部署-Django

拟墨画扇 提交于 2021-02-20 17:21:27
Linux-部署-Django-项目过程与问题总结 优才网 2017-04-12 18:00 本篇主要用于记录部署 Django 项目所有踩过的坑。 最近学习 Django 框架开发,将项目部署到 Linux 服务器上时遇到了很多坑,在此整理一下以作备忘,同时希望对有需要的同学有所帮助。 从 0 开始,在 Linux 上部署 Django 项目共有如下几步: 1. 安装 Python3.5 2. 安装 Apache2.4 3. 安装 wsgi 4. 配置数据库和静态文件 5. 配置 Apache 6. 处理权限问题 下面一步步来进行详细介绍: 安装 Python3.5 1.安装编译环境 2. 下载编译 Python3.5 源码包 prefix 指明了 Python3.5 的安装目录,后面的 --enable-shared LDFLAGS="-Wl,-rpath=/usr/local/python3" 选项保证了可以正常使用共享库,否则在编译安装后可能会出现以下错误: 我自己在完成后执行 Python3.5 的命令时就遇到了。查找了很多的解决方案,上面这种在编译时进行LDFLAGS配置应该是最简洁有效的方式。 另外这个错误在使用wsgi时也可能会遇到,其官方文档还特地针对该问题作了【介绍】(http://modwsgi.readthedocs.io/en/develop/user

基于zookeeper分布式锁

早过忘川 提交于 2021-02-20 16:48:46
最近项目中新上线了抢优惠券功能,虽然用户不多但是,如何防止超发呢?单体应用情况下只需要在抢券方法前用synchronized修饰即可,但是目前大部分项目都是分布式微服务架构,所以就需要加分布式锁。项目用的SpringMVC+dubbo,注册中心使用的zookeeper,所以就选用的基于zookeeper的分布式锁。 原生的zookeeper分布式锁写起来比较复杂,使用zookeeper的Curator框架轻松实现,代码实现: pom文件 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.0.1</version> </dependency> Spring集成 <!-- 重连策略 --> <bean id="retryPolicy" class="org.apache.curator.retry.ExponentialBackoffRetry"> <!-- 间隔时间基数 -->

cobbler自动化安装centos7.6

核能气质少年 提交于 2021-02-20 16:47:59
一、cobbler介绍 1.前言 cobbler 是基于 python 语言开发的 pxe 二次封装的网络安装服务;可以多系统选自自动化安装配置。可以通过 Web 图形化界面配置,其安装包为 cobbler,在 epel 源上,配置过程中某些过程可能需要依赖互联网环境。 2.Cobbler可以干什么 使用 Cobbler,无需进行人工干预即可安装机器。Cobbler 设置一个 PXE 引导环境(它还可以使用 yaboot 支持 PowerPC),并控制原装相关的所有方面,比如网络引导服务(DHCP 和 TFTP)与存储库镜像。当希望安装一台新机器时,Cobbler 可以: 1)使用一个以前定义的模板来配置 DHCP 服务(如果启用了管理 DHCP) 2)讲一个存储库(yum 或 rsync)建立镜像或解压缩一个媒介,以注册一个新操作系统 3)在 DHCP 配置文件中为需要安装的机器创建一个条目,并使用指定的参数(IP 和 MAC) 4)在 TFTP 服务目录下创建适当的 PXE 文件 5)重新启动 DHCP 服务来反应新的更改 6)重新启动机器以开始安装(如果电源管理已启动 3.Cobbler 支持的系统和功能 Cobbler 支持众多的发行版:Redhat、Fedora、CentOS、Debian、Ubuntu 和 SUSE。当添加一个操作系统(通常通过使用 ISO 文件)时

Kafka案例

偶尔善良 提交于 2021-02-20 16:43:28
假设我们正在开发一个多人在线网络游戏。游戏中,玩家需要在虚拟世界中进行合作或者展开竞争。玩家之间也常常存在各种交易,包括钱、道具等。因此游戏开发人员必须保证玩家没有作弊,规则如下:如果玩家交易额显著高于正常水平或者玩家登录的IP地址与之前20次登录的不一样,那么交易将被标记可疑。除了实时标记交易以外,我们还希望可以将这些数据导入到Apache Hadoop以方便数据科学家训练、测试他们的算法与模型。 为了提高实时的事件标记的效率,我们尽可能利用游戏服务器的内存。游戏系统包含了多台游戏服务器,因此在设计中,我们会在内存中保存每一个用户最近的20次登录记录以及最新的20次交易明细(数据是分布式存储的)。 游戏服务器主要扮演两个不同的角色:接收并传播用户行为,实时处理交易信息并对可疑事件进行标记。为了高效的扮演第二个角色,我们需要将任何一个用户的交易历史保存在一台服务器的内存中。这就意味着我们不得不在服务器之间传输消息,毕竟接收用户行为数据的服务器未必包含了该用户的交易历史。为了保持角色之间的松偶和,我们利用Kafka在不同服务器之间传输消息。 Kafka的特性使得它可以很好的满足我们的需求:可扩展、数据分区、低延迟以及处理大量异构消费者的能力。在该案例中,我们为登录与交易处理定义了一个主题。之所以使用同一个主题主要是因为我们希望在处理交易事件前已经获得用户登录信息了

新一代工作流调度-Apache DolphinScheduler 1.3.5 Docker镜像发布

我是研究僧i 提交于 2021-02-20 16:17:38
新一代大数据工作流调度 - Apache DolphinScheduler(incubator) 今天发布了 1.3.5 官方 Docker 镜像。 在社区伙伴 chengshiwen 的努力下, 1.3.5 版本的 Docker 镜像大约只有 1.3.4 版本的 1/2 , 现在只有大约 220M 啦,奥利给! 下面就带大家来 快速使用 DolphinScheduler 官方推荐以 docker-compose 的方式启动,这种方式需要先安装 docker-compose , docker-compose 的安装网上已经有非常多的资料,请自行安装即可。 1、下载源码 zip 包 - 请下载最新版本的源码包并进行解压 # 创建源码存放目录 mkdir -p /opt/soft/dolphinscheduler; cd /opt/soft/dolphinscheduler; # 下载源码包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/incubator/dolphinscheduler/1.3.5/apache-dolphinscheduler-incubating-1.3.5-src.zip # 解压缩 tar -zxvf apache-dolphinscheduler-incubating-1.3.5-src.zip mv

Kafka如果丢了消息,怎么处理的?

倖福魔咒の 提交于 2021-02-20 16:02:27
Kafka存在丢消息的问题,消息丢失会发生在Broker,Producer和Consumer三种。 Broker Broker丢失消息是由于Kafka本身的原因造成的,kafka为了得到更高的性能和吞吐量,将数据异步批量的存储在磁盘中。消息的刷盘过程,为了提高性能,减少刷盘次数,kafka采用了批量刷盘的做法。即,按照一定的消息量,和时间间隔进行刷盘。这种机制也是由于linux操作系统决定的。将数据存储到linux操作系统种,会先存储到页缓存(Page cache)中,按照时间或者其他条件进行刷盘(从page cache到file),或者通过fsync命令强制刷盘。数据在page cache中时,如果系统挂掉,数据会丢失。 服务器上高速读写以及同步到Replica 上图简述了broker写数据以及同步的一个过程。broker写数据只写到PageCache中,而pageCache位于内存。这部分数据在断电后是会丢失的。pageCache的数据通过linux的flusher程序进行刷盘。刷盘触发条件有三: 主动调用sync或fsync函数 可用内存低于阀值 dirty data时间达到阀值。dirty是pagecache的一个标识位,当有数据写入到pageCache时,pagecache被标注为dirty,数据刷盘以后,dirty标志清除。 Broker配置刷盘机制

【Zookeeper】Zookeeper集群环境搭建

狂风中的少年 提交于 2021-02-20 12:57:46
Zookeeper是一个开源的高效分布式协调服务,可以用来协调其他分布式集群实例间的执行调度,比如Kafka的集群就使用Zookeeper来管理,在Zookeeper的文件树结构中,存放着Kafka的一些节点元数据信息,比如broker信息,消费者信息,topic信息等。Kafka可以从Zookeeper上获取相关信息,保证各个实例间的元数据是一致的。 另外,Zookeeper也可以作为一个服务注册和发布服务,比如作为Dubbo的服务注册中心,用来管理各个服务实例发布的接口信息。 Zookeeper的定位是一个分布式的协调服务,所以它并不能像Kafka或者Redis一样存储大量的数据,它的树状的结构上的节点中只能存储少量的信息,不过能存储的数据量以及完全满足它的分布式协调和服务注册和发现中心的要求了。 下面搭建一个Zookeeper的集群,便于后续的学习使用。 在VM中创建了三台linux虚拟机,IP地址分别是: 192.168.200.128 192.168.200.129 192.168.200.130 首先去官网下载zookeeper的软件包: http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/ 下载之后上传到三台服务器上: 把压缩包解压到opt目录下,使用 sudo tar -zxvf apache

mod_rewrite proxy timeout

混江龙づ霸主 提交于 2021-02-20 11:21:28
问题 I have apache setup to proxy requests to backend app servers. There are several backend servers and there is a big rewrite_rules file which is processed for each request to properly proxy all the requests to app servers. One particular app server sometimes takes a long time to respond back, causing the proxy server to become slow if a lot of requests are being proxied to that particular server, as the requests are waiting to get the response back and eventually timeout after the timeout

如何在Java中逐行读取文件

帅比萌擦擦* 提交于 2021-02-20 08:54:39
本文翻译自 How to read a file line by line in Java 有时我们想逐行读取一个文件来处理内容。 一个很好的例子是 逐行读取CSV文件 ,然后将其用逗号(,)分成多列。 在Java中,当您需要逐行读取文件时,有多种选项可供选择。 1.Scanner Scanner 类提供了用Java逐行读取文件的最简单方法。 我们可以使用 Scanner 类打开文件,然后逐行读取其内容。 Scanner程序使用定界符模式将其输入分为令牌,在本例中为新行: try { // open file to read Scanner scanner = new Scanner(new File("examplefile.txt")); // read until end of file (EOF) while (scanner.hasNextLine()) { System.out.println(scanner.nextLine()); } // close the scanner scanner.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } 如果此扫描程序的输入中有另一行而不推进文件读取位置,则 hasNextLine() 方法将返回 true 。 要读取数据并移至下一行

java kafka 生产者消费者demo

夙愿已清 提交于 2021-02-20 08:03:23
一、修改kafka server.porperties的ip是你本机的ip listeners=PLAINTEXT: // 192.168.111.130:9092 二、生产者的例子 import org.apache.kafka.clients.producer.* ; import java.util.Properties; public class KafkaProducerDemo { private final Producer<String, String> kafkaProdcer; public final static String TOPIC = "JAVA_TOPIC" ; private KafkaProducerDemo() { kafkaProdcer = createKafkaProducer(); } private Producer<String, String> createKafkaProducer() { Properties props = new Properties(); props.put( "bootstrap.servers", "192.168.111.130:9092" ); props.put( "acks", "all" ); props.put( "retries", 0 ); props.put( "batch