Gitlab高可用部署文档-简易版:方案一
部署方案
方案一:负载均衡
2台gitlab同时工作(后续也增加节点,前期部署难度大,后续增加节点简单),
共用一台服务器的redis和postgresql
需要注意点:
1、在2台服务器都启动gitlab后,需要将git相关操作账号做同步,保证uid,gid相同,否则后续2台同时工作会出现权限问题
查看gitlab用到的账号: cat /etc/passwd
2、因方案一研究时间较长,虽然实现2台同时工作,分担了负载压力,但是因为采用nfs部署,导致在线web端导入其他项目gz文件无法正常导入(其他功能正常),所以临时切换为第二种方案
方案二:单机部署,做好备份;另一台可应急启用
只启用一台服务器运行,每天定时备份,在这台服务器宕机的情况下启用第二台,并恢复当天备份数据
部署步骤会在下篇文章中详细介绍
方案一
因为只有2台服务用于部署gitlab
gitlab资源配置如下(端口号:8010):
Gitlab1: 192.168.16.83
Gitlab2: 192.168.16.88
NFS 网络文件系统(端口号:2049)
服务端: 192.168.16.83
客户端: 192.168.16.88*
这种方案在实际部署过程中问题很多,解决难度也会复杂很多,有时候可能一天时间都在解决一个问题,下面将详细讲解这种部署方式的细节,并给出第二种备份部署方案
一、 安装gitlab (需要在2台服务器都做相同操作)
1、 下载安装包
下载地址:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
根据需求选择下载版本,我这里使用的是15.6.2版本
2、 安装gitlab 安装命令:
rpm -i gitlab-ce-15.6.2-ce.0.el7.x86_64.rpm
3、 修改gitlab配置文件指定服务器ip和自定义端口:
vim /etc/gitlab/gitlab.rb
修改端口为8010
修改ip为当前主机ip
进入编辑器后按“i”键进入编辑状态,ESC键退出编辑状态
退出并保存,命令输入 :wq
4、 启动gitlab
sudo gitlab-ctl start
常用命令
#停止gitlab:
sudo gitlab-ctl stop
#关闭gitlab相关的进程:
systemctl stop gitlab-runsvdir.service
#(如果执行过该上面这条命令,后续启动也需要先执行)
systemctl start gitlab-runsvdir.service
#重新加载gitlab相关配置:
sudo gitlab-ctl reconfigure
#重启 gitlab:
sudo gitlab-ctl restart
#查看gitlab 运行日志:
gitlab-ctl tail
查看gitlab用到的账号: cat /etc/passwd ,并同步他们的uid,gid,保证相同
5、 后续修改配置后都需要
先执行
#重新加载gitlab相关配置:
sudo gitlab-ctl reconfigure
再执行
#重启 gitlab:
sudo gitlab-ctl restart
gitlab数据文件默认存储路径为: /var/opt/gitlab
如果需要修改存储路径 (我没有修改,使用是默认存储地址)
vim /etc/gitlab/gitlab.rb
#修改一下两处
git_data_dirs({undefined
"default" => {undefined
"path" => "/home/gitlab/git-data",
"failure_count_threshold" => 10,
"failure_wait_time" => 30,
"failure_reset_time" => 1800,
"failure_timeout" => 30
}
})
#添加一行
git_data_dir "/home/data/gitlab"
二、 安装NFS
1、 服务端安装
1)、检查是否已安装rpcbind、nfs-utils
rpm -qa|grep rpcbind
rpm -qa|grep nfs-utils
如果展示安装包则表示已安装
没有安装则使用 yum安装
使用
yum -y install nfs-utils 安装nfs
yum -y install rpcbind 安装 rpc
2)、编辑/etc/exports文件
vim /etc/gitlab/gitlab.rb
编辑文件内容
/var/opt/gitlab 192.168.16.88(rw,no_all_squash,sync,no_root_squash)
保存:wq
nfs配置详解
/var/opt/gitlab :共享的文件目录
192.168.16.88 允许挂载的主机ip ,88/90 表示允许同网段 88-90多个主机挂载
ro只读访问
rw读写访问
sync所有数据在请求时写入共享
asyncNFS在写入数据前可以相应请求
secureNFS通过1024以下的安全TCP/IP端口发送
insecureNFS通过1024以上的端口发送
wdelay如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide在NFS共享目录中不共享其子目录
no_hide共享NFS目录的子目录
subtree_check如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check和上面相对,不检查父目录权限
all_squash共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash保留共享文件的UID和GID(默认)
root_squashroot用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squasroot用户具有根目录的完全管理访问权限
anonuid=xxx指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx指定NFS服务器/etc/passwd文件中匿名用户的GID
3)、导出nfs配置 校验配置是否有误
#配置生效
exports -r
#查看所有的nfs共享服务端配置
exports -v
#检测本是否成功提供共享目录
showmount localhost
4)、启动rpc服务 (二选一,因系统不同 可能导致启动命令不同)
systemctl start rpcbind
service rpcbind start
5)、启动nfs 服务(二选一,如果报错多试一试) 并设置开机自启
systemctl start nfs
systemctl start nfs-server.service
#开机自启
systemctl enable nfs-server.service
6)、再次验证
showmount -e 192.168.16.83
2、 客户端安装
1)、检查是否已安装nfs-utils
rpm -qa|grep nfs-utils
如果展示安装包则表示已安装
没有安装则使用 yum安装
使用yum -y install nfs-utils 安装nfs
2)、启动nfs 服务 并添加开机自启
systemctl start nfs-server.service
systemctl enable nfs-server.service
3)、验证是否能查看到服务端共享目录
showmount -e 192.168.16.83
4)、挂载服务端共享目录至本机 /apps/gitlab-home目录
mount -t nfs 192.168.16.83:/var/opt/gitlab /apps/gitlab-home
三、修改相关配置
1、主服务器相关配置
1)、持久化nfs共享盘 并绑定 子目录(需要将绑定地址修改为自己的,这一步不可少)
vim /etc/fstab
192.168.3.233:/sf/ones-gitlab /gitlab nfs rw,sync,hard,intr,vers=3 0 0
/gitlab/gitlab-data/git-data /var/opt/gitlab/git-data none bind,rw,sync 0 0
/gitlab/gitlab-data/.ssh /var/opt/gitlab/.ssh none bind,rw,sync 0 0
/gitlab/gitlab-data/gitlab-rails/uploads /var/opt/gitlab/gitlab-rails/uploads none bind,rw,sync 0 0
/gitlab/gitlab-data/gitlab-rails/shared /var/opt/gitlab/gitlab-rails/shared none bind,rw,sync 0 0
/gitlab/gitlab-data/gitlab-ci/builds /var/opt/gitlab/gitlab-ci/builds none bind,rw,sync 0 0
图片中下方5行注释代码 需要放开,且不可少,否则2台gitlab启动会报错
2)、修改gitlab核心配置文件(修改redis可供另一台服务访问,并将gitlab仓库地址修改为nfs上的共享地址,此配置不可少)
vim /etc/gitlab/gitlab.rb
nginx['listen_port'] = 8010
external_url 'https://gitlab.cnsc-sh.com/gitlab'
git_data_dirs({
"default" => {
"path" => "/gitlab/gitlab-data/git-data",
"gitaly_address" => "unix:/var/opt/gitlab/gitaly/gitaly.socket",
"fallback_path" => "/var/opt/gitlab/git-data"
}
})
gitlab_rails['uploads_directory'] = "/gitlab/gitlab-data/gitlab-rails/uploads"
gitlab_rails['shared_path'] = '/gitlab/gitlab-data/gitlab-rails/shared'
gitlab_ci['builds_directory'] = '/gitlab/gitlab-data/gitlab-ci/builds'
gitlab_rails['backup_path'] = '/var/opt/gitlab/backups'
gitlab_rails['backup_keep_time'] = 604800 # 保留备份的时间,以秒为单位(这里是一周)
redis['bind'] = '0.0.0.0'
redis['port'] = 6379
3)、修改数据库配置(允许另一台giltlab服务器访问数据库)
下面2个配置在每次执行命令sudo gitlab-ctl reconfigure后,都需要重新配置
建议配置好后 不执行sudo gitlab-ctl reconfigure
vim /var/opt/gitlab/postgresql/data/postgresql.conf
listen_addresses = '*'
vim /var/opt/gitlab/postgresql/data/pg_hba.conf
local all all peer map=gitlab
host all all 192.168.16.88/32 trust
2、从服务器相关配置
1)、持久化nfs共享盘 并绑定 子目录(需要将绑定地址修改为自己的,这一步不可少)
vim /etc/fstab
192.168.3.233:/sf/ones-gitlab /gitlab nfs rw,sync,hard,intr,vers=3 0 0
/gitlab/gitlab-data/git-data /var/opt/gitlab/git-data none bind,rw,sync 0 0
/gitlab/gitlab-data/.ssh /var/opt/gitlab/.ssh none bind,rw,sync 0 0
/gitlab/gitlab-data/gitlab-rails/uploads /var/opt/gitlab/gitlab-rails/uploads none bind,rw,sync 0 0
/gitlab/gitlab-data/gitlab-rails/shared /var/opt/gitlab/gitlab-rails/shared none bind,rw,sync 0 0
/gitlab/gitlab-data/gitlab-ci/builds /var/opt/gitlab/gitlab-ci/builds none bind,rw,sync 0 0
图片中下方5行注释代码 需要放开,且不可少,否则2台gitlab启动会报错
2)、修改gitlab核心配置文件(修改redis,postgresql使用主服务器服务,并将gitlab仓库地址修改为nfs上的共享地址,此配置不可少)
vim /etc/gitlab/gitlab.rb
nginx['listen_port'] = 8010
external_url 'http://192.168.16.88:8010/gitlab'
gitlab_rails['db_host'] = '192.168.16.83'
redis['socket'] = '/var/opt/gitlab/redis/redis.socket'
gitlab_rails['redis_host'] = '192.168.16.83'
gitlab_rails['redis_post'] = 6379
git_data_dirs({
"default" => {
"path" => "/gitlab/gitlab-data/git-data",
"gitaly_address" => "unix:/var/opt/gitlab/gitaly/gitaly.socket",
"fallback_path" => "/var/opt/gitlab/git-data"
}
})
gitlab_rails['uploads_directory'] = "/gitlab/gitlab-data/gitlab-rails/uploads"
gitlab_rails['shared_path'] = '/gitlab/gitlab-data/gitlab-rails/shared'
gitlab_ci['builds_directory'] = '/gitlab/gitlab-data/gitlab-ci/builds'
gitlab_rails['pdf_enabled'] = true
gitlab_rails['pdf_viewer'] = 'local'