2014年10月

本文以两台机器实现双集热备高可用集群,主机名node1的IP为192.168.122.168 ,主机名node2的IP为192.168.122.169 。

一、安装集群软件

必须软件pcs,pacemaker,corosync,fence-agents-all,如果需要配置相关服务,也要安装对应的软件

二、配置防火墙

1、禁止防火墙和selinux

# systemctl disable firewalld
# systemctl stop firewalld

修改/etc/sysconfig/selinux确保SELINUX=disabled,然后执行setenforce 0或者reboot服务器以生效

2、设置防火墙规则

# firewall-cmd --permanent --add-service=high-availability
# firewall-cmd --add-service=high-availability

三、各节点之间主机名互相解析

分别修改2台主机名分别为node1和node2,在centos 7中直接修改/etc/hostname加入本机主机名和主机表,然后重启网络服务即可。

#vi /etc/hostname
node1

#systemctl restart network.service
#hostname
node1

配置2台主机的主机表,在/etc/hosts中加入

192.168.122.168 node1
192.168.122.169 node2

四、各节点之间时间同步

在node1和node2分别进行时间同步,可以使用ntp实现。

[root@node1 ~]# ntpdate 172.16.0.1 //172.16.0.1 为时间服务器 

五、各节点之间配置ssh的无密码密钥访问。

下面的操作需要在各个节点上操作。

# ssh-keygen -t rsa -P ‘’   #这个生成一个密码为空的公钥和一个密钥,把公钥复制到对方节点上即可
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2 #对方主机名用登录用户名

两台主机都要互相可以通信,所以两台主机都得互相生成密钥和复制公钥,相互的节点上的hosts文件是都要解析对方的主机名, 192.168.122.168 node1 192.168.122.169 node2

# ssh node2 ‘date’;date #测试一下是否已经互信 

六、通过pacemaker来管理高可用集群

1、创建集群用户

为了有利于各节点之间通信和配置集群,在每个节点上创建一个hacluster的用户,各个节点上的密码必须是同一个。

# passwd hacluster

Changing password for user hacluster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

2、设置pcsd开机自启动

# systemctl start pcsd.service
# systemctl enable pcsd.service

3、集群各节点之间进行认证

# pcs cluster auth node1 node2Username: hacluster Password: node1: Authorized node2: Authorized

4、创建并启动集群

[root@z1 ~]# pcs cluster setup --start --name my_cluster node1 node2

node1: Succeeded
node1: Starting Cluster...
node2: Succeeded
node2: Starting Cluster...

5、设置集群自启动

# pcs cluster enable –all

6、查看集群状态信息

[root@z1 ~]# pcs cluster status

7、设置fence设备

这个可以参考

corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默 认配置目前尚不可用,这可以通过如下命令验证:

#crm_verify -L -V

可以通过如下面命令禁用stonith:

#pcs property set stonith-enabled=false(默认是true)

8、配置存储

高可用集群既可以使用本地磁盘来构建纯软件的镜像型集群系统,也可以使用专门的共享磁盘装置来构建大规模的共享磁盘型集群系统,充分满足客户的不同需求。

共享磁盘主要有iscsi或DBRD。本文并没有使用共享磁盘。

9、配置浮点IP

不管集群服务在哪运行,我们要一个固定的地址来提供服务。在这里我选择192.168.122.101作为浮动IP,给它取一个好记的名字 ClusterIP 并且告诉集群 每30秒检查它一次。

# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.122.170 cidr_netmask=24 op monitor interval=30s
# pcs update VIP op monitor interval=15s

10、配置apache服务

在node1和node2上安装httpd ,确认httpd开机被禁用

# systemctl status httpd.service;

配置httpd监控页面(貌似不配置也可以通过systemd监控),分别在node1和node2上执行

# cat > /etc/httpd/conf.d/status.conf << EOF
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
EOF

首先我们为Apache创建一个主页。在centos上面默认的Apache docroot是/var/www/html,所以我们在这个目录下面建立一个主页。

node1节点修改如下:

[root@node1 ~]# cat <<-END >/var/www/html/index.html
<html>
<body>Hello node1</body>
</html>

END

node2节点修改如下:

[root@node2 ~]# cat <<-END >/var/www/html/index.html 
<html>
<body>Hello node2</body>
</html>

END

下面语句是将httpd作为资源添加到集群中:

#pcs resource create WEB apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status"

11、创建group

将VIP和WEB resource捆绑到这个group中,使之作为一个整体在集群中切换。(此配置为可选)

# pcs resource group add MyGroup VIP
# pcs resource group add MyGroup WEB

12、配置服务启动顺序

以避免出现资源冲突,语法:(pcs resource group add的时候也可以根据加的顺序依次启动,此配置为可选)

# pcs constraint order [action] then [action]
# pcs constraint order start VIP then start WEB

13、指定优先的 Location (此配置为可选)

Pacemaker 并不要求你机器的硬件配置是相同的,可能某些机器比另外的机器配置要好。这种状况下我们会希望设置:当某个节点可用时,资源就要跑在上面之类的规则。为了达到这个效果我们创建location约束。同样的,我们给他取一个描述性的名字(prefer-node1),指明我们想在上面跑WEB 这个服务,多想在上面跑(我们现在指定分值为50,但是在双节点的集群状态下,任何大于0的值都可以达到想要的效果),以及目标节点的名字:

# pcs constraint location WEB prefers node1=50
# pcs constraint location WEB prefers node2=45

这里指定分值越大,代表越想在对应的节点上运行。

14、资源粘性(此配置为可选)

一些环境中会要求尽量避免资源在节点之间迁移。迁移资源通常意味着一段时间内无法提供服务,某些复杂的服务,比如Oracle数据库,这个时间可能会很长。

为了达到这个效果,Pacemaker 有一个叫做“资源粘性值”的概念,它能够控制一个服务(资源)有多想呆在它正在运行的节点上。

Pacemaker为了达到最优分布各个资源的目的,默认设置这个值为0。我们可以为每个资源定义不同的粘性值,但一般来说,更改默认粘性值就够了。资源粘性表示资源是否倾向于留在当前节点,如果为正整数,表示倾向,负数则会离开,-inf表示负无穷,inf表示正无穷。

# pcs resource defaults resource-stickiness=100

常用命令汇总:

查看集群状态:#pcs status

查看集群当前配置:#pcs config

开机后集群自启动:#pcs cluster enable –all

启动集群:#pcs cluster start –all

查看集群资源状态:#pcs resource show

验证集群配置情况:#crm\_verify -L -V

测试资源配置:#pcs resource debug-start resource

设置节点为备用状态:#pcs cluster standby node1

重置Centos 7 Root密码的方式和Centos 6完全不同。让我来展示一下到底如何操作。

1 - 在启动grub菜单,选择编辑选项启动

2 - 按键盘e键,来进入编辑界面

3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh

4 - 现在按下 Control+x ,使用单用户模式启动

5 - 现在,可以使用下面的命令访问系统

chroot /sysroot

6 - 重置密码

passwd root

7 - 更新系统信息

touch /.autorelabel

8 - 退出chroot

exit

9 - 重启你的系统

reboot

就是这样!


via: http://www.unixmen.com/reset-root-password-centos-7/

作者:M.el Khamlichi 译者:su-kaiyao 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码。为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu、CentOS、Debian、Fedora等等),以及它是什么版本号。如何用Perl检测Linux的发行版本?

如果要用Perl脚本检测Linux的发行版,你可以使用一个名为Linux::Distribution的Perl模块。该模块通过检查/etc/lsb-release以及其他在/etc下的发行版特定的目录来猜测底层Linux操作系统。它支持检测所有主要的Linux发行版,包括Fedora、CentOS、Arch Linux、Debian、Ubuntu、SUSE、Red Hat、Gentoo、Slackware、Knoppix和Mandrake。

要在Perl中使用这个模块,你首先需要安装它。

在Debian或者Ubuntu上安装 Linux::Distribution

基于Debian的系统直接用apt-get安装

$ sudo apt-get install liblinux-distribution-packages-perl 

在Fedora、CentOS 或者RHEL上安装 Linux::Distribution

如果你的Linux没有Linux::Distribution模块的安装包(如基于红帽的系统),你可以使用CPAN来构建。

首先确保你的Linux系统安装了CPAN

$ sudo yum -y install perl-CPAN 

然后,使用这条命令来构建并安装模块:

$ sudo perl -MCPAN -e 'install Linux::Distribution' 

用Perl确定Linux发行版

Linux::Distribution模块安装完成之后,你可以使用下面的代码片段来确定你运行的Linux发行版本。

use Linux::Distribution qw(distribution_name distribution_version);

my $linux = Linux::Distribution->new;

if ($linux) {
  my $distro = $linux->distribution_name();
  my $version = $linux->distribution_version();
  print "Distro: $distro $version\n";
}
else {
  print "Distro: unknown\n";
}

via: http://ask.xmodulo.com/detect-linux-distribution-in-perl.html

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

快速地向你展示如何检查你的系统是否受到Shellshock的影响,如果有,怎样修复你的系统免于被Bash漏洞利用

如果你正跟踪新闻,你可能已经听说过在Bash)中发现了一个漏洞,这被称为Bash Bug或者** Shellshock**。 红帽是第一个发现这个漏洞的机构。Shellshock错误允许攻击者注入自己的代码,从而使系统开放各给种恶意软件和远程攻击。事实上,黑客已经利用它来启动DDoS攻击

由于Bash在所有的类Unix系统中都有,如果这些都运行bash的特定版本,它会让所有的Linux系统都容易受到这种Shellshock错误的影响。

想知道如果你的Linux系统是否已经受到Shellshock影响?有一个简单的方法来检查它,这就是我们要看到的。

检查Linux系统的Shellshock漏洞

打开一个终端,在它运行以下命令:

env x='() { :;}; echo vulnerable' bash -c 'echo hello'

如果你的系统没有漏洞,你会看到这样的输出:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x’
hello

如果你的系统有Shellshock漏洞,你会看到一个像这样的输出:

vulnerable
hello

我尝试在我的Ubuntu14.10上运行,我得到了这个:

您还可以通过使用下面的命令查看bash的版本:

bash --version

如果bash的版本是3.2.51(1),你就应该更新了。

为有Shellshock漏洞的Linux系统打补丁

如果你运行的是基于Debian的Linux操作系统,如Ubuntu、Linux Mint的等,请使用以下命令升级Bash:

sudo apt-get update && sudo apt-get install --only-upgrade bash

对于如Fedora,Red Hat,Cent OS等操作系统,请使用以下命令

yum -y update bash

我希望这个小技巧可以帮助你,看看你是否受到Shellshock漏洞的影响并解决它。有任何问题和建议,欢迎来提。


via: http://itsfoss.com/linux-shellshock-check-fix/

作者:Abhishek 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

当手中有相当多的机器需要管理的时候,自动化处理冗余又无聊的任务对系统管理员来说就很重要了。很多管理员习惯了自己写脚本模拟复杂软件之间的调度。不幸的是,脚本会过时,脚本的作者会离职,如果不花费巨大精力来维护这些脚本的话,它们早晚会一点儿用也没有。如果能有一个系统,任何人都可以使用、安装工具,不论其受雇于何人,那真是太期待了。目前已有几种系统可以解决这类需求,这篇教程将介绍其中之一——Puppet——的使用方法。

Puppet 是什么?

Puppet 是一款为 IT 系统管理员和顾问们设计的自动化软件,你可以用它自动化地完成诸如安装应用程序和服务、补丁管理和部署等工作。所有资源的相关配置都以“manifests”的方式保存,单台机器或者多台机器都可以使用。如果你想了解更多内容,Puppet 实验室的网站上有关于 Puppet 及其工作原理的更详细的介绍。

本教程要做些什么?

在这篇教程里,我们将一起安装配置一个 Puppet 服务器,然后在我们的客户端服务器(译注:这里的“客户端服务器”指需要部署业务逻辑的服务器)上完成一些基本配置。

准备工作

由于 Puppet 不是 CentOS 或 RHEL 发行版的基本仓库,所以我们得手动添加 Puppet 实验室提供的自定义仓库。在所有你想使用 Puppet 的地方执行以下命令安装这个仓库(版本不同,对应的 RPM 文件名可能略有不同)。

对于 CentOS/RHEL 6.5:

# rpm -ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs-release-6-10.noarch.rpm

对于 CentOS/RHEL 7:

 # rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm

安装服务器端

在你打算用作 master 的服务器上安装 "puppet-server" 包。

# yum install puppet-server

安装完成后,设置 Puppet 服务器开机自动启动,然后启动它。

# chkconfig puppetmaster on
# service puppetmaster start

现在服务器已经运行起来了,我们试试看我们的网络能不能访问到它。

对于使用 iptables 当做防火墙的 CentOS/RHEL 6,在 /etc/sysconfig/iptables 文件的 OUTPUT ACCEPT 小节里添加下面这一行。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT

重新启动 iptables 服务让刚才的修改生效。

# service iptables restart

在安装了防火墙的 CentOS/RHEL 7 上,我们这么做:

# firewall-cmd --permanent --zone=public --add-port=8140/tcp
# firewall-cmd --reload

安装客户端

执行下面的命令,在客户端节点安装 Puppet 客户端。

# yum install puppet

安装完成后,确保 Puppet 会随开机自动启动。

# chkconfig puppet on

Puppet 客户端需要知道 Puppet master 服务器的地址。最佳方案是使用 DNS 服务器解析 Puppet master 服务器地址。如果你没有 DNS 服务器,在 /etc/hosts 里添加类似下面这几行也可以:

1.2.3.4 server.your.domain

2.3.4.5 client-node.your.domain

1.2.3.4 对应你的 Puppet master 服务器 IP 地址,“server.your.domain”是你的 master 服务器域名(默认通常是服务器的 hostname),“client-node.your.domain”是你的客户端节点。包括 Puppet master 和客户端,所有相关的服务器都要在 hosts 文件里配置。

完成这些设置之后,我们要让 Puppet 客户端知道它的 master 是谁。默认情况下,Puppet 会查找名为“puppet”的服务器,但通常这并不符合你网络环境的真实情况,所以我们要改成 Pupper master 服务器的完整域名。打开文件 /etc/sysconfig/puppet,把 PUPPET\_SERVER 变量的值改成你在 /etc/hosts 文件里指定的 Puppet master 服务器的域名。

PUPPET\_SERVER=server.your.domain

master 服务器名也要在 /etc/puppet/puppet.conf 文件的“[agent]”小节里事先定义好。

server=server.your.domain

现在可以启动 Puppet 客户端了:

# service puppet start

强制我们的客户端在 Puppet master 服务器上登记:

# puppet agent --test

你会看到类似于下面的输出。别怕,这是正常现象,因为服务器还没有在 Puppet master 服务器上验证过。

Exiting; no certificate found and waitforcert is disabled

返回 Puppet master 服务器,检查证书验证请求:

# puppet cert list

你应该能看到一个列出了所有向 Puppet master 服务器发起证书签名请求的服务器。找到你客户端服务器的 hostname 然后使用下面的命令签名(client-node 是你客户端节点的域名):

# puppet cert sign client-node

到此为止 Puppet 客户端和服务器都正常工作了。恭喜你!但是,现在 Puppet master 没有任何要客户端做的事儿。好吧,我们来创建一些基本的 manifest 文件然后让我们的客户端节点安装一些基本工具。

回到你的 Puppet 服务器,确保目录 /etc/puppet/manifests 存在。

# mkdir -p /etc/puppet/manifests

创建 manifest 文件 /etc/puppet/manifests/site.pp,内容如下

node 'client-node' {
        include custom_utils
}

class custom_utils {
        package { ["nmap","telnet","vim-enhanced","traceroute"]:
                ensure => latest,
                allow_virtual => false,
        }
}

然后重新启动 puppetmaster 服务。

# service puppetmaster restart

客户端默认每 30 分钟更新一次配置,如果你希望你的修改能强制生效,就在客户端执行如下命令:

# puppet agent -t

如果你需要修改客户端的默认刷新时间,编辑客户端节点的 /etc/puppet/puppet.conf 文件中“[agent]”小节,增加下面这一行:

runinterval =

这个选项的值可以是秒(格式比如 30 或者 30s),分钟(30m),小时(6h),天(2d)以及年(5y)。值得注意的是,0 意味着“立即执行”而不是“从不执行”

提示和技巧

1. 调试

你免不了会提交错误的配置,然后不得不通过调试判断问题出现在哪儿。一般来说,你要么通过查看日志文件 /var/log/puppet 着手解决问题,要么手动执行查看输出:

# puppet agent -t

使用“-t”选项,你可以看到 Puppet 的详细输出。这条命令还有额外的选项可以帮你定位问题。首先要介绍的选项是:

# puppet agent -t --debug

debug 选项会显示 Puppet 本次运行时的差不多每一个步骤,这在调试非常复杂的问题时很有用。另一个很有用的选项是:

# puppet agent -t --noop

这个选项让 puppet 工作在 dry-run(译注:空转模式,不会对真实环境产生影响)模式下,不会应用任何修改。Puppet 只会把其工作内容输出到屏幕上,不会写到磁盘里去。

2. 模块

有时候你需要更复杂的 manifest 文件,在你着手编写它们之前,你有必要花点儿时间浏览一下 https://forge.puppetlabs.com。Forge 是一个集合了 Puppet 模块的社区,你的问题很可能已经有人解答过了,你能在那儿找到解决问题的模块。如果找不到,那就自己写一个然后提交上去,其他人也能从中获益。

现在,假设你已经找到了一个模块能解决你的问题。怎么把它安装到你的系统中去呢?非常简单,因为 Puppet 已经有了可以直接下载模块的用户界面,只需要执行下面的命令:

# puppet module install <module_name> --version 0.0.0

是你选择的模块的名字,版本号可选(如果没有指定版本号,默认使用最新的版本)。如果你不记得想安装的模块的名字了,试试下面的命令搜索模块:

# puppet module search <search_string>

你会得到一个包含 search\_string 的列表。

# puppet module search apache

Notice: Searching https://forgeapi.puppetlabs.com ...
NAME                   DESCRIPTION                        AUTHOR          KEYWORDS
example42-apache       Puppet module for apache           @example42      example42, apache
puppetlabs-apache      Puppet module for Apache           @puppetlabs     apache web httpd centos rhel ssl wsgi proxy
theforeman-apache      Apache HTTP server configuration   @theforeman     foreman apache httpd DEPRECATED

如果你想查看已经安装了哪些模块,键入:

# puppet module list

总结

到目前为止,你应该有了功能完整的可以向一个或多个客户端服务器推送基本配置的 Puppet master 服务器。你可以自己随便加点儿配置适配你自己的网络环境。不必为试用 Puppet 担心,你会发现,它会拯救你的生活。

Puppet 实验室正在试着维护一个质量上乘的项目文档,所以如果你想学点儿关于 Puppet 相关的配置,我强烈推荐你访问 Puppet 项目的主页 http://docs.puppetlabs.com

如果你有任何问题,敬请在文章下方评论,我会尽我所能回答你并给你建议。


via: http://xmodulo.com/2014/08/install-puppet-server-client-centos-rhel.html

作者:Jaroslav Štěpánek 译者:sailing 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题: 前段时间,我的Ubuntu增加了一个第三方的PPA仓库,如何才能移除这个PPA仓库呢?

个人软件包档案(PPA)是Ubuntu独有的解决方案,允许独立开发者和贡献者构建、贡献任何定制的软件包来作为通过启动面板的第三方APT仓库。如果你是Ubuntu用户,有可能你已经增加一些流行的第三方PPA仓库到你的Ubuntu系统。如果你需要删除掉已经预先配置好的PPA仓库,下面将教你怎么做。

假如你想增加一个叫“ppa:webapps/preview”第三方PPA仓库到你的系统中,如下:

$ sudo add-apt-repository ppa:webapps/preview

如果你想要 单独地删除某个PPA仓库,运行下面的命令:

 $ sudo add-apt-repository --remove ppa:someppa/ppa 

注意,上述命令不会同时删除任何已经安装或更新的软件包。

如果你想要 完整的删除一个PPA仓库并包括来自这个PPA安装或更新过的软件包,你需要ppa-purge命令。

首先要安装ppa-purge软件包:

$ sudo apt-get install ppa-purge 

然后使用如下命令删除PPA仓库和与之相关的软件包:

$ sudo ppa-purge ppa:webapps/preview 

特别滴,在发行版更新后,当你分辨和清除已损坏的PPA仓库时这个方法特别有用!


via: http://ask.xmodulo.com/how-to-remove-ppa-repository-from-command-line-on-ubuntu.html

译者:Vic\_\_\_ 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出