构建机房运维基础架构(十三): 搭建NTP服务

安装:

yum -y install ntp ntpdate

配置文件:

<pre># ntp.conf: Managed by puppet.
#
# Keep ntpd from panicking in the event of a large clock skew
# when a VM guest is suspended and resumed.
tinker panic 0

# Permit time synchronization with our time source, but do not'
# permit the source to query or modify the service on this system.'
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
server 0.pool.ntp.org
server 1.pool.ntp.org
server stdtime.gov.hk

# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server 127.127.1.0
fudge 127.127.1.0 stratum 10
restrict 127.127.1.0


# Driftfile.
driftfile /var/lib/ntp/drift

 

其他机器同步时间用:


/usr/sbin/ntpdate $ntp_server_ip &>/dev/null ;clock -w

另外:

1.ntp server 配置文件 和其他机器同步命令 都用Puppet管理。

2.最好要两台NTP 服务器(接入一台交换机),起一个VIP指向这两台机器,并且在接入交换机上打开 源IP、源端口、目的IP、目的端口 的哈希功能(在等价路由基础上),这其实是实现了流量的负载均衡和高可用(具体咨询搞网络的同学)。

 

构建机房运维基础架构(十二): 自建Centos YUM仓库

镜像仓库的搭建

镜像仓库主要做两个,一个是 Centos 官方的仓库,作为日常软件安装,一个是 puppetlabs 的仓库,安装 puppet 使用。

1.创建一个 repo 目录

mkdir /home/repo

2.Centos 官方的仓库是支持 rsync 的,使用如下脚本 yum-repo-update.sh,每天定时就可以同步( rsync 指定 delete 参数删除本地已经不存在镜像中的包,可以避免一些重复包的问题 ):

#!/bin/bash

rsync="rsync -avrt –bwlimit=10240 –delete"
mirror="rsync://ftp.jaist.ac.jp/pub/Linux/CentOS/"

local="/home/repo"
verlist="6 7"
archlist="x86_64"
baselist="os updates extras centosplus contrib"

for ver in $verlist
do
    for arch in $archlist
    do
        for base in $baselist
        do
            remote=$mirror/$ver/$base/$arch/
            mkdir -p $local/centos/$ver/$base/$arch/
            $rsync $remote $local/centos/$ver/$base/$arch/
        done
    done
done

3.puppetlabs 仓库不支持 rsync, 我们使用 yum-utils 中的 reposync来同步,该命名会判断已存在文件而不下载。

先安装 yum-utils:
yum install yum-utils

然后配置脚本,也每天定时跑同步即可(这里注意,reposync 只能同步与宿主机相同版本的软件包,这里我们就只同步 centos6 版本的)

首先要安装一下 puppetlbas 的仓库。

rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm

最终脚本:

#!/bin/bash

rsync="rsync -avrt –bwlimit=10240 –delete"
mirror="rsync://ftp.jaist.ac.jp/pub/Linux/CentOS/"

local="/home/repo"
verlist="6 7"
archlist="x86_64"
baselist="os updates extras centosplus contrib"

for ver in $verlist
do
    for arch in $archlist
    do
        for base in $baselist
        do
            remote=$mirror/$ver/$base/$arch/
            mkdir -p $local/centos/$ver/$base/$arch/
            $rsync $remote $local/centos/$ver/$base/$arch/
        done
    done
done

mkdir -p $local/puppetlabs/6/x86_64
cd $local/puppetlabs/6/x86_64
reposync –repoid=puppetlabs-products

自建仓库的搭建

自建仓库用于公司内部自己打的 rpm 包。

yum -y install createrepo
mkdir -p /home/repo/wandoulabs/6/x86_64/
createrepo /home/repo/wandoulabs/6/x86_64/

入口域名

在服务器上搭建 Nginx,配置文件类似:

server {
listen 80;
server_name mirrors.internal.nosa.me;

access_log logs/mirrors.internal.nosa.access.log;
root /home/repo;

    location / {
        autoindex on;
        index index.html;
    }
}

构建仓库 release 包

将仓库的配置打包成一个 rpm 包,方便管理和升级。

1.repo 文件

[wbase]
name=CentOS-$releasever - Base Wandoulabs
baseurl=http://mirrors.internal.nosa.me/centos/$releasever/os/$basearch/
gpgcheck=0
[wupdates]
name=CentOS-$releasever - Updates Wandoulabs
baseurl=http://mirrors.internal.nosa.me/centos/$releasever/updates/$basearch/
gpgcheck=0

[wextras]
name=CentOS-$releasever - Extras Wandoulabs
baseurl=http://mirrors.internal.nosa.me/centos/$releasever/extras/$basearch/
gpgcheck=0

[wcentosplus]
name=CentOS-$releasever - Plus Wandoulabs
baseurl=http://mirrors.internal.nosa.me/centos/$releasever/centosplus/$basearch/
gpgcheck=0
enabled=0

[wcontrib]
name=CentOS-$releasever - Contrib Wandoulabs
baseurl=http://mirrors.internal.nosa.me/centos/$releasever/contrib/$basearch/
gpgcheck=0
enabled=0

[puppetlabs-products]
name=CentOS-$releasever - Puppetlabs Wandoulabs
baseurl=http://mirrors.internal.nosa.me/puppetlabs/$releasever/$basearch/puppetlabs-products
gpgcheck=0

[epel]
name=CentOS-$releasever - EPEL Wandoulabs
baseurl=http://mirrors.internal.nosa.me/epel/$releasever/$basearch/epel
gpgcheck=0

[wandoulabs]
name=CentOS-$releasesever - Wandoulabs
baseurl=http://mirrors.internal.nosa.me/wandoulabs/$releasever/$basearch/
gpgcheck=0

2.spec 文件

Summary: yum repository
Name: wandoulabs-release
Version: 0.0.13
Release: 1.el6
License: GPL 2 license

%description
This is the repository package

%prep
cp -rf $RPM_SOURCE_DIR/wandoulabs-release .
%build

%install
mkdir -p %{buildroot}
mkdir -p %{buildroot}/etc/yum.repos.d/
mkdir -p %{buildroot}/etc/pki/rpm-gpg/wandoulabs/
cp wandoulabs-release/wandoulabs.repo %{buildroot}/etc/yum.repos.d/wandoulabs.repo

%preun

%files
/etc/yum.repos.d/wandoulabs.repo

3.使用 rpmbuild -bb 打包,然后把 rpm 放入自建仓库中。


使用自建仓库

1.把现有 repo 文件删除

rm /etc/yum.repo.d/*

2.安装自建仓库的 rpm 包。

3.清理环境( yum clean all )后就可以正常使用


自建仓库自动化管理

在系统自动化安装时,会把这个 wandoulabs-relase 包安装上,之后该包会进入 puppet 的管理范围,保持最新的 wandoulabs-release 包。

如果有新的仓库需要添加, 同步完仓库后,将新的 mirror 仓库路径加入配置,打包一个新版本的 wandoulabs-release 包,放入自建仓库中,各服务器会自动更新仓库包。

构建机房运维基础架构(十一): 搭建NAT服务

本文档介绍如何在一台服务器做NAT转发,以外网网卡是em1 ,源IP段10.0.0.0/16 为例。


1.开启forward ,并加入开机启动

# sysctl -w net.ipv4.ip_forward=1
# echo “sysctl -w net.ipv4.ip_forward=1” >> /etc/rc.d/rc.local

2.增加外网IP。

外网出口可以有多个IP,先增加这些IP (不配置的話NAT不生效)。

来个例子脚本( 执行而且把这段脚本写入/etc/rc.d/rc.local ):

ip_prefix=“121.14.25”
ip_min=131
ip_max=158
netmask=“255.255.255.224”

n=0
for i in `seq $ip_min $ip_max`
do
    /sbin/ifconfig em1:$n ${ip_prefix}.$i netmask $netmask up
    ((n++))
done

3.用iptables 增加nat 转发

类似:

# iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o em1 -j SNAT –to-source 121.14.25.17-121.14.25.22
# iptables-save > /etc/sysconfig/iptables

如果不指定出口IP,可以用:

# iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o em1 -j MASQUERADE

另外两点:

  1. 最好要两台NAT机器(接入一台交换机),起一个VIP指向这两台机器,并且在接入交换机上打开 源IP、源端口、目的IP、目的端口 的哈希功能(在等价路由基础上),这其实是实现了流量的负载均衡和高可用(具体咨询搞网络的同学)。

  2. 最好有安全策略,不要让所以机器都可以通过NAT访问外网,这个功能自己去调研方案啦。