Fork me on GitHub
Suzf  Blog

Puppet 自定义facter 简述

在使用puppet作为配置管理工具的同时,facter是一个非常有用的系统盘点工具,自定义fact可以让节点增加更多的标签。这个工具可以通过一些预先设定好变量定位一台主机,比如可 以通过变量lsbdistrelease便可以知道当前系统的版本号,通过osfamily便可以知道系统是RedHat还是SLES,还是其它等等。但 是这些预先设定好的变量毕竟有限,在整个自动化运维过程中,由于系统应用的多样性,更多需要通过应用的名称、角色的名称进行标示,这样就需要自定义一些 fact并赋值到每个节点上去,相当于给节点打上标签。

Jeffrey带你一步步安装ORACLE_RAC STEP:TWO

说明:由于图片过于多没有一一截图,还望大家见谅。
3、集群的 Oracle Grid Infrastructure 的安装:

所需的oracle软件如下:

o 适用于 Linux 的 Oracle Database 11g 第 2 版 Grid Infrastructure (11.2.0.1.0)

o 适用于 Linux 的 Oracle Database 11g 第 2 版 (11.2.0.1.0)

o Oracle Database 11g 第 2 版 Examples(可选)

安装用于 Linux 的 cvuqdisk 程序包

在两个 Oracle RAC 节点上安装操作系统程序包 cvuqdisk。如果没有 cvuqdisk,集群验证实用程序就无法发现共享磁盘,当运行(手动运行或在 Oracle Grid Infrastructure 安装结束时自动运行)集群验证实用程序时,您会收到这样的错误消息:“Package cvuqdisk not installed”。使用适用于您的硬件体系结构(例如,x86_64 或 i386)的 cvuqdisk RPM。

cvuqdisk RPM 包含在 Oracle Grid Infrastructure 安装介质上的 rpm 目录中。
3.1 安装cvuqdisk

设置环境变量 CVUQDISK_GRP,使其指向作为 cvuqdisk 的所有者所在的组(本文为 oinstall):
[[email protected] ~]# CVUQDISK_GRP=oinstall; export CVUQDISK_GRP
[[email protected] ~]# CVUQDISK_GRP=oinstall; export CVUQDISK_GRP

在保存 cvuqdisk RPM 的目录中,使用以下命令在两个 Oracle RAC 节点上安装 cvuqdisk 程序包:
[[email protected] rpm]# pwd
/data/grid/rpm
[[email protected] rpm]# rpm -ivh cvuqdisk-1.0.7-1.rpm
[[email protected] rpm]# rpm -ivh cvuqdisk-1.0.7-1.rpm

使用 CVU 验证是否满足 Oracle 集群件要求

记住要作为 grid 用户在将要执行 Oracle 安装的节点 (racnode1) 上运行。此外,必须为 grid 用户配置通过用户等效性实现的 SSH 连通性。

在grid软件目录里运行以下命令:

[[email protected] grid]#$./runcluvfy.sh stage -pre crsinst -n OceanI,OceanV -fixup -verbose

使用 CVU 验证硬件和操作系统设置

[[email protected] grid]#./runcluvfy.sh stage -post hwos -n OceanI,OceanV -verbose

查看 CVU 报告。CVU 执行的所有其他检查的结果报告应该为“passed”,之后才能继续进行 Oracle Grid Infrastructure 的安装。

3.2、为集群安装 Oracle Grid Infrastructure:
su - grid
#./runInstaller

此处省略 N 张图 ........

当弹出执行脚本的时候一定要先 local node 然后再remote node 切记不可一味图块

3.3、检验cluster安装是否成功

1.检查集群中的结点状态

2.检查SCAN是否产生,是否能ping通

3.检查所有服务的状态

4.检查ASM实例的状态

4、安装database soft & database
4.1、创建asm_group
su - grid
asmca

4.2、使用oracle用户调用图形界面进行安装Oracle Database
$./runInstaller

4.3、使用oracle用户调用dbca创建数据库
$dbca

4.4、查看整个集群状态
#crs_stat -t

其它注意事项:

1.给votedisk和ocr创建ASM时,如果选择normal模式,则需要3个ASM disk。

2.安装Oracle Grid Infrastructure的ORACLE_HOME目录与ORACLE_BASE目录不能存在从属关系;而安装Oracle Database的ORACLE_HOME又必须在ORACLE_BASE目录下。

5、部分错误整理:

错误1:

在第一个节点执行root.sh时报错:

error while loading shared libraries:libcap.so.1:cannot open shared object file: No such file or directory

解决办法:

确定libcap包已经安装

rpm -q libcap

find / -name '*libcap*' -print

创建链接

ln -s /lib64/libcap.so.2.16 /lib64/libcap.so.1

删掉root.sh的配置:

./roothas.pl -deconfig -verbose -force

再次运行root.sh即可。

错误2:

这个错误会在Redhat6.x/CentOS6.x上安装Oracle11gR2 11.2.0.1 RAC时出现。

在第一个节点执行root.sh时报错(各个节点都会出现这个问题):

Adding daemon to inittab

CRS-4124: Oracle High Availability Services startup failed.

CRS-4000: Command Start failed, or completed with errors.

解决办法:(临时)

在生成了文件/var/tmp/.oracle/npohasd文件后,使用root立即执行以下命令命令:

/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1

如果懒得看npohasd有没有生成,就用下面的命令让它自动完成

watch -n 0.5 /bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1

错误3:

通过dbca方式, 在基于ASM存储建库时, 报以下错误:

ORA-12547: TNS:lost contact

原因:

In environment where listener home (including SCAN listener which resides in Grid Infrastructure/ASM home) and database home are owned by different OS user, ORA-12537 could happen when connecting through listener, when creating database through DBCA, or when installing database software and creating a database in runInstaller. Job Role Separation is a typical example as SCAN and local grid home listener is owned differently than database.

解决办法:

检查grid安装的SCAN listener目录和Oracle Database目录的owner是不是一样的。如果不一样,改成一样或将目录设置为770权限。

 

Mysql_Faq: ERROR 1396 (HY000): Operation CREATE USER failed for 'username'@'hostname'

在对mysql 权限进行管理的时候出现如下错误:
ERROR 1396 (HY000): Operation CREATE USER failed for 'username'@'hostname'

But 这个用户只真是存在的 。回想一个之前的操作 : 先是用 grant 语句创建了一个用户,然后权限有变 用 update 更新了一下 mysql.user 的数据 。结果就出现了上面的错误 。
解决办法 :删除无效/冲突的用户授权 ,重新根据需求授权。
这就是说 MySQL 权限控制最好是使用统一的操作方式。

FLUSH PRIVILEGES不会删除用户 ,而是从mysql数据库中的授权表重新载入权限。

GRANT, CREATE USER, CREATE SERVER, and INSTALL PLUGIN 语句 是缓存到服务器内存当中的 。该内存不会被释放由相应的REVOKE, DROP USER, DROP SERVER, and UNINSTALL PLUGIN 语句,因此对于执行该语句的过多的情况下,会有增加内存使用。该缓存内存可以被释放使用 FLUSH PRIVILEGES。

DROP USER
DROP USER user[,user] ...
http://dev.mysql.com/doc/refman/5.1/en/drop-user.html
DROP USER 'username'@HOSTNAME;
CREATE USER 'username'@HOSTNAME [IDENTIFIED BY 'password'];
你可能会需要的,如果你使用的删除刷新权限。
请记住:这并不一定撤销所有该用户可能有(如表的权限)的权限,你将不得不这样做
如果你不这样做,你可能无法重新创建用户。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'username'@HOSTNAME;
DELETE FROM mysql.user WHERE user='username';
FLUSH PRIVILEGES;
CREATE USER 'username'@HOSTNAME [IDENTIFIED BY 'password'];

用户的帐户名是等价的:
以“user_name'@'%'。例如,'user_name' 等同于 'user_name'@'%'。

补充阅读:http://dev.mysql.com/doc/refman/5.1/en/account-names.html
请阅读进一步 bug:
http://bugs.mysql.com/bug.php?id=28331
http://bugs.mysql.com/bug.php?id=62255

Jeffrey带你一步步安装ORACLE_RAC STEP:ONE

Copyright to Jeffrey.Su

前言:

文档编写日期追溯到13年10月,那时的自己还是一枚学生。基本上是三无人员 。听老湿说RAC很高大上,遂弄之。那是啥也不太懂 神马udev 神马 block 什么 ASM 等等 。一切从零开始 , 开始网上收集文档 补充知识 。借鉴了很多文档 。向开源的前辈致敬! 再说说装备之简陋 ,可以称之为小米加步枪。整体装备 i5 2450 Ram 4G disk 5400/r . @[email protected]

这里内存是最要命的 官方说明rac 单机 物理内存至少是1.5G 。 都分1.5 的话 再加一个 openfiler 机器不就成蜗牛了吗? 后通过实践 virtual box 的共享磁盘还是蛮方便的,就用它了 。 一点一点网上加内存呀 !! 最终 还是弄到 1.5G 囧囧囧 , 之前是各种报错 。 历时 一周半 从无到有 测试环境算是出来了 , 但是仅做了简单的测试 。 Cpu 风扇 都开始 往外吐灰尘了 。 这是什么节奏 T_T

文中难免出现纰漏,欢迎大家拍砖 。

apt-get 命令详解及实例

一 什么的是apt-get

高级包装工具(英语:Advanced Packaging Tools,简称:APT)是Debian及其衍生发行版(如:ubuntu)的软件包管理器。APT可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了 Unix系统上管理软件的过程,apt-get命令一般需要root权限执行,所以一般跟着sudo命令。它根yum ,pacman,installpkg等性质差不多,是系统软件的管理工具。会用其中一种基本上都会用了。

二 apt-get 中文参数

用法:apt-get [选项] 命令
apt-get [选项] install|remove pkg1 [pkg2 ...]
apt-get [选项] source pkg1 [pkg2 ...]

apt-get 是一个下载安装软件包的简单命令行接口。
最常用的命令是update(更新)
和install(安装)。

命令:
update - 重新获取软件包列表
upgrade - 进行更新
install - 安装新的软件包
remove - 移除软件包
autoremove - 自动移除全部不使用的软件包
purge - 移除软件包和配置文件
source - 下载源码档案
build-dep - 为源码包配置编译依赖
dist-upgrade - 发行版升级, 参见 apt-get(8)
dselect-upgrade - 依照 dselect 的选择更新
clean - 清除下载的归档文件
autoclean - 清除旧的的已下载的归档文件
check - 检验是否有损坏的依赖

选项:
-h 本帮助文件。
-q 输出到日志 - 无进展指示
-qq 不输出信息,错误除外
-d 仅下载 - 不安装或解压归档文件
-s 不实际安装。模拟执行命令
-y 假定对所有的询问选是,不提示
-f 尝试修正系统依赖损坏处
-m 如果归档无法定位,尝试继续
-u 同时显示更新软件包的列表
-b 获取源码包后编译
-V 显示详细的版本号
-c=? 阅读此配置文件
-o=? 设置自定的配置选项,如 -o dir::cache=/tmp

三 apt-get 常用实例

apt-cache search packagename 搜索包
apt-cache show packagename 获取包的相关信息,如说明、大小、版本等
apt-get install packagename 安装包
apt-get install packagename - - reinstall 重新安装包
apt-get -f install 修复安装"-f = --fix-missing"
apt-get remove packagename 删除包
apt-get remove packagename - - purge 删除包,包括删除配置文件等
apt-get update 更新源
apt-get upgrade 更新已安装的包
apt-get dist-upgrade 升级系统
apt-get dselect-upgrade 使用 dselect 升级
apt-cache depends packagename 了解使用依赖
apt-cache rdepends packagename 是查看该包被哪些包依赖
apt-get build-dep packagename 安装相关的编译环境
apt-get source packagename 下载该包的源代码
apt-get clean 清理无用的包
apt-get autoclean 清理无用的包
apt-get check 检查是否有损坏的依赖

作者:海底苍鹰
地址:http://blog.51yip.com/linux/1176.html

Reference
[1] apt-get(8) - Linux man page

 

Python 设置终端显示颜色、粗体、下划线等效果

也许你希望在终端上输出一些带有颜色或者粗体、下划线等样式的信息,就像man中的那样,那么这篇文章将会起到些许作用。

在Linux终端中,使用转义序列来进行如上所述的显示,转义序列以ESC开头,即ASCII码下的\033,其格式为:
\033[显示方式;前景色;背景色m
显示方式、前景色、背景色至少一个存在即可。

其中:
显示方式:0(关闭所有效果),1(高亮),4(下划线),5(闪烁),7(反色),8(不可见)。
前景色以3开头,背景色以4开头,具体颜色值有:0(黑色),1(红色),2(绿色),3(黄色),4(蓝色),5(紫色),6(青色),7(白色)。即前景绿色为32,背景蓝色为44。

下面是Python程序编写的输出样式脚本:

#! /usr/bin/python                                                          
# -*- coding: utf-8
 
STYLE = {
        'fore': {
                'black': 30, 'red': 31, 'green': 32, 'yellow': 33,
                'blue': 34, 'purple': 35, 'cyan': 36, 'white': 37,
        },
        'back': {
                'black': 40, 'red': 41, 'green': 42, 'yellow': 43,
                'blue': 44, 'purple': 45, 'cyan': 46, 'white': 47,
        },
        'mode': {
                'bold': 1, 'underline': 4, 'blink': 5, 'invert': 7,
        },
        'default': {
                'end': 0,
        }
}
 
def use_style(string, mode='', fore='', back=''):
    mode = '%s' % STYLE['mode'][mode] if STYLE['mode'].has_key(mode) else ''
    fore = '%s' % STYLE['fore'][fore] if STYLE['fore'].has_key(fore) else ''
    back = '%s' % STYLE['back'][back] if STYLE['back'].has_key(back) else ''
    style = ';'.join([s for s in [mode, fore, back] if s])
    style = '\033[%sm' % style if style else ''
    end = '\033[%sm' % STYLE['default']['end'] if style else ''
    return '%s%s%s' % (style, string, end)
 
def test():
    print use_style('Normal')
    print use_style('Bold', mode='bold')
    print use_style('Underline & red text', mode='underline', fore='red')
    print use_style('Invert & green back', mode='reverse', back='green')
    print use_style('Black text & White back', fore='black', back='white')
 
if __name__ == '__main__':
    test()

其显示效果如下图所示:
Python终端色彩显示展示

转自 Pythoner

 

Mysql之replication初探

MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场合。与之对应的另一个技术是同步的MySQL Cluster,但因为比较复杂,使用者较少。

下图是MySQL官方给出了使用Replication的场景:

Replication原理

Mysql 的 Replication 是一个异步的复制过程,从一个MySQL节点(称之为Master)复制到另一个MySQL节点(称之Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(SQL 线程和 I/O 线程)在 Slave 端,另外一个线程(I/O 线程)在 Master 端。

要实现 MySQL 的 Replication ,首先必须打开 Master 端的 Binary Log,因为整个复制过程实际上就是 Slave 从 Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。

看上去MySQL的Replication原理非常简单,总结一下:
* 每个从仅可以设置一个主。
* 主在执行sql之后,记录二进制log文件(bin-log)。
* 从连接主,并从主获取binlog,存于本地relay-log,并从上次记住的位置起执行sql,一旦遇到错误则停止同步。

从这几条Replication原理来看,可以有这些推论:
* 主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。
* 如果主从的网络断开,从会在网络正常后,批量同步。
* 如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。
* 一个衍生的配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。
* 如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。

Puppet 之 Nginx 模块编写

搞puppet也有三几天了,一些概念还不是很清晰。很多时候实验未成功,都是概念没有理清楚、文档没有看全。别的就先不说了,先来安装一个nginx 来试一下吧。

MYSQL 常用总结

文章是之前总结的,还不是很完善。对于新手来说也许有一些帮助吧。

文章难免会出现一些错误,请大家指出。