[Gerrit服务器集群搭建(三)] 服务器搭建问题小结

一、写在前面

这一篇是对搭建Gerrit集群环境时遇到的问题及解决方案的小结。不谈细节,我们搭建这个集群需要达到的最直接效果是:用户访问且仅访问一个Gerrit服务器地址,集群内任意服务器都有能力响应。这里说的“有能力”,由SSH传输协议展开。

二、集群服务器共享用户公钥

用户如果需要从Gerrit服务器上通过ssh协议下载数据,首先会在服务器上增加自己的公钥,从而让服务器在用户请求通信时向用户发送“质询”,验证用户身份。(更详细的说明在这:http://www.cnblogs.com/winater/p/4394032.html

那么第一个问题就来了,用户如何向这整个服务器集群增加公钥呢?让用户向集群中的每一台服务器手动添加公钥,这种麻烦的方法不到万不得已自然是不用的。很自然的,我们希望服务器能共享这些用户资料。

在共享之前首先当然要知道这些资料存放在哪里,遗憾的是,我翻遍所有Gerrit目录下的文件夹,也没看到一个形似用户资料的文件。当时我还是用的H2数据库,这个数据库倒是有几个文件在目录下。于是我脑子一拍,将整个数据库文件复制到了另一个Gerrit server上,不出所料,刷新该服务器后,用户信息全部过来了。当然,有了思路还是要进一步验证的,不过服务器不在身边,就不截图说明了。

后来查阅资料发现H2数据库有最大存储限制,256GB,虽说也不算小,但有限制总归让人没有安全感,并且考虑到今后如果数据库负载重也需要集群化,所以,最终我们选择了功能更加丰富的PostgreSQL。
       用PostgreSQL,共享数据最直接的当然是集群化,详细步骤可参见http://blog.csdn.net/lengzijian/article/details/7704814。不过,等等,Gerrit初始化的时候还提供了一个数据库类型叫做JDBC,JDBC是什么呢?百度之,“JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。”竟然还有接口支持,又涨了见识~看来事情还可以这样简化:在其中一台服务器建立数据库,其它服务器远程连接使用这台服务器上的数据即可。于是,就有了http://www.cnblogs.com/winater/p/4379662.html中关于PostgreSQL配置和连接的过程。

(这里追加评论一下,这样做在我们实际使用中其实不太稳定,偶尔还会出现数据库查询失败的错误,前阵子主要希望快速上线,这部分粗糙了,找个周末人少时间多,我再去实践一下数据库集群。)

三、集群服务器共享SSH Key & Fingerprint

 

       对用户而言,下载服务器的IP是唯一的,而实际上,用户下载请求将会被动态分配到不同的Gerrit server去响应。由于这些下载通过SSH协议,这个协议会记录下IP:Port与特定fingerprint的对应关系,本意是为了保护数据传输安全,但会给我们的架构带来问题:假设用户访问下载服务器(后简称VIP),第一次下载由服务器A响应,在用户的.ssh目录下known_host文件中,就会记录下VIP与服务器A的对应关系;第二次下载,该用户的下载请求被服务器B响应,此时用户主机检查VIP已与服务器A建立了对应关系,便会提示用户一个warning,拒绝下载,此时用户可以根据提示删除响应的对应关系解决,但这无疑是非常麻烦的。

似乎让集群所有服务器都使用同一个fingerprint是个可行的方案。

fingerprint依据且仅依据SSH public key通过MD5计算产生(想要进一步了解fingerprint可以阅读http://www.phcomp.co.uk/Tutorials/Unix-And-Linux/ssh-check-server-fingerprint.html)。因此,共享fingerprint只需要共享SSH key。通常主机的SSH key都存在于$HOME/.ssh及/etc/ssh/下(比较完整的说法可以参见http://askubuntu.com/questions/76337/where-is-the-ssh-server-fingerprint-generated-stored),但Gerrit server会根据内部监听的下载端口(默认29418),用server初始化时生成的SSH key去与用户进行连接。也就是说,通过Gerrit server下载,你会发现提示的fingerprint与SSH远程访问该主机的fingerprint不一样,因为它们由不同端口响应,对应了不同的SSH public key。

有了思路,解决就不困难了,server里的SSH key都存放在[gerrit_site]/etc/下, 复制同步即可。需要注意的是基于java 1.7版本和1.8版本初始化Gerrit生成的key文件形式不一样,如果服务器间java版本不同,可能需要将1.8版本server的[gerrit_site]/lib/下,bcprov-jdk15on-149.jar,bcpkix-jdk15on-149.jar这两个文件,复制到1.7版本的server中,让1.7版本能够支持1.8版本key的格式。     

时间: 2024-08-03 15:29:32

[Gerrit服务器集群搭建(三)] 服务器搭建问题小结的相关文章

[Gerrit服务器集群搭建(一)]初识Gerrit代码审查系统

一.写在前面 公司安卓部门在扩张,尤其是我们这一拨新人进来后,本来负载就很重的Gerrit服务器更加吃不消了.前段时间,我有幸全程参与搭建了Gerrit服务器集群,在这里也将搭建过程总结记录下来,给自己也给他人做一个参考,有误或者有更好的建议都期待指教~ 二.Gerrit服务器简介 简言之,就是基于Git引入的强制代码审核机制,原来是git push->Git库,现在则变成了git push->Gerrit(代码管理者审核通过)->Git库.当然这是个不严谨的描述,较为详细的介绍请参见h

阿里云ECS服务器部署HADOOP集群(三):ZooKeeper 完全分布式集群搭建

本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里云ECS服务器:master, slave1, slave2 操作系统:CentOS 7.3 Hadoop:hadoop-2.7.3.tar.gz Java: jdk-8u77-linux-x64.tar.gz ZooKeeper: zookeeper-3.4.14.tar.gz 1.2 各节点角色

Zookeeper服务器集群的搭建与操作

ZooKeeper 作用:Zookeeper 可以用来保证数据在zk集群之间的数据的事务性一致(原子操作). 介绍:Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务.  它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. 特性:简单的.富有表现力的.具有高可用性.采用松耦合交互方式.是一个资源库. 如何搭建ZooKeeper服务器集群 2.1 ZooKeeper服务器集群规模不小于3个节点,要求各服务器之间

Web服务器集群搭建

前言:本文记述了搭建一个小型web服务器集群的过程,由于篇幅所限,系统.软件的安装和基本配置我这里就省略了,只记叙关键配置和脚本内容.假如各位朋友想了解各软件详细配置建议查阅官方文档. 一 需求分析: 1.整体需求:搭建一个高可用的网站服务器集群,能承受高并发请求,能抵御一般的网络攻击,任何一台服务器的退服不影响整个集群的运作,并且能对各服务器的运行情况作出实时监控. 2.详细需求分析: 根据需求,计划根据以下拓扑搭建运行环境: 二 详细功能描述: 1.前端服务器采用nginx实现反向代理和负载

Linux下Apache+tomcat搭建负载均衡服务器集群

之前在我的博客里面写了一篇文章http://blog.csdn.net/yannanying/article/details/43018175,本文就是为了补充当时的那篇文章而写.我记得当时是参考百度经验里面的一篇文章写的,文章地址为http://jingyan.baidu.com/article/ab0b5630b632dbc15afa7dc4.html,寒假的时候按照这篇文章的相关内容搭建了Apache+tomcat服务器集群,当时是弄成功了,回到学校后再次想尝试一下怎么搭建,但是发现自己记

ssh+expect+scp实现服务器集群自动化搭建

之前介绍过ansible的使用,通过ssh授权批量控制服务器集群 但是生成密钥和分发公钥的时候都是需要确认密码的,这一步也是可以自动化的,利用ssh + expect + scp就可以实现,其实只用这几个命令结合也可以实现类似ansible的功能了 为了远程操作服务器进行环境初始化,总结我们都需要以下几步操作 1.ssh-keygen生成密钥对 2.将生成的公钥发送到node服务器 3.scp拷贝安装包到node服务器 4.ssh远程执行拷贝过去的安装包 下面进行集群环境初始化脚本的编写,通过s

Redis Cluster搭建高可用Redis服务器集群

原文:Redis Cluster搭建高可用Redis服务器集群 一.Redis Cluster集群简介 Redis Cluster是Redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了Redis分布式的需求,当一个节点挂了可以快速的切换到另一个节点,当遇到单机内存.并发等瓶颈时,可以采用分布式方案要解决问题. 二.集群原理 Redis Cluster架构图 Redis Cluster集群采用了P2P的模式,完全去中心化,Redis把所有的Key分成了16384个slot,每个R

keepalived+nginx+tomcat搭建高性能web服务器集群

使用keepalived+nginx+tomcat搭建高性能web服务器集群,系统采用centos6.9,前端用nginx做反向代理实现负载均衡,同时结合keepalived对nginx实现高可用,后端使用两台tomcat做动态jsp解析,实现了动静分离. 搭建环境 准备四台服务器 vip: 192.168.75.130master: 192.168.75.131 (安装nginx做反向代理实现负载匀衡,结合keepalived实现高可用)backup: 192.168.75.132 (同上)w

nginx+apache+php+mysql服务器集群搭建

nginx+apache+php+mysql服务器集群搭建 由于需要搭建了一个基本的服务器集群.具体的配置方案先不说了,到有时间的时候再介绍.下面介绍下整个方案的优点. 我总共准备了四台阿里云的主机,架设分别是A,B1,B2,C,A在集群的最前面,B1和B2在A的后面,C在最后面.A主要用的nginx,用nginx做反向代理的功能实在是强大.nginx把来自80的http请求都转发到B1和B2上,B1和B2主要是两台apache,用于php解析.B1和B2来连接C上的mysql.A上的nginx