gitlab搭建+主从实时同步

本文参考:https://www.jianshu.com/p/52de6a8d29d6
https://www.cnblogs.com/netonline/archive/2017/10/13/7660767.html

lsyncd复制+pgsql复制

1.安装gitlab (主、从)

* 配置yum源

vi /etc/yum.repos.d/gitlab-ce.repo

复制以下内容:

[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

* 更新本地yum缓存

yum makecache

* 安装GitLab社区版

yum install gitlab-ce #自动安装最新版本

注:若需安装指定版本,则添加版本号即可,即yum install gitlab-ce-x.x.x

* 加载配置文件

gitlab-ctl reconfigure

* 修改配置文件

vim /etc/gitlab/gitlab.rb # 修改默认的配置文件;
Image.png
Image [1].png

* 修改域名

vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
Image [2].png

* 修改GitLab服务端口

vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
Image [3].png

* 启动服务

gitlab-ctl start # 启动所有 gitlab 组件;

* GitLab常用命令


gitlab-ctl start # 启动所有 gitlab 组件;
gitlab-ctl stop # 停止所有 gitlab 组件;
gitlab-ctl restart # 重启所有 gitlab 组件;
gitlab-ctl status # 查看服务状态;
gitlab-ctl reconfigure # 启动服务;(重新加载配置文件,在GitLab初次安装后可以使用,但是在业务环境中不可随意使用,reconfigure会把一些过去的config还原,导致修改的端口以及域名等都没有了。)
vim /etc/gitlab/gitlab.rb # 修改默认的配置文件;
gitlab-rake gitlab:check SANITIZE=true --trace # 检查gitlab;
sudo gitlab-ctl tail # 查看日志;

使用lsyncd复制数据

2.安装lsyncd(主)

yum install epel-release

 yum install lsyncd

* 修改配置文件

vi /etc/lsyncd.conf 
settings {
    logfile ="/var/log/lsyncd/lsyncd.log",
    statusFile ="/var/log/lsyncd/lsyncd.status",
    inotifyMode = "CloseWrite",
    maxProcesses = 8,#同时最大起的rsync进程数,一个rsync同步一个文件
    }


-- IV. 远程目录同步,rsync模式 + ssh shell
sync {
    default.rsync,
    source    = "/var/opt/gitlab",#源目录,路径使用绝对路径
    target    = "root@192.168.1.6:/var/opt/gitlab/",#目标目录
    -- 上面target,注意如果是普通用户,必须拥有写权限
    exclude = { "backups", "gitlab-ci", "sockets", "gitlab.yml", "redis", "postmaster.pid","recovery.conf","postgresql.conf","pg_hba.conf"},
    maxDelays = 5,#统计到多少次监控事件即开始一次同步
    delay = 30,#若30s内未出发5次监控事件,则每30s同步一次
    -- init = true,
    rsync     = {
        binary = "/usr/bin/rsync",#rsync可执行文件
        archive = true,#保持文件所有属性
        compress = true,#压缩传输,是否开启取决于带宽及cpu
        bwlimit   = 2000 #限速 kb/s
        -- rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
        -- 如果要指定其它端口,请用上面的rsh
        }
    }

3、配置免密登录

* 生成秘钥

通过命令”ssh-keygen -t rsa“,生成之后会在用户的根目录生成一个 “.ssh”的文件夹

ssh-keygen -t rsa
Image [4].png

vi ~/.ssh/known_hosts #删除对应ip的相关rsa信息

* 发送公钥到从机

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.6

4、重启lsyncd服务

systemctl restart lsyncd

5、从机也要安装lsyncd服务

6、需要重起postgresql (从)

gitlab-ctl stop postgresql

gitlab-ctl start postgresql

gitlab的PostgresSQL复制

只使用lsyncd对代码层是好使的,但是如果涉及到用户的操作,会导致失败,从库的PostgresSQL起不起来,所以在上面的基础上,再做一个PostgresSQL的复制。

1、主库配置

* 创建一个有登录和复制权限的账号

由于gitlab上的postgresql已经创建了复制账号,所以不用再创建
有账号可不必进行下面的操作
登录PostgresSQL

su - gitlab-psql
psql -h /var/opt/gitlab/postgresql -d gitlabhq_production
Image [5].png
select * from pg_roles;
Image [6].png

否则创建账号

postgres=#create role repl login replication encrypted password 'repl@123';

* 认证文件pg_hba.conf

cd /var/opt/gitlab/postgresql/data
vi pg_hba.conf 

在最下面添加可访问远程ip,trust代表不需要密码访问

host  replication gitlab_replicator 192.168.1.6/32 trust
Image [7].png

* 修改配置文件

vi postgresql.conf

修改如下内容

#监听服务器
listen_addresses = '*'

#主从设置为热备模式,流复制必选参数
wal_level = hot_standby

#流复制允许的连接进程,一般同standby数量一致
max_wal_senders = 2

#流复制在没有基于文件的连续归档时,主服务器可能在备机收到WAL日志前回收这些旧的WAL,此时备机需要重新从一个新的基础备份初始化;可设置wal_keep_segments为一个足够高的值来确保旧的WAL段不会被太早重用;1个WAL日志为16MB,所以在设置wal_keep_segments时,在满足空间的前提下可以尽量设置大一些
wal_keep_segments = 64

* 重启服务

gitlab-ctl restart postgresql

2、从库配置

* 备份主库的数据

备份之前先把主库的lsyncd服务停掉,否则会同步主库数据,清空data目录

cd /opt/gitlab/embedded/postgresql/9.6/bin

./pg_basebackup -h 192.168.1.9 -p 5432 -U gitlab_replicator -F p -P -D  /var/opt/gitlab/postgresql/data/

* 赋予备份目录权限

chown -R gitlab-psql:root  /var/opt/gitlab/postgresql/data/

* 修改从库配置文件postgresql.conf

cd /var/opt/gitlab/postgresql/data/
vi postgresql.conf
#在基础备份时,初始化文件是从主库复制来的,所以配置文件一致,可将wal_level,max_wal_senders与wal_keep_segments等参数注释,以下是新增或修改的参数

#在备份的同时允许查询
hot_standby = on

#可选,流复制最大延迟
max_standby_streaming_delay = 30s

#可选,从向主报告状态的最大间隔时间
wal_receiver_status_interval = 10s

#可选,查询冲突时向主反馈
hot_standby_feedback = on

#默认参数,非主从配置相关参数,表示到数据库的连接数,一般从库做主要的读服务时,设置值需要高于主库
max_connections = 1000

* 修改恢复文件recovery.conf

复制文件

 cp /opt/gitlab/embedded/postgresql/9.6/share/recovery.conf.sample ./recovery.conf

更改文件所属

chown gitlab-psql:root recovery.conf

修改文件

vi recovery.conf

#指明从库身份
standby_mode = on

#连接到主库信息
primary_conninfo = 'host=192.168.1.9 port=5432 user=gitlab_replicator'

#同步到最新数据
recovery_target_timeline = 'latest'

* 重启服务

gitlab-ctl restart postgresql

启动主库的lsyncd服务

systemctl restart lsyncd

* 验证

主库sender进程

 ps -ef | grep postgres
Image [8].png

从库receiver进程

 ps -ef | grep postgres
Image [9].png

推荐阅读更多精彩内容