Gitlab 11.9.1 高可用教程

一、 PostgreSQL数据迁移

由于默认Gitlab的安装会内置Postgres数据库,并且没有对外,所以我们需要通过设置对应的Gitlab的配置将其中的数据库对外,

以便于我们将其中的数据导出到外部的数据库。

1. 公开PostgreSQL连接

这里将把PostgreSQL公开对外。

vi /etc/gitlab/gitlab.rb

postgresql['listen_address'] = '0.0.0.0'
postgresql['port'] = 5432
postgresql['md5_auth_cidr_addresses'] = %w(192.168.1.1/24)
postgresql['trust_auth_cidr_addresses'] = %w(127.0.0.1/24)
postgresql['sql_user'] = "gitlab"
postgresql['sql_user_password'] = Digest::MD5.hexdigest "securesqlpassword" << postgresql['sql_user']

读者需要根据实际需要连接到数据库的IP地址段决定md5_auth_cidr_addresses参数,对于密码读者需要调整修改securesqlpassword

为实际连接数据库的密码。

为了保证调整数据库后,Gitlab依然可以正常工作,这里我们还需要调整gitlab_rails部分的设置即可,具体设置如下所示:

gitlab_rails['db_host'] = '127.0.0.1'
gitlab_rails['db_port'] = 5432
gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "securesqlpassword"

其中对应的连接的用户名和密码需要跟之前我们配置的信息一致,完成之后我们重启对应服务即可:

gitlab-ctl reconfigure

如果发现端口5432没有被监听等情况可以通过指令gitlab-ctl restart postgresql手动重启数据库。

最后迁移我们通过使用pgadmin备份数据库然后在其他主机上进行恢复即可。

2. 使用外部PostgreSQL数据库

完成以上操作后,我们就可以在不影响服务的情况下开始进行服务的迁移工作了,在实际完成具体的迁移后我们

就需要禁用自带的数据库,调整对应的连接字符串到我们安装的数据库上。

vi /etc/gitlab/gitlab.rb

postgresql['enable'] = false

gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['db_host'] = '0.0.0.0'
gitlab_rails['db_port'] = 5432
gitlab_rails['db_username'] = 'USERNAME'
gitlab_rails['db_password'] = 'PASSWORD'

完成以上设置后我们需要重启服务gitlab-ctl reconfigure,至此我们就完成了数据库的切换工作。

二、 Redis数据迁移

1. 公开Redis连接

如果读者希望Redis数据完全同步,通过公开进行数据的迁移,否则可以直接进行切换。

redis['enable'] = true
redis['port'] = 6379
redis['bind'] = '0.0.0.0'
redis['password'] = 'Redis Password'

由于Redis公开了,那么Gitlab连接其服务的方式也要进行适当的调整,以保证服务可以正常访问:

gitlab_rails['redis_host'] = '127.0.0.1'
gitlab_rails['redis_port'] = 6379
gitlab_rails['redis_socket'] = '/tmp/redis.sock'
gitlab_rails['redis_password'] = 'Redis Password'

其中我们需要注意Redis的密码需要与设定的时候一致。

2. 使用外部存储

如果使用外部存储,需要将自带的关闭然后调整对应地址进行访问即可:

redis['enable'] = false

gitlab_rails['redis_host'] = 'redis.example.com'
gitlab_rails['redis_port'] = 6379
gitlab_rails['redis_password'] = 'Redis Password'

最后通过重启服务进行sudo gitlab-ctl reconfigure

三、 PostgreSQL主从复制

由于核心数据均存储在PostgreSQL,为了保证数据库的数据不存在丢失的情况,这里我们需要借助于其

自身提供的流复制机制实现一主多从架构,从而保证数据在可允许的容错范围内实现数据多重备份,避免

因物理损坏从而导致代码文件的丢失。

以下教程均采用基于Docker部署的容器服务。

1. 创建复制账户(主节点)

为了能够让从节点能够连接到主节点进行数据的复制,这里我们需要创建拥有对应权限的单独账户用于日志

的复制,首先我们需要进入到容器后通过如下指令进入到具体的数据库中:

su postgres

psql

# 创建用户

CREATE ROLE replica login replication encrypted password 'replica';

注意其中的密码需要修改为实际的密码,最后通过\q即可退出。

2. 调整配置(主节点)

为了能够修改配置文件,这里我们安装相关的依赖插件:

apt-get update
apt-get install vim

完成安装后我们就可以进行文件的编辑了:

vi /var/lib/postgresql/data/pg_hba.conf  #允许对应IP连接

host replication replica 192.168.14.34/32 trust

其中的IP地址需要根据实际从节点的IP地址决定,接着我们还需要调整其他对应的参数:

vi /var/lib/postgresql/data/postgresql.conf

listen_addresses = '*'   # 监听所有IP
archive_mode = on # 允许归档
archive_command = 'cp %p /var/lib/postgresql/data/pg_archive/%f' # 用该命令来归档logfile segment
wal_level = hot_standby #开启热备
max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 64 # 设置流复制保留的最多的xlog数目,一份是 16M,注意机器磁盘 16M*64 = 1G
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的

完成以上配置后主节点的容器就可以重启了。

3. 拷贝数据(从节点)

由于主节点已经产生的部分的数据,为了保证两边的数据的同步性,这里我们需要

通过对应的复制指令实现基础数据的复制工作,这里我们需要指令如下指令进行对应的复制操作:

su postgres

rm -rf /var/lib/postgresql/data/*
pg_basebackup -h 192.168.14.187 -U replica -D /var/lib/postgresql/data -X stream -P
mkdir -p /var/lib/postgresql/data/pg_archive

注意其中的-h后的IP地址需要为主节点的地址

4. recovery.conf配置(从节点)

vi /var/lib/postgresql/data/recovery.conf #增加如下内容

standby_mode = on    # 说明该节点是从服务器
primary_conninfo = 'host=192.168.14.187 port=5432 user=replica password=replica' # 主服务器的信息以及连接的用户
recovery_target_timeline = 'latest'

5. postgresql.conf配置(从节点)

vi /var/lib/postgresql/data/postgresql.conf

wal_level = hot_standby
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 10s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈

完成以上操作后,我们将从节点的容器进行重启即可。

6. 验证主从部署

这里我们需要进入到主节点的容器中,通过如下指令进行查询:

su postgre
psql select client_addr,sync_state from pg_stat_replication;

如果显示了我们刚刚添加的从节点则表示主从复制已经启用了。

Gitlab 11.9.1 高可用教程的更多相关文章

  1. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  2. [经验交流] kubernetes v1.11 更新了高可用方案

    kubernetes v1.11已经发布了一段时间,和以前相比,一个显著亮点是更新了高可用方案: https://kubernetes.io/docs/setup/independent/high-a ...

  3. (5.11)mysql高可用系列——复制中常见的SQL与IO线程故障

    关键词:mysql复制故障处理 [1]手工处理的gtid_next(SQL线程报错) 例如:主键冲突,表.数据库不存在,row模式下的数据不存在等. [1.1]模拟故障:GTID模式下的重复创建用户 ...

  4. Hadoop2.7.7_HA高可用部署

    1. Hadoop的HA机制 前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 1.1. HA的运作机制 (1)hadoop-HA集群运作机制介绍 所谓HA,即高可用(7*2 ...

  5. Centos 7 下 Corosync + Pacemaker + psc 实现 httpd 服务高可用

    一.介绍 高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别. Heartbeat到了 ...

  6. hadoop+yarn+hbase+storm+kafka+spark+zookeeper)高可用集群详细配置

    配置 hadoop+yarn+hbase+storm+kafka+spark+zookeeper 高可用集群,同时安装相关组建:JDK,MySQL,Hive,Flume 文章目录 环境介绍 节点介绍 ...

  7. Linux集群介绍、keepalived介绍及配置高可用集群

    7月3日任务 18.1 集群介绍18.2 keepalived介绍18.3/18.4/18.5 用keepalived配置高可用集群扩展heartbeat和keepalived比较http://blo ...

  8. (5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)

    一.基于GTID的异步复制(一主一从)无数据/少数据搭建 二.基于GTID的无损半同步复制(一主一从)(mysql5.7)基于大数据量的初始化 正文: [0]概念 [0.5]GTID 复制(mysql ...

  9. 大数据学习笔记——Hbase高可用+完全分布式完整部署教程

    Hbase高可用+完全分布式完整部署教程 本篇博客承接上一篇sqoop的部署教程,将会详细介绍完全分布式并且是高可用模式下的Hbase的部署流程,废话不多说,我们直接开始! 1. 安装准备 部署Hba ...

随机推荐

  1. linux下禁止root和匿名用户登录ftp

    1.ftp通过root或其他用户进入可视化界面权限过大,容易导致系统文件误删 windows下输入ftp://IP去访问,不需要账号密码就可以访问到ftp文件夹 刚进去pub是空的,在linux上新增 ...

  2. [LeetCode]198. 打家劫舍(DP)

    题目 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个 ...

  3. c#中的ReadOnlySequenceSegment<T>和ReadOnlySequenceSegment<T>

    关于.net core高性能编程中的Span<T>和Memory<T>网上资料很多,这里就不说了.今天一直在看ReadOnlySequenceSegment<T>和 ...

  4. 不再用上官网,自己部署一套ElementUI官方最新文档

    ElementUI官方的访问速度一直很慢,公司内网也无法进行外网访问.故研究了下最新的ElementUI API(2.13.2)部署教程. 先上效果图 ElementUI文档部署过程 到github下 ...

  5. Gradle系列之Android Gradle高级配置

    本篇文章主要在之前学习的基础上,从实际开发的角度学习如何对 Android Gradle 来进行自定义以满足不同的开发需求,下面是 Gradle 系列的几篇文章: Gradle系列之初识Gradle ...

  6. Java io实现读取文件特殊内容进行替换

    最近公司在做一个项目其中一个需求是读取文件中的特殊字符在其后进行添加或删除字符操作,本来想直接使用randomAccessFile按行读取,读取到特殊字符就进行添加或删除操作,但是randomAcce ...

  7. ftp客户端自动同步 Windows系统简单操作ftp客户端自动同步

    服务器管理工具它是一款功能强大的服务器集成管理器,包含win系统和linux系统的批量连接,vnc客户端,ftp客户端等等实用功能.我们可以使用这款软件的ftp客户端定时上传下载的功能来进实现ftp客 ...

  8. 企业面试中关于MYSQL重点的28道面试题解答

      问题1:char.varchar的区别是什么? varchar是变长而char的长度是固定的.如果你的内容是固定大小的,你会得到更好的性能. 问题2: TRUNCATE和DELETE的区别是什么? ...

  9. thinkphp上传图片,生成缩略图

    Image.php <?php /** * 实现图片上传,图片缩小, 增加水印 * 需要定义以下常量 * define('ERR_INVALID_IMAGE', 1); * define('ER ...

  10. Hbuilder获取手机当前地理位置的天气

    前言:前面一段时间,公司项目里有一个需求 是获取当前手机地理位置当天的天气情况  将实时天气信息提供给客户.在网上搜索资料时候,发现知识很零碎,自己实现以后整理出来,方便于各位的学习与使用. 一.获取 ...