美文网首页IT必备技能
gitlab搭建+主从实时同步

gitlab搭建+主从实时同步

作者: 浅色夏末Summer_0c72 | 来源:发表于2021-01-20 15:30 被阅读0次

    本文参考: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

    相关文章

      网友评论

        本文标题:gitlab搭建+主从实时同步

        本文链接:https://www.haomeiwen.com/subject/mwykzktx.html