CentOS7.x搭建 GIT 服务器教程

下载安装 git

Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

此实验以 CentOS 7.2 x64 的系统为环境,搭建 git 服务器。

安装依赖库和编译工具

为了后续安装能正常进行,我们先来安装一些相关依赖库和编译工具

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

安装编译工具

yum install gcc perl-ExtUtils-MakeMaker

下载 git

选一个目录,用来放下载下来的安装包,这里将安装包放在 /usr/local/src 目录里

cd /usr/local/src

到官网找一个新版稳定的源码包下载到 /usr/local/src 文件夹里

wget https://www.kernel.org/pub/software/scm/git/git-2.10.0.tar.gz

解压和编译

解压下载的源码包

tar -zvxf git-2.10.0.tar.gz

解压后进入 git-2.10.0 文件夹

cd git-2.10.0

执行编译

make all prefix=/usr/local/git

编译完成后, 安装到 /usr/local/git 目录下

make install prefix=/usr/local/git

配置环境变量

将 git 目录加入 PATH

将原来的 PATH 指向目录修改为现在的目录

echo 'export PATH=$PATH:/usr/local/git/bin' >> /etc/bashrc

生效环境变量

source /etc/bashrc

此时我们能查看 git 版本号,说明我们已经安装成功了。

git --version

创建 git 账号密码

创建 git 账号

为我们刚刚搭建好的 git 创建一个账号

useradd -m gituser

然后为这个账号设置密码

passwd gituser

控制台输入创建密码后,输入您自定义的密码,并二次确认。

初始化 git 仓库并配置用户权限

创建 git 仓库并初始化

我们创建 /data/repositories 目录用于存放 git 仓库

mkdir -p /data/repositories

创建好后,初始化这个仓库

cd /data/repositories/ && git init --bare test.git

配置用户权限

给 git 仓库目录设置用户和用户组并设置权限

chown -R gituser:gituser /data/repositories
chmod 755 /data/repositories

编辑 /etc/passwd 文件,将最后一行关于 gituser 的登录 shell 配置改为 git-shell 的目录如下
示例代码:/etc/passwd

gituser:x:500:500::/home/gituser:/usr/local/git/bin/git-shell

如果按照刚才的步骤执行, 这个位置应该是 /usr/local/git/bin/git-shell, 否则请通过 which git-shell 命令查看位置

安全目的, 限制 git 账号的 ssh 连接只能是登录 git-shell

使用搭建好的 Git 服务

克隆 test repo 到本地

cd ~ && git clone gituser@<您的 CVM IP 地址>:/data/repositories/test.git

恭喜,Git 服务器搭建完成, 从此以后你可以方便地将你的本地代码提交到 Git 服务器托管了

Corosync + Pacemaker + pcs

以Centos 7为例说明安装配置过程

crmsh是管理pacemaker命令行工具,pcs是管理pacemaker + corosync设置工具

这里以pcs为例进行配置

1.设置主机名做好/etc/hosts解析

类似:

12.12.12.129    controller1
12.12.12.130    controller2
12.12.12.131    controller3

注意:后面将会用户vip,规划vip为12.12.12.200,后面会说明

 

2.安装pcs

$ yum install pcs #会自动依赖安装corosync和pacemaker

Make sure pcs is running and configured to start at boot time:

# systemctl enable pcsd

# systemctl start pcsd

3.为每台主机的hacluster用户设置密码:

# echo hapassword| passwd –stdin hacluster

4.使用该密码对将构成集群的节点进行身份验证:

# pcs cluster auth controller1 controller2 controller3 -u hacluster -p hapassword –force

注意:执行该步骤请检查selinux和防火墙设置

5.创建并命名集群,然后启动它:

# pcs cluster setup –force –name openstack-cluster  controller1 controller2 controller3

# pcs cluster start –all

6.查看集群运行状态:

# pcs status

Cluster name: demo-cluster
Stack: corosync
Current DC: controller3 (version 1.1.15-11.el7_3.2-e174ec8) – partition with quorum
Last updated: Fri Jan 20 13:54:04 2017        Last change: Fri Jan 20 11:46:45 2017 by root via cibadmin on controller1

3 nodes and 4 resources configured

Online: [ controller1 controller2 controller3 ]

Full list of resources:

vip    (ocf::heartbeat:IPaddr2):    Started controller2
Clone Set: lb-haproxy-clone [lb-haproxy]
Started: [ controller2 ]
Stopped: [ controller1 controller3 ]

Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled

发现corosyc和pacemaker都是禁用状态。

7.启用开机自动启动:

# pcs cluster enable –all
controller1: Cluster Enabled
controller2: Cluster Enabled
controller3: Cluster Enabled

8.检查pacemaker状态,会发现类似如下错误日志:

# systemctl status pacemaker

error: Resource start-up disabled since no STONITH resources have been defined

error: Either configure some or disable STONITH with the stonith-enabled option

error: NOTE: Clusters with shared data need STONITH to ensure data integrity

主要是因为STONITH resources没有定义,这里没有STONITH设备,所以我们先关闭这个属性:

# pcs property set stonith-enabled=false

注意:另外由于集群选举需要超过法定票数的一半票数,所以必须至少三节点来做,而有的实验场景中

没有三节点环境,所以执行如下命令忽略quorum(法定票数)不能满足的集群状态检查(但实际上

不推荐这样做):

# pcs property set no-quorum-policy=”ignore”

然后重启pacemaker服务:

# systemctl restart pacemaker

9.为资源指定默认黏性值,防止其他节点重启后,资源被抢夺而在此段时间内服务中断:

# pcs resource defaults resource-stickiness=100

10.设置集群的基本属性:

# pcs property set pe-warn-series-max=1000 pe-input-series-max=1000 pe-error-series-max=1000 cluster-recheck-interval=5min

11.配置vip

# pcs resource create vip ocf:heartbeat:IPaddr2 params ip=”12.12.12.200″ cidr_netmask=”24″ op monitor interval=”30s”

12.将nginx添加为集群资源并确保vip只工作在活动节点上:

# pcs resource create webserver systemd:nginx

# pcs constraint order start vip then webserver kind=Optional

# pcs constraint colocation add webserver with vip

13.查看配置文件中生成的定义:

# pcs config

对于示例的这个ha,更好的做法是将haproxy加入到集群资源中,然后利用haproxy去做负载均衡转发,haproxy自身能剔除故障节点。

NGINX+PACEMAKER高可用

环境:CENTOS7
源:官方源和epel源
rpm -ivh http://mirror.sfo12.us.leaseweb.net/epel/7/x86_64/e/epel-release-7-2.noarch.rpm

配置负载均衡
nginx的配置比较简单,详细配置可参考这位朋友的文章,个人感觉写的很好,我就不重复造轮子了
http://freeloda.blog.51cto.com/2033581/1288553
关键代码:
upstream ha.com {
server 192.168.8.177 weight=4;
server 192.168.8.176 weight=3;
server 192.168.8.1 weight=2;
#server 127.0.0.1:8080 backup;
}
location / {
proxy_pass http://ha.com;
proxy_set_header X-Real-IP $remote_addr;
}
#这里配置nginx-status页面是便于nginx状态监测
location /nginx-status {
stub_status on;
access_log off;
}

配置高可用
注:文章内容在http://clusterlabs.org/doc/摘抄整理得出,官方也提供两个中文文档,详细内容请查看官方文档
1、安装
yum install pacemaker pcs
注:corosync和resource-agents自动解析为依赖,当然你也可以手动加上!
这里我选用的是pacemaker自家的集群控制shell,由于新版的pacemaker已经把crmsh脱离了出来,喜欢使用经典的crmsh可以到官网下载,
或使用opensuse HA源的rpm包

2、配置
(一)设置网络【所有节点需要设置】
为了方便通信,设置host(如果方便设置一下主机名也不错)
192.168.8.150 clus-1
192.168.8.178 clus-2

开启防火墙端口;
corosync:UDP5404/5405
pcsd:TCP2224
pacemaker_remote:TCP3121
dlm:TCP21064(未测试,不清楚作用)

端口详情在/usr/lib/firewalld/services/high-availability.xml

firewall-cmd –permanent –add-service=high-availability
firewall-cmd –reload

关闭selinux(centos7下不关闭没发现啥问题,不过官方建议关闭的肯定有它的道理的,毕竟selinux经常会导致一些奇怪的问题)
sed -i.bak “s/SELINUX=enforcing/SELINUX=disabled/g” /etc/selinux/config

(二)配置corosync并启动集群【在任意一个节点操作】
修改hacluster用户密码,用于建立认证(也可以另创建用户)
pcs cluster auth clus-1 clus-2

生成corosync配置
pcs cluster setup –name nginx-ha clus-1 clus-2
注:如果不按照pcs而是用传统的crmsh,这里需要手动修改/etc/corosync/corosync.conf,这里使用pcs命令简化了操作

启动集群
pcs cluster start –all
此时pcs status已显示
Online: [ clus-1 clus-2 ]

(三)创建集群配置
1、禁用stonith
pcs property set stonith-enabled=false
注:每一行的配置都可以使用crm_verify -L来检查语法是否有误

2、创建VIP
pcs resource create ClusterIP ocf:heartbeat:IPaddr2 \
ip=192.168.8.210 cidr_netmask=32 op monitor interval=15s
3、设置忽略集群达不到法定人数时停止所有的资源(此选项在双节点集群下使用)
pcs property set no-quorum-policy=ignore
4、设置“资源粘性值”避免资源在节点之间迁移(防止主备之间频繁切换)
pcs resource defaults resource-stickiness=100
5、开启nginx status页面,用于存活检测
详细配置查看上述的nginx板块
6、手动加载nginx资源代理
pcs resource agents ocf:heartbeat
查看所有可用资源代理,发现没有nginx的
rpm -q resource-agents发现版本为3.9.5与github的版本https://github.com/ClusterLabs/resource-agents相符,
已经是最新了!但是github的版本含有更多的资源代理文件,于是下载拷贝至/usr/lib/ocf/resource.d/heartbeat
[root@centos7 ~]# pcs resource agents ocf:heartbeat|grep nginx
nginx
7、添加nginx集群配置
pcs resource create Nginx ocf:heartbeat:nginx \
configfile=/etc/nginx/nginx.conf \
op monitor interval=30s

过一会已经看到nginx已经启动,但问题是两个服务不在同一个节点启动
[root@centos7 ~]# pcs status
Cluster name: nginx-ha
Last updated: Tue Oct 14 09:38:45 2014
Last change: Tue Oct 14 09:38:42 2014 via crm_attribute on clus-2
Stack: corosync
Current DC: clus-1 (1) – partition with quorum
Version: 1.1.10-32.el7_0.1-368c726
2 Nodes configured
2 Resources configured
Online: [ clus-1 clus-2 ]

Full list of resources:

ClusterIP (ocf::heartbeat:IPaddr2): Started clus-1
Nginx (ocf::heartbeat:nginx): Started clus-2

PCSD Status:
clus-1: Online
clus-2: Online

Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/disabled

8、让资源在同一个节点运行
pcs constraint colocation add Nginx ClusterIP INFINITY
这里集群Nginx只能在有ClusterIP的节点上运行,如果ClusterIP没有在任何节点运行,那么Nginx也不能运行

9、指定资源的启停先后顺序
pcs constraint order ClusterIP then Nginx
意思是先有IP再有服务

10、额外的配置
设置权重,如果你想服务侧重跑在一个节点(比如服务器性能较强)
pcs constraint location Nginx prefers clus-2=50
查看分值
crm_simulate -sL

11、后续操作
此时集群配置完毕,nginx高可用已经可以使用了
别忘了把服务设置为开机启动
systemctl enable pcsd(所有节点)
pcs cluster enable –all

使用pcs status可以很直观的看到这几个服务的状态
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

(四)附录
1、手动模拟测试故障迁移
让clus-2节点设置为standby,模拟clus-2宕机
pcs cluster standby clus-2
使用pcs status查看状态
此时资源运行在clus-1,随后设置unstandby,模拟clus-2重新上线
pcs cluster unstandby clus-2
使用pcs status查看状态,依然运行在clus-1,资源粘性起效

2、手动迁移集群
想迁移到哪个节点,就将哪个节点设置为INFINITY
pcs constraint location Nginx prefers clus-2=INFINITY
查看迁移
pcs constraint –full
移除INFINITY,把控制权交回集群
pcs constraint remove location-Nginx-clus-2-INFINITY

3、crm配置
crm configure property stonith-enabled=false
crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip=192.168.8.210 cidr_netmask=32 \
op monitor interval=10s
crm configure property no-quorum-policy=ignore
crm configure primitive nginx ocf:heartbeat:nginx params configfile=/etc/nginx/nginx.conf \
op monitor interval=15s
crm configure colocation website-with-ip INFINITY: nginx ClusterIP
crm configure order nginx-after-ip mandatory: ClusterIP nginx
crm_verify -L