背景
公司计划将gitlab迁移上云,并部署成高可用方式,下面是gitlab高可用部署的详细方案,希望能对大家有所帮助。
架构图
部署两个完全一样的gitlab,其中gitlab有关目录的存储使用NAS来实现共享,数据库采用psql主从,访问入口使用slb来提供服务。
一、安装postgresql
1、环境
系统版本: Centos7
数据库版本: 9.6.11
主库: 192.168.15.55
从库: 192.168.15.56
2、安装数据库
以下操作步骤请在两个节点进行,主库需要安装数据库软件以及初始化数据库,从库仅需要安装数据库软件即可无需初始化。
(1)下载源码包
wget --no-check-certificate https://ftp.postgresql.org/pub/source/v9.6.11/postgresql-9.6.11.tar.gz
(2)安装psql
yum install readline* zlib –y
tar -zxvf postgresql-9.6.11.tar.gz
cd postgresql-9.6.11
./configure --prefix=/data/postgresql/ --without-zlib
make
make install
(3)初始化Postgresql数据库
adduser postgres
mkdir /data/postgresql/data
chown postgres /data/postgresql/data
#只在主库初始化
su - postgres
/data/postgresql/bin/initdb -D /data/postgresql/data
#初始化完毕之后启动数据库
/data/postgresql/bin/pg_ctl -D /data/postgresql/data -l logfile start
(4)修改监听配置
vim /data/postgresql/data/postgresql.conf
(5)添加允许访问数据库的网段
vim /data/postgresql/data/pg_hba.conf
#添加
host all all 0.0.0.0/0 trust
4、5步骤只在主库执行。
3、主备数据库配置
主库配置
(1)创建复制用户,专门进行主从同步使用
su – postgres
/data/postgresql/bin/psql
create user rpl superuser password '123456';
(2)主库上配置从库允许的网段
vim /data/postgresql/data/pg_hba.conf
host replication rpl 192.168.15.0/0 md5
(3)修改主库参数文件
vim /data/postgresql/data/postgresql.conf
wal_level = hot_standby #启用流复制
max_wal_senders=2 #流复制允许连接进程
wal_keep_segments =64 #xlog目录中最多容纳多少个wal日志文件,超过了则删掉最初的几个。
max_connections = 1000 #主库最大连接数
(4)重启主库服务
/data/postgresql/bin/pg_ctl -D /data/postgresql/data -l logfile restart
从库配置
(1)基础备份
#在从库无需拷贝主库的数据文件到本地,使用pg_basebackup可将主库的数据文件通过网络复制到本地、包括目录结构。
#备注:如果主库存在自定义表空间,此操作会失败
/data/postgresql/bin/pg_basebackup -h 192.168.15.55 -p 5432 -U rpl -F p -x -P -R -D /data/postgresql/data/
(2) 从库配置文件配置
vim /data/postgresql/data/postgresql.conf
hot_standby = on #从库上执行只读操作
max_standby_streaming_delay = 30s #从库接收主库日志最大超时时间
wal_receiver_status_interval = 10s #从库向主库报告的最大时间间隔
hot_standby_feedback = off #从库与主库发生冲突的反馈信息
max_connections = 1500 #数据库最大连接数
(3)创建恢复文件recovery.conf
recovery.conf 用于主库,从库切换时的参数配置。如果从库没有recovery.conf文件可拷贝模板
vim /data/postgresql/data/recovery.conf
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.15.55 port=5432 user=rpl password=123456'
(4)启动从库服务
chmod -R 0700 /data/postgresql/data/
su - postgres
/data/postgresql/bin/pg_ctl -D /data/postgresql/data -l logfile start
4、主从状态检查
(1)查看主库sender进程信息
ps -ef|grep "wal sender process"
(2)查看从库receiver进程信息
ps -ef|grep "wal receiver"
(3)psql查询主从同步状态
select usename,application_name,client_addr,state,sync_state from pg_stat_replication;
(4)主库集群状态
/data/postgresql/bin/pg_controldata /data/postgresql/data/ |grep "Database cluster state"
(5)从库集群状态
/data/postgresql/bin/pg_controldata /data/postgresql/data/ |grep "Database cluster state"
#主从数据同步验证,主库建库、从库进行查询测试
create database test owner postgres;
主库
从库
主从同步正常。
备注: 从库只有只读功能,无法做写入操作
5、创建gitlab所需用户与数据库
/data/postgresql/bin/psql
#创建用户
create role gitlab login encrypted password 'jiahe123';
#创建数据库
create database gitlab owner=gitlab ENCODING = 'UTF8';
6、postgresql扩展pg_trgm
(1)安装,两节点
cd /root/postgresql-9.6.11/contrib/btree_gin
make && make install
cd /root/postgresql-9.6.11/contrib/pg_trgm
make && make install
#重启postregsql
/data/postgresql/bin/pg_ctl -D /data/postgresql/data -l logfile restart
(2)创建扩展
/data/postgresql/bin/psql gitlab
create extension pg_trgm;
create extension btree_gin;
二、安装gitlab
1、安装依赖
yum -y install curl policycoreutils policycoreutils-python openssh-server openssh-server openssh-clients postfix
2、下载软件包
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm
3、绑定阿里云nas
mkdir /data/gitlab
#挂载,步骤这里就不列了,阿里云nas挂载很简单
4、安装gitlab-ce
rpm -ivh gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm
5、修改gitlab配置文件(两个节点)
vim /etc/gitlab/gitlab.rb
external_url 'http://gittest.addnewer.com'
gitlab_rails['backup_path'] = "/data/gitlab/backups"
git_data_dirs({
"default" => {
"path" => "/data/gitlab/git-data"
}
})
postgresql['enable'] = false
gitlab_rails['db_adapter'] = "postgresql"
gitlab_rails['db_encoding'] = "utf8"
gitlab_rails['db_database'] = "gitlab"
gitlab_rails['db_pool'] = 30
gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "jiahe123"
gitlab_rails['db_host'] = "192.168.15.55"
gitlab_rails['db_port'] = "5432"
#这条配置很重要,要不然两个gitlab只能启动一个
unicorn['socket'] = '/var/opt/gitlab/sockets/gitlab.socket'
mkdir /var/opt/gitlab
cd /var/opt/gitlab
#ssh目录
mkdir /data/gitlab/.ssh
ln -s /data/gitlab/.ssh .ssh
#用户头像
mkdir /data/gitlab/gitlab-rails
ln -s /data/gitlab/gitlab-rails/ gitlab-rails
6、启动
#两节点都执行
gitlab-ctl reconfigure
gitlab-ctl restart
7、配置slb
阿里云购买一个slb,配置一个https,指向这两台服务器的80即可
记得开启会话保持
8、域名解析,之后登录
重置密码后登录。
三、迁移
1、导入数据
#停止相关数据连接
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
#还原
cd /data/gitlab/backups/
chmod 777 1638208742_2021_11_30_11.9.8_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1638208742_2021_11_30_11.9.8
之后输入几个“yes”
同步完成。
2、重启gitlab
gitlab-ctl restart
使用之前gitlab的账户进行登录
3、点击runner界面,发现报500错误
原因: 这是因为之前的token与现在的不一样,需要删除一下
4、删除之前token,恢复访问
这个问题大家可以访问我上篇博客:
https://blog.csdn.net/qq_37837432/article/details/121642542
四、gitlab-runner配置
1、找一台服务器添加runner,测试这种方案是否可用
怎么安装runner这里就不介绍了
安装成功。
2、测试gitlab CI/CD是否可以正常运行
Gitlab-runner运行正常
3、测试负载均衡
在阿里云slb上轮流摘除相应服务器,看gitlab使用是否会有异常,没有的话证明高可用已部署成功。
移除一台
访问正常
迁移到此就成功了。