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. command三国杀开发日记20200915

    一句话进展 完善了程序结构,分离.c和.h 搭建了6个阶段函数 实现了玩家摸牌 封装实现了日志打印函数 日志打印 想要区分日志等级,包括DEBUG.INFO.WARN.ERRRO.PANIC,提供统一 ...

  2. 单链表的前K个的逆序输出

    单链表逆序输出也是常被面试官问到题算法题,所以自己就总结了一下,在此贴出算法,与小伙伴们相互交流. 首先要有三个指针,前两个分别指向首节点,首节点的下一个节点,第三个是临时指针,是为了储存首节点的下一 ...

  3. MySQL索引的基本操作

    常见的索引类型 PROMARY KEY 主键索引,也是唯一索引,不允许重复数据. UNIQUE INDEX唯一索引,不允许有重复数据. INDEX 普通索引允许有重复数据. 组合索引,对多个字段添加索 ...

  4. 群光电子-koremes3 ORA-600 [kjxmgmb_nreq:!bat]

    Bug 20250147  ORA-600 [kjxmgmb_nreq:!bat] can occur in RAC crashing the instance  This note gives a ...

  5. 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统三 | 控制反转搭配简单业务

    教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 06 | 最终篇-通过AOP自动连接数据库-完成日志业 ...

  6. dubbo学习(十)spring boot整合dubbo

    工程搭建与配置 生产者 1.创建一个生产者的spring boot工程,配置好依赖,并把接口实现类文件夹复制到新的工程里 2.pom.xml配置dubbo的相关依赖 <!-- Dubbo Spr ...

  7. 使用maven纯注解集成ssm

    1.配置springMVC框架 第一步:导入包依赖 <!--配置springMVC--> <dependency> <groupId>javax.servlet.j ...

  8. Oracle 中 Start With 关键字

    Start With (树查询) 基本语法如下: SELECT ... FROM + 表名 WHERE + 条件3 START WITH + 条件1 CONNECT BY PRIOR + 条件2 -- ...

  9. Centos-服务管理-systemctl

    systemctl命令属于systemd软件包,这个软件包不仅可以完成系统的初始化工作,还能对系统和服务进行管理 在centos7中,服务单元取代启动脚本,服务单元以.service为文件扩展名,配置 ...

  10. mysql-4-functions

    #进阶4:常见函数(单行函数) /* 将一组逻辑语句封装在方法体中,对外暴露方法名 语法: SELECT 函数名() [FROM 表名] 分类: 1.单行函数:concat,length,ifnull ...