192.168.1.1-路由器设置 | 192.168.0.1-无线路由器设置

我的IP、服务器的运维笔记

发布时间:2014-05-22 08:36

物大始于小,一切源于一个YUM源。如果你想要管理RHEL或者centos平台,那么搭建一个靠谱的内网的YUM源是很有必要的,好处有这么几点:
(1)不依赖于外网,影响外网的连通性的因素有很多。
(2)安全性好,全是对本地资源的调取。
(3)能够保证系统文件和工具的快速部署。

如何规划一个YUM源?
        本地YUM源的搭建很简单,直接用httpd或者编译一个nginx都可以。我比较推荐后者,配置简单灵活易于扩展。由于网上关于搭建YUM源的相关资料很多,就不在这里浪费太多笔墨了。我的重点是对YUM源目录的规划,假设我们http服务的根目录设置在/var/www/html/下,我的规划是这样的:
.
|-- centos
|   |-- 5.8
|   |   |-- x64
|   |   `-- x86
|   `-- 6.4
|       `-- x64
|-- rhel
|   |-- 5.8
|   |   `-- x64
|   `-- 6.4
|       `-- x64

以上目录结构遵循的规则:/var/www/html/操作系统名称/版本号/平台位数/

如何配置YUM源
       搭建好YUM源之后,下一步就是修改系统自带的YUM源路径了,通常都是保存/etc/yum.repos.d/下,如果每次都是手动修改的话,很麻烦。而且现在很流行自动化。既然需求有了,那下一步就要确定需求的具体实现和步骤了:
(1)判断操作系统的名称、版本号、平台位数
(2)备份系统原有的YUM源配置文件(*.repo)
(3)设置成本地YUM的路径,并写入repo文件中
(4)清除之前YUM源的缓存文件
       根据以上步骤,就可以动手编写shell脚本了。如果自学过shell的话,都很容易。在设置YUM源的路径这一步,由于上一篇已经将目录结构规划好了,所以不管你是x64或者x86平台,访问路径都可以通过脚本变量拼出来了。
以RHEL5.8为例,以下是代码片段:
[RHEL5-lan]
name=Red Hat Enterprise Linux \$releasever - \$basearch
baseurl=http://${yum_server}/rhel/5.8/${platform}/Server/
gpgcheck=0
       脚本具体怎么写,这里并不做太多赘述,我写这篇文章的主要目的是给大家提供一个思路,并不想面面俱到。为了能够让大家方便的使用起来,我已经写好一个现成的脚本提供大家下载。下载地址:https://github.com/June-Wang/github4shell/blob/master/yum_local.sh 大家也可以根据线上具体情况对这个脚本做一些修改。如果你下载了这个脚本,会发现YUM源我写的是一个自定义的本地域名,把他替换成你自己的YUM源的域名或者IP即可(搜索“yum_server=”并替换)。


       由于YUM源本身就是一个纯静态的WEB服务器,所以针对于WEB服务器的扩展和高可用,网上有很多现成的方案和架构。比如实现HTTP加速我可以弄个varnish或者squid做缓存,高可用的实现用keepalived,当然做高可用你要解决的就是两台服务器上文件的实时分发问题,那么inotify+rsync或者sersync就是你需要的。

用域名还是IP?

YUM源的路径用域名还是用IP?本人还是比较推荐域名方式,原因如下:
(1)如果迁移到其他环境,不用修改自动化脚本中的YUM源的路径。
(2)出于安全性考虑,脚本里最好不写IP地址以防敏感信息被泄露。
(3)DNS同一域名可以绑定多个IP,可以进行简单的轮询(非核心应用的负载均衡)。
(4)故障机切换时,改一下域名对应的ip即可,不用修改各个服务器的配置文件了。www.luyouqiwang.com
(5)很多应用程序,默认会开启DNS解析,如果你没有设置,那么会出现连接很慢的情况,比如大家经常会遇到的sshd的DNS反向解析导致的连接服务器慢的问题,mysqld也有同样的困扰(当然可以通过修改相关参数解决)。

搭建DNS代理服务器

       如果只是提供公司内部的DNS服务,我推荐轻量级的DNS代理服务器Dnsmasq,配置很简单,而且RHEL或是Centos默认都安装了此服务。加入我们自定义的域名,配置步骤如下:
(1)添加要读取的本地DNS的文件路径到dnsmasq的配置
vi /etc/dnsmasq.d/dns.conf
#设置本地 DNS
addn-hosts=/etc/dns/dns.local
#设置ipv4的网通DNS
server=202.106.0.20
server=202.106.46.151
#不读取/etc/resolv.conf
no-resolv
(2)编辑本地DNS域名
vi /etc/dns/dns.local
#设置YUM源服务器
10.2.xxx.xxx yum.company.local
#设置NTP服务器
10.2.xxx.xxx ntp.company.local
#设置SYSLOG服务器
10.2.xxx.xxx syslog.company.local
        重启dnsmasq的服务即可,配置起来非常简单。鉴于此DNS服务比较重要,建议分别部署在两台服务器上。设置每台linux服务器的DNS服务器地址,比如dns01是10.2.1.10、dns02是10.2.1.11,步骤如下:
vi /etc/resolv.conf
nameserver 10.2.1.10
nameserver 10.2.1.11
这样,如果第一个DNS服务器失效,那么它会对第二个DNS服务器进行请求。

域名方式访问YUM源
如果你是通过安装nginx部署的YUM源,如果需要通过yum.company.local访问,还需做以下配置。
例如,假设你的yum源服务器是10.2.1.12:
vi /etc/nginx/conf.d/yum.conf
server {
                listen       80;
                server_name yum.company.local 10.2.1.12;
                location / {
                        root   /var/www/html;
                        autoindex on;
                        gzip off;


                         }
        access_log /var/log/nginx/yum.access.log;
        #access_log off;
        }

停下思考

       YUM源配好了,DNS也配好了,自动化脚本也有了。那么我想多台机器执行这个自动化脚本,一台一台拷贝并执行很麻烦,OK需求来了:
(1)每台服务器都能下载并执行
(2)统一控制台进行批量执行

YUM源的另类扩展

       首先,先解决一下第一个简单点的问题,单台服务器下载脚本并执行。那么我们登录一台服务器用什么方法能够简单和快速的获取这个脚本呢?通过CRT软件?winscp?有没有不依赖这些软件的方法吗?答案是肯定的!因为我们已经搭建了一个YUM源,我们可以在他的WEB根目录下建立一个shell文件夹,并把我们需要执行的脚本放到这个文件夹里,那么所有可以访问到这台服务器的机器都能通过HTTP服务访问并下载这个脚本了。
步骤如下:
1、创建shell文件夹
mkdir -p /var/www/html/shell
cp yum_local.sh /var/www/html/shell/
2、通过域名方式访问YUM源,下载并执行脚本。假设大家已经把DNS代理假设好,并设置好本地的/etc/resolv.conf,
curl -s http://yum.company.local/shell/yum_local.sh | sh
这样就完成了单机下载并执行的操作。

远程配置管理

        下一步就是要解决批量执行的操作了。大家可能想到的最多的就是puppet或者salt这种远程配置管理软件。两者我都用过,puppet部署、配置和扩展都比较麻烦,salt虽然安装方便(基于扩展源的二进制包)但是批量执行速度很慢。不过从长远来看我个人可能更看好salt,因为上手容易配置简单。如果平台上没有安装这种远程配置管理软件怎么办。我用expect写了一个批量执行的脚本,供大家使用,下载地址:https://github.com/June-Wang/github4shell/blob/master/expect/exec.sh 和 https://github.com/June-Wang/github4shell/blob/master/expect/exec.exp 两个脚本。

使用方法如下:

1、确保系统安装了expect,如果没有安装可以执行yum install -y expect 进行安装
2、赋予下载的脚本的执行权限chmod +x exec.sh exec.exp
3、./exec.sh 服务器密码列表 shell脚本名
例如,我们要批量修改主机的YUM源:
1、服务器列表文件host.list,文件内容:
10.2.1.13 root passwd
2、shell脚本modify_yum.sh,文件内容:
curl -s http://yum.company.local/shell/yum_local.sh | sh
3、执行: ./exec.sh host.list modify_yum.sh

注意:

1、由于host.list里面是密码明文,所以请将密码文件的权限设置成0600,脚本执行完毕后请将明文文件删除
2、在脚本执行过程中,ps aux命令可以看到脚本调用的用户名和密码,所以确保你执行脚本的机器已经做好安全加固,确保无法通过外网直接登陆本机,创建普通用户,不要用ROOT用户执行,必要的话把ssh的默认端口改了,并只能通过密钥登陆。
3、脚本执行以后会在同级目录生成相应的log文件,以便进行错误排查。
4、执行进度和执行成功与否都只能通过日志文件体现。
5、此脚本只是为了初期部署方便之用,因为存在安全隐患所以不适合长期使用。建议后期转为puppet或者salt。

小贴士:

        如果你想象力够丰富,那么批量编译定制安装也不再话下。假设你的服务器是最小化安装,你想在一批机器上批量编译安装部署程序,你需要的就是:
1、yum安装gcc和程序依赖的库文件
2、下载源码包
3、执行安装脚本
        第一步已经不成问题了,因为YUM源已经建好了。
        第二步,我们可以在YUM源服务器WEB根目录下在建立一个文件夹,用来获取要下载的源码包。
        比如我们要编译安装htop这个工具:
1、在WEB根目录下创建一个tools文件夹
mkdir -p /var/www/html/tools
2、将源码包htop-1.0.2.tar.gz拷贝到tools目录下
cp htop-1.0.2.tar.gz /var/www/html/tools/
3、编写安装htop的shell脚本,并拷贝到/var/www/html/shell/
如果不会写,可以参考我的脚本,下载地址:https://github.com/June-Wang/github4shell/blob/master/install_htop.sh
4、用远程配置管理软件进行推送,推送命令:
curl -s http://yum.company.local/shell/install_htop.sh | sh

版本控制管理的重要性

        当需求不断增加,我们会陷入一种轮回:需求—>需求分析—>编写脚本—>上传测试—>修改脚本—>在测试—>在修改—>...... —>最终发布。当最终发布的时候,你修改了多少次,因为什么原因而修改你可能都不记得了,更不用说你如果离职,要向其他人进行工作交接,你甚至都不知道你究竟都做了些什么!这仅仅还只是你一个人在做,如果一群人呢?如果研发人员不重视版本控制管理,就不要提什么协同工作!当我们打着提高系统性能、业务不能满足当前需要的借口对线上系统进行重构,我相信有些时候并不是程序真的写的不好,无法扩展了,而是你真的看不懂之前写代码的那个人在干什么,你只是用你自己熟悉的方式把别人写过的功能在重写一次!当创业之初的那些程序员相继离职的时候!当公司业务成熟,不在需要大量研发人员而裁员削减成本的时候。你有没有想过,他们的离开究竟给你留下了些什么?没有工作交接、没有注释的代码,对于维护人员来讲就是一个巨大的坑,一个不小心,你都不知道你怎么死的!我们一直在做的就是拆了轮子造轮子!就好像我们靠基建来推动GDP一样,拆了建,建了拆,我们留住的只是一个进度、一个数字而已。其实我们只是在原地踏步,在止步不前!而我们还在怀疑是不是我们的员工水平不行、是不是缺少对员工的激励!其实这些都不是主要问题。如果企业能够靠换人和掏钱就能解决经营和管理问题,那创业这种事儿就太容易干了!我们需要的是保证软件的寿命,就好像我们要做百年老店一样!我们需要的是轮子变车子,而不是反复做轮子!我们要年复一年的积累、进化、完成从劳动密集型到技术创新型的华丽转身!这才是我们需要的!

版本控制集中式还是分布式?

        网上讨论比较多就是git和svn的区别之类的文章,孰优孰劣、分布式好还是集中式好,很难说清楚。笔者不是一个专业的码者,也无法从专业角度去阐述什么。只能推荐一篇文章《教堂与市集》。链接如下:
http://www.pgsqldb.com:8079/mwiki/index.php/%E6%95%99%E5%A0%82%E4%B8%8E%E9%9B%86%E5%B8%82%EF%BC%88%E8%BD%AC%E8%BD%BD%EF%BC%89  也许会给大家一些启发。从需求出发、从项目从员工出发,选择适合自己的就是最好的。

关于我们 - TP-Link 路由器设置 tplink - 广告服务 - 最近更新 - 友情链接 - D-Link 路由器设置 dlink - 网站地图 - 版权声明