SVN集群建设与调优

单机转为集群

svn服务器单节点在业务代码更新的时候经常因为CPU跑满而导致代码更新速度较慢,随着服务器越来越多,单SVN服务器将会成为代码发布的过程的瓶颈,

因此为了提效,急需对SVN服务器进行改造,使其成为SVN集群,具备水平扩容的能力

架构图与实施步骤

实施步骤

  1. 购买NAS,确认磁盘IO能够满足需求。
  2. 购买2台4C8G 服务器,部署SVN服务。
  3. 在老SVN服务器上挂载NAS盘,然后停止SVN服务器,防止复制数据时有新数据写入,全量复制SVN数据到nas上。
  4. 在2台新机器上挂载NAS,同时修改SVN配置文件并启动SVN,读取NAS盘数据对外提供服务。
  5. 在SLB上把svn老节点权重调整为0,同时加入2台新的SVN节点并调整权重为100。

回滚方案

  1. SLB 把新SVN服务器权重调整为0
  2. 数据由于已写入NAS,所以需要先停SVN服务,从NAS拷贝数据到老SVN服务器的数据磁盘
  3. SLB 把老SVN服务器权重调整为100。

SVN配置调优背景

  1. 研发反馈 commit 变慢,通过排查发现 是 NAS 小文件串行写入性能较差。SVN单机改成集群模式后,我们SVN数据存储模式发生改变,原来是本地SSD磁盘保存的数据,由于要做集群共享数据,所以采用了网络文件系统进行存储数据,网络文件存储系统对于小文件串行写入很慢,恰好SVN服务是单进程写入文件(串行写入)的模式,因此在提交代码时以小文件为主的时候就会慢很多。
    因此采用NAS作为存储的SVN集群,适用于水平扩容,提高NAS 小文件的并发写入量,从而提高速度。

  2. 涉及到svn调优、系统调优,nas挂载调优

svn配置调优

查阅SVN官网后,找到以下5个参数进行调整,ECS配置为4C8G,

启动参数添加三个:
  • --memory-cache-size 70 内存缓存大小,单位MB ,指定缓存 的大小,每个客户端进来后都会分配70M内存,因此需要合理调整,否则单机承载不了几个链接就会OOM
  • --cache-txdeltas yes 需要缓存文件内容的 差异文本
  • --cache-fulltexts yes 需要缓存文件内容的 全文本

只有使用了 FSFS 作为后端存储的仓库才能利用本节提到的缓存功能,使用缓存功能就可以把文件内容放在内存,不用从磁盘读取文件了,加快处理速度。

配置文件添加2个:

svn配置文件可以追加这几行配置
[storage]
db-lock-cache-size = 2000 磁盘缓存的项数量
db-cache-size = 2048000000 磁盘缓存大小,单位字节

NAS挂载参数调整

nconnect提高的是单个ECS访问NAS的吞吐能力,默认是1,并不会提高NAS文件系统自身的吞吐阈值,
nconnect=2 调高连接NFS的连接数,或者根据自身情况调整

调整系统内核参数

NFS客户端对同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能。

  1. SVN小文件过多,需要更低延迟,所以设置为16
  2. 如果是大文件为主,那么可以设置为128。
  • echo "options sunrpc tcp_slot_table_entries=16" >> /etc/modprobe.d/sunrpc.conf
  • echo "options sunrpc tcp_max_slot_table_entries=16" >> /etc/modprobe.d/sunrpc.conf
  • sysctl -w sunrpc.tcp_slot_table_entries=16

垂直+水平扩容

  1. 从2C4G扩展到4C8G
  2. 从2台扩容到6台

NAS 升级到极速版本

NAS 升级到极速版本。相对于最普通的nas来说,提升了小文件读写效率, 单次 commit 时长可以缩短60%左右

posted @ 2024-10-31 19:38  温柔易淡  阅读(12)  评论(0编辑  收藏  举报