inotify+unison实现数据双向实时同步

前几天做了一个新项目,网站架构是前端用的nginx反向代理了后端两台tomcat,这时候两台tomcat之间的数据实现实时同步,成了一个问题?  在网上搜寻了很多方案,在liux下做文件同步,有如下几种方式: []nfs实现web数据共享[/][]rsyn...
继续阅读 »


前几天做了一个新项目,网站架构是前端用的nginx反向代理了后端两台tomcat,这时候两台tomcat之间的数据实现实时同步,成了一个问题?


 在网上搜寻了很多方案,在liux下做文件同步,有如下几种方式:
    []nfs实现web数据共享[/][]rsync +inotify实现web数据同步[/][]rsync+sersync更快更节约资源实现web数据同步[/][]unison+inotify实现web数据双向同步[/]

在这里详细介绍第四种方案,前几种都有些各自的不足。只有第四种方案支持双向实时同步
,且当其中一台服务器宕机,也不会影响web的访问。(ps:之前一直喜欢nfs,配置非常简单,但是其有个致命的缺点就是其中一台web服务挂掉之后,会直接导致web页面无法访问)。

Unison是一款跨平台的文件同步对象,不仅支撑本地对本地同步,也支撑经由过程SSH、RSH和Socket等收集和谈进行同步。
 Unison支撑双向同步操纵,你既可以从A同步到B,也可以从B同步到A,这些都不须要额外的设定。


1、下载并且编译安装三个软件包


(inotify-tools-3.14.tar.gz、ocaml-3.10.2.tar.gz、unison-2.32.52.tar.gz)
[root@vmware1 tools]# wget http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.2.tar.gz
[root@vmware1 ~]# mkdir -p /taokey/tools
[root@vmware1 ~]# cd /taokey/tools/
[root@vmware1 tools]# wget http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.2.tar.gz
[root@vmware1 tools]# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.32.52/unison-2.32.52.tar.gz
[root@vmware1 tools]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

[root@vmware1 tools]# tar xf inotify-tools-3.14.tar.gz
[root@vmware1 tools]# tar xf ocaml-3.10.2.tar.gz
[root@vmware1 tools]# ll
总用量 3772
drwxrwxrwx 5 1000 1000 4096 3月 14 2010 inotify-tools-3.14
-rw-r--r-- 1 root root 358772 3月 14 2010 inotify-tools-3.14.tar.gz
drwxrwxr-x 26 root wheel 4096 2月 29 2008 ocaml-3.10.2
-rw-r--r-- 1 root root 2785669 2月 29 2008 ocaml-3.10.2.tar.gz
drwxr-xr-x 7 501 wheel 4096 6月 30 2009 unison-2.32.52
-rw-r--r-- 1 root root 697866 6月 30 2009 unison-2.32.52.tar.gz


2、编译安装


[size=16]编译安装inotify,需要安装gcc编译器,不然inotify编译报错。
[root@vmware1 tools]# cd inotify-tools-3.14[/size]
[root@vmware1 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify && make && make install

[size=16]修改PATH环境变量
[root@vmware1 inotify-tools-3.14]# cd /usr/local/inotify/[/size]
[root@vmware1 inotify]# echo "PATH=/usr/local/inotify/bin:$PATH" >/etc/profile.d/inotify.sh
[root@vmware1 inotify]# source /etc/profile.d/inotify.sh
[size=16]添加库文件到系统识别的路径
[root@vmware1 inotify]# echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf[/size]
[root@vmware1 inotify]# ldconfig -v | grep inotify
/usr/local/inotify/lib:
libinotifytools.so.0 -> libinotifytools.so.0.4.1
[size=16]链接库文件到系统识别的路径
[root@vmware1 inotify]# ln -sv /usr/local/inotify/include/ /usr/include/inotify[/size]
"/usr/include/inotify" -> "/usr/local/inotify/include/"
[size=16]编译安装ocaml,unison依赖于ocaml
[root@vmware1 ~]# cd /taokey/tools/ocaml-3.10.2[/size]
[root@vmware1 ocaml-3.10.2]# ./configure
[root@vmware1 ocaml-3.10.2]# make world opt
[root@vmware1 ocaml-3.10.2]# make install
[size=16]编译安装unison,安装依赖性包
[root@vmware1 ocaml-3.10.2]# cd ../unison-2.32.52[/size]
[root@vmware1 unison-2.32.52]# yum -y install ctags-etags
[root@vmware1 unison-2.32.52]# make UISTYLE=text THREADS=true STATIC=true
#UISTYLE=text THREADS=true STATIC=true 表示:使用命令方式,加入线程支持,以静态模式编译
[size=16]make install会提示错误,此错误就是要你cp unison /usr/local/bin,复制即可
[root@vmware1 unison-2.32.52]# make install[/size]
mv /root/bin//unison /tmp/unison-10576
mv: 无法获取"/root/bin//unison" 的文件状态(stat): 没有那个文件或目录
make: [doinstall] 错误 1 (忽略)
cp unison /root/bin/
cp: 无法创建普通文件"/root/bin/": 是一个目录
make: *** [doinstall] 错误 1
[root@vmware1 unison-2.32.52]# cp unison /usr/local/bin
在vmware2服务器192.168.1.12上,安装上述三个软件包。重复以上安装即可,步骤此处省略.


3、免密码密钥登陆配置


分别在服务器vmware1(192.168.1.11)和服务器vmware2(192.168.1.12)上生成ssh秘钥对。
[root@vmware1 ~]# ssh-keygen -t rsa
[root@vmware2 ~]# ssh-keygen -t rsa
两台服务器之间实现免秘钥登陆。
192.168.1.11:
[root@vmware1 ~]# cd .ssh/
[root@vmware1 .ssh]# touch authorized_keys
[root@vmware1 .ssh]# cat id_rsa.pub >>authorized_keys
[root@vmware1 .ssh]# scp authorized_keys 192.168.1.12:/root/.ssh

192.168.12:
[root@vmware2 ~]# cd .ssh/
[root@vmware2 .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvVRA8c9QhTDBTOmbMWlRpQyPor2BOtTOCuPehvpEJdU4pSytLoSQBzQ1TOnbpeX7NSkhGDSTOFT96VdRMBPAF3mdDLg3j7mxPiMo3EDLSdo+kyPk1dVRnmfnplZms2mmFbZZnlRxd5FEgaY3vE/w1mJMMTrpgK+dZd7nOTmIx7QjIwGb5G31G+y7h7LGVpTR/amrJOw2POuzlOQnj2BNNkyGh2uIecBQ+zxNaTzZOoC2SLYPKnsIB5wSycbG5fN0sRMUzuV2R5fFYweb6IJ/2u0zJHhbLQDL9QtPGffb5wS9ZD23fb47HMwY1KPg9Dp7f6v/5vui5u8GPlO5k+aAKQ== root@vmware2
需要把vmware2服务器上的id_rsa.pub复制到vmware1服务器上的authorized_keys文件中。
[root@vmware1 .ssh]# cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvVRA8c9QhTDBTOmbMWlRpQyPor2BOtTOCuPehvpEJdU4pSytLoSQBzQ1TOnbpeX7NSkhGDSTOFT96VdRMBPAF3mdDLg3j7mxPiMo3EDLSdo+kyPk1dVRnmfnplZms2mmFbZZnlRxd5FEgaY3vE/w1mJMMTrpgK+dZd7nOTmIx7QjIwGb5G31G+y7h7LGVpTR/amrJOw2POuzlOQnj2BNNkyGh2uIecBQ+zxNaTzZOoC2SLYPKnsIB5wSycbG5fN0sRMUzuV2R5fFYweb6IJ/2u0zJHhbLQDL9QtPGffb5wS9ZD23fb47HMwY1KPg9Dp7f6v/5vui5u8GPlO5k+aAKQ== root@vmware2
完成之后,测试一下,是否可以免秘钥登陆。
[root@vmware1 ~]# ssh 192.168.1.12
reverse mapping checking getaddrinfo for bogon [192.168.1.12] failed - POSSIBLE BREAK-IN ATTEMPT!
Last login: Tue Sep 9 22:03:33 2014 from 192.168.1.104
[root@vmware2 ~]#
最后,创建文件目录,编写脚本,实现数据实时同步。
[root@vmware1 ~]# mkdir -p /var/vm1
[root@vmware2 ~]# mkdir -p /var/vm2
编unison同步的脚本进行测试
[root@vmware1 ~]# cat unison-A.sh 
###################################################################[size=16]#[/size]
#/bin/bash
ipB="192.168.1.11"
srcA="/var/vm1"
dstB="/var/vm2"
/usr/local/inotify/bin/inotifywait -mrq -e create,delete,modify,move $srcA | while read line; do
/usr/local/bin/unison -batch $srcA ssh://$ipB/$dstB
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
[root@vmware1 ~]# chmod o+x unison-A.sh
[root@vmware1 ~]# sh unison-A.sh &
vmware2服务器上:
[root@vmware2 ~]# cat unison-B.sh 
#/bin/bash
ipA="192.168.1.11"
srcB="/var/vm2"
dstA="/var/vm1"
/usr/local/inotify/bin/inotifywait -mrq -e create,delete,modify,move $srcB | while read line; do
/usr/local/bin/unison -batch $srcB ssh://$ipA/$dstA
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
[root@vmware2 ~]# sh unison-B.sh &
[1] 10555
[root@vmware1 ~]# cd /var/vm1/
[root@vmware1 vm1]# ls
a b c test
[root@vmware2 ~]# cd /var/vm2/
[root@vmware2 vm2]# ls
a b c test
[root@vmware2 vm2]# rm -rf test
[root@vmware1 vm1]# ls
a b c
试验到此结束。 收起阅读 »

10个趣味Linux动画命令

Linux最强大的一个特征就是它有大量的各种小命令工具,这也可以称做是它最有趣的一个地方了。下面就直接让我们看看几个有趣的命令动画吧! 一、xeyes 执行xeyes会在屏幕上出现一双大眼睛,而且眼珠会跟随你的鼠标转动安装xeyes:# sudo apt-...
继续阅读 »
Linux最强大的一个特征就是它有大量的各种小命令工具,这也可以称做是它最有趣的一个地方了。下面就直接让我们看看几个有趣的命令动画吧!


一、xeyes


执行xeyes会在屏幕上出现一双大眼睛,而且眼珠会跟随你的鼠标转动
安装xeyes:
# sudo apt-get install xeyes 
# xeyes
xeyes.GIF


二、moo


你今天咩咩了没有?呵呵!
执行效果
# sudo apt-get moo
moo.gif


三、oneko


如果你认为Linux终端只是字符和光标,没有什么其它更丰富的表现形式了,那你就大错特错了,“oneko”命令就是一个很好的例子,不要以为oneko只是一种小猫的图形,移动你的鼠标,它会和你一起玩耍的。
安装oneko
# sudo apt-get install oneko
 执行效果
# oneko
oneko.gif


四、aafire


有没有想过在你的黑白命令终端上燃起一团火将是什么样子,你只需要输入aafire命令,回车,奇迹就会出现。
安装aafire
# sudo apt-get install libaa-bin
执行效果
# aafire 
fire.gif


五、cmatrix 


你应该看过好莱坞大片《骇客帝国》,相信你会对电影中那些神奇的场景着迷。在Neo的眼里任何东西都能以计算机字节流的形式展现,你是否也想做一个很有黑客范儿的数据流的桌面呢?
安装cmatrix
# sudo apt-get install cmatrix
执行效果
# cmatrix
cma.gif


六、ASCIIquarium 


这真是一个不可思议的杰作,你的linux终端窗口竟然成了水族馆,里面有水,有石、有鱼、有兽。不多说,自己欣赏一下吧。
安装ASCIIquarium
# cd /tmp 
# wget http://www.robobunny.com/projects/asciiquarium/asciiquarium.tar.gz
# tar -zxvf asciiquarium.tar.gz
# cd asciiquarium_1.1/
# cp asciiquarium /usr/local/bin
# chmod 0755 /usr/local/bin/asciiquarium
执行效果
# asciiquarium
asc.gif


七、sl (Steam Locomotive)蒸汽机


看清楚了,不是ls,是‘sl’。ls是linux命令最常用的一个命令,用来列表文件目录等。因为用的频繁,难免有着急打错的时候,一旦你敲成了‘sl’,会出现什么结果?后果很严重,是否还记得《盗梦空间》里突然一辆火车出现在梦境里的场景吗?这个命令的效果就是让你的屏幕上隆隆的驶过一辆蒸汽机火车。有趣吧。
安装sl
# sudo apt-get install sl
执行效果
# sl
sl.gif


八、toilet(厕所)


有没有搞错,还有叫这个名字的命令?尽管这个名字本身就已经够搞笑了。那这个命令有什么特殊功能呢?肯定不是执行这个命令后你家马桶就能自动冲洗 了。它是能用字母拼写出更大字母的工具,具体拼出什么字由命令后面的参数决定,不仅如此,它还能打印出各种风格的效果,比如彩色,金属光泽等。
安装toilet
# sudo apt-get install toilet 
运行效果
# toilet OpenSkill
# toilet -f mono12 -F metal OpenSkill
toilet.png


九、cowsay


很常见的命令,以ascii形式将显示任何你想说的。
安装
# sudo apt-get install cowsay
运行效果
# cowsay openskill cool
cowsayo.png

或者,您可以使用另一个字符,而不是com,这样的字符存储在/usr/share/cowsay/cows,选择不通的cow文件,图像不同!
cowsay2.png

cowsayfront.png


十、xcowsay


从这个命令的名字上,你就应该猜到,牛要说话了。的确,牛有话要说,而且是奶牛。这个命令是cowsay加强版,叫做xcowsay,效果更好。
安装
# sudo apt-get install xcowsay 
运行效果
xcowsay.jpg

挺有意思的发现,所以自己动手玩了一下,有兴趣的同学,你也玩一下吧!


原文:http://www.unixmen.com/list-10-funny-linux-commands/
参考:http://os.51cto.com/art/201312/424971.htm


收起阅读 »

devops工具大全

包&产品管理 []Chocolatey:Chocolatey是Windows下一款开源的命令行包管理软件 ,简单说这相当于Windows的apt-get;[/][]FPM:全称是Effing package management,他就是...
继续阅读 »
dev-ops.jpg


包&产品管理


dops1.png

    []Chocolatey:Chocolatey是Windows下一款开源的命令行包管理软件 ,简单说这相当于Windows的apt-get;[/][]FPM:全称是Effing package management,他就是个软件包管理器,极大的缓解了多个平台构建软件包(deb,rpm,等)的痛苦;[/][]Herd:是一个基于Twitter Murder的文件分布系统;[/][]Vagrant Cachier:Vagrant的一个插件,用于缓存包方面的管理;[/][]WiX Toolset:提供一组最强大的工具集来帮助你创建Windows安装包。该工具集从XML源代码构建你的Windows安装程序包,可以无缝集成到构建过程;[/][]Boxstarter:利用Chocolatey包管理工具来自动化安装软件和创建可重复、脚本化的Windows环境;[/][]Elita:Elita是一个利用git和salt进行持续部署(部署作为服务)和API-driven基础设施的引擎/框架;[/][]Fig:主要用来跟Docker一起来实现的快速隔离的开发环境;[/][]Pulp:Pulp是一个用来管理软件库以及相关内容的平台;[/][]Veewee:Veewee是一个开源工具,用来创建和配置轻量级、可再生、便捷式虚拟机环境。[/]
 

日志记录&监控

dops2.png
    []AmonOne:现代化的自托管服务器监控工具;[/][]Anthracite:一个事件/日志改变/管理应用程序;[/][]collectd3:是一个可视化的collectd系统性能统计工具;[/][]collectd:是一个守护(daemon)进程,用来收集系统性能和提供各种存储方式来存储不同值的机制;[/][]Cronitor:监控cron工作,守护进程,和其他的一切;[/][]Datascope:可视化使用pg_stat_statements postgresql查询性能;[/][]Diamond:是一个基于Python的守护程序,主要用来收集系统指标,并且把它们发布到Graphite(或其它)工具中;[/][]Errbit:是一个用于收集和管理程序错误的开源工具;[/][]FnordMetric:是一个基于redis/ruby的实时事件跟踪应用,是个收集和可视化时间序列数据的框架,用户可以在几分钟内创建漂亮的实时分析仪表盘;[/][]Ganglia:Ganglia是一个跨平台可扩展的、高性能计算系统下的分布式监控系统,如集群和网格;[/]
其他:
dops3.png
dops4.png

云&PAAS环境

dops5.png

进程管理

dops6.png
    []Bouncy:可以作为HTTP路由主机;[/][]Supervisor:是一个客户端服务器系统,允许用户监控和控制类Unix操作系统上的进程数;[/][]God:由Ruby实现的进程监控框架。[/][]bluepill:bluepill[/]

服务发现

dops7.png
    []Consul:简化了分布式环境中的服务的注册和发现流程,通过HTTP或者DNS接口发现。支持外部SaaS 提供者等;[/][]etcd:是一个高可用的Key/Value存储系统,主要用于分享配置和服务发现;[/][]Apache ZooKeeper:是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题;[/][]Weave:创建一个虚拟网络并连接到部署在多个主机上的Docker容器。[/]

源代码管理

dops8.png

持续集成和交付

dops9.png
    []Buildbot:是一个系统的自动化编译/测试周期最需要的软件,以验证代码的变化。通过自动重建和测试每次发生了变化的东西,在建设迅速查明之前,减少不必要的失败;[/][]Cabot:是一个开源,自我托管的监控工具;[/][]Jenkins:是基于Java开发的一种持续集成工具,用于监控持续重复的工作;[/][]Hubot:基于脚本具有很高的灵活性,任何人都可以编写自己的脚本来扩展基本功能;[/][]Hudson:是一个可扩展的持续集成引擎,主要用于:持续、自动地构建/测试软件项目、监控一些定时执行的任务;[/][]CruiseControl.rb:是一个持续集成服务器,它可以让团队里的每个人随时了解项目的健康状况和进度;[/][]OpsBot:是一个开源的、可插入的改善通信的机器人。[/]


配置管理


dops10.png


希望大家有收获,查看原文可以获取到更多了解,原文中列表会持续更新。
翻译原文地址:https://dev-ops-tools.zeef.com/richard.kraayenhagen#block_41685_process-management


收起阅读 »

Mysql配置优化浅谈

安装MySQL后,配置文件my.cnf在MySQL安装目录/share/mysql目录中,该目录中还包含多个配置文件可供参考,有my-large.cnf ,my-huge.cnf,  my-medium.cnf,my-small.cnf,分别对应大中小型数据...
继续阅读 »


安装MySQL后,配置文件my.cnf在MySQL安装目录/share/mysql目录中,该目录中还包含多个配置文件可供参考,有my-large.cnf ,my-huge.cnf,  my-medium.cnf,my-small.cnf,分别对应大中小型数据库应用的配置。win环境下即存在于MySQL安装目录中的.ini文件。


下面列出了对性能优化影响较大的主要变量,主要分为连接请求的变量和缓冲区变量。
一、连接请求的变量


max_connections


MySQL的最大连接数,增加该值增加mysqld要求的文件描述符的数量。如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。

数值过小会经常出现ERROR 1040: Too many connections错误,可以过‘conn%’通配符查看当前状态的连接数量,以定夺该值的大小。

show variables like ’max_connections‘ 查看最大连接数
show status like ‘max_used_connections’ 查看响应的连接数
如下:
mysql> show variables like ‘max_connections‘;

+———————–+——-+

| Variable_name | Value |

+———————–+——-+

| max_connections | 256  |

+———————–+——-+

mysql> show status like ‘max%connections‘;

+———————–+——-+

| Variable_name  | Value |

+—————————-+——-+

| max_used_connections | 256|

+—————————-+——-+
max_used_connections / max_connections * 100% (理想值≈ 85%) 
如果max_used_connections跟max_connections相同 那么就是max_connections设置过低或者超过服务器负载上限了,低于10%则设置过大。


back_log


MySQL能暂存的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用。如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。

back_log值指出在MySQL暂时停止回答新请求之前的短时间内有多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。

当观察你主机进程列表(mysql> show full processlist),发现大量264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大back_log 的值了。

默认数值是50,可调优为128,对于Linux系统设置范围为小于512的整数。


 interactive_timeout


一个交互连接在被服务器在关闭前等待行动的秒数。一个交互的客户被定义为对mysql_real_connect()使用CLIENT_INTERACTIVE 选项的客户。 

默认数值是28800,可调优为7200。
二、缓冲区变量
全局缓冲:


key_buffer_size


key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。

key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。
举例如下:
mysql> show variables like ‘key_buffer_size‘;

+——————-+————+

| Variable_name | Value |

+———————+————+

| key_buffer_size | 536870912 |

+———— ———-+————+

key_buffer_size为512MB,我们再看一下key_buffer_size的使用情况:

mysql> show global status like ‘key_read%‘;

+————————+————-+

| Variable_name  | Value |

+————————+————-+

| Key_read_requests| 27813678764 |

| Key_reads   | 6798830 |

+————————+————-+

一共有27813678764个索引读取请求,有6798830个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:

key_cache_miss_rate =Key_reads / Key_read_requests * 100%,设置在1/1000左右较好

默认配置数值是8388600(8M),主机有4GB内存,可以调优值为268435456(256MB)。


query_cache_size


使用查询缓冲,MySQL将查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。

通过检查状态值Qcache_*,可以知道query_cache_size设置是否合理(上述状态值可以使用SHOW STATUS LIKE ‘Qcache%’获得)。如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲。

与查询缓冲有关的参数还有query_cache_type、query_cache_limit、query_cache_min_res_unit。

query_cache_type指定是否使用查询缓冲,可以设置为0、1、2,该变量是SESSION级的变量。

query_cache_limit指定单个查询能够使用的缓冲区大小,缺省为1M。

query_cache_min_res_unit是在4.1版本以后引入的,它指定分配缓冲区空间的最小单位,缺省为4K。检查状态值Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多,这就表明查询结果都比较小,此时需要减小query_cache_min_res_unit。
举例如下:
mysql> show global status like ‘qcache%‘;

+——————————-+—————–+

| Variable_name | Value  |

+——————————-+—————–+

| Qcache_free_blocks  | 22756  |

| Qcache_free_memory  | 76764704 |

| Qcache_hits      | 213028692 |

| Qcache_inserts     | 208894227 |

| Qcache_lowmem_prunes | 4010916 |

| Qcache_not_cached | 13385031 |

| Qcache_queries_in_cache | 43560 |

| Qcache_total_blocks | 111212  |

+——————————-+—————–+

mysql> show variables like ‘query_cache%‘;

+————————————–+————–+

| Variable_name      | Value  |

+————————————–+———–+

| query_cache_limit      | 2097152 |

| query_cache_min_res_unit  | 4096   |

| query_cache_size      | 203423744 |

| query_cache_type      | ON  |

| query_cache_wlock_invalidate | OFF  |

+————————————–+—————+

查询缓存碎片率= Qcache_free_blocks / Qcache_total_blocks * 100%

如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。

查询缓存利用率= (query_cache_size – Qcache_free_memory) / query_cache_size * 100%

查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。

查询缓存命中率= (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

示例服务器查询缓存碎片率=20.46%,查询缓存利用率=62.26%,查询缓存命中率=1.94%,命中率很差,可能写操作比较频繁吧,而且可能有些碎片。

每个连接的缓冲:


record_buffer_size


每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。

默认数值是131072(128K),可改为16773120 (16M)


read_rnd_buffer_size


随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。

一般可设置为16M


sort_buffer_size


每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。

默认数值是2097144(2M),可改为16777208 (16M)。


join_buffer_size


联合查询操作所能使用的缓冲区大小

record_buffer_size,read_rnd_buffer_size,sort_buffer_size,join_buffer_size为每个线程独占,也就是说,如果有100个线程连接,则占用为16M*100


table_cache


表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

1G内存机器,推荐值是128-256。内存在4GB左右的服务器该参数可设置为256M或384M。


max_heap_table_size


用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变,即set @max_heap_table_size=#

这个变量和tmp_table_size一起限制了内部内存表的大小。如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。


tmp_table_size


通过设置tmp_table_size选项来增加一张临时表的大小,例如做高级GROUP BY操作生成的临时表。如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果,建议尽量优化查询,要确保查询过程中生成的临时表在内存中,避免临时表过大导致生成基于硬盘的MyISAM表。
mysql> show global status like ‘created_tmp%‘;

+——————————–+———+

| Variable_name   | Value |

+———————————-+———+

| Created_tmp_disk_tables | 21197 |

| Created_tmp_files   | 58  |

| Created_tmp_tables  | 1771587 |

+——————————–+———–+
每次创建临时表,Created_tmp_tables增加,如果临时表大小超过tmp_table_size,则是在磁盘上创建临时表,Created_tmp_disk_tables也增加,Created_tmp_files表示MySQL服务创建的临时文件文件数,比较理想的配置是:

Created_tmp_disk_tables / Created_tmp_tables [i] 100% <= 25%比如上面的服务器Created_tmp_disk_tables / Created_tmp_tables [/i] 100% =1.20%,应该相当好了

默认为16M,可调到64-256最佳,线程独占,太大可能内存不够I/O堵塞


thread_cache_size


可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。

通过比较 Connections和Threads_created状态的变量,可以看到这个变量的作用。

默认值为110,可调优为80。


thread_concurrency


推荐设置为服务器 CPU核数的2倍,例如双核的CPU, 那么thread_concurrency的应该为4;2个双核的cpu, thread_concurrency的值应为8。默认为8


wait_timeout


指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。
三、配置InnoDB的几个变量


innodb_buffer_pool_size


对于InnoDB表来说,innodb_buffer_pool_size的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。

根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)。


innodb_flush_log_at_trx_commit


主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0、1、2三个。0,表示当事务提交时,不做日志写入操作,而是每秒钟将log buffer中的数据写入日志文件并flush磁盘一次;1,则在每秒钟或是每次事物的提交都会引起日志文件写入、flush磁盘的操作,确保了事务的ACID;设置为2,每次事务提交引起写入日志文件的动作,但每秒钟完成一次flush磁盘操作。

实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。因此,MySQL手册也建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。

根据MySQL手册,在允许丢失最近部分事务的危险的前提下,可以把该值设为0或2。


innodb_log_buffer_size


log缓存大小,一般为1-8M,默认为1M,对于较大的事务,可以增大缓存大小。

可设置为4M或8M。


innodb_additional_mem_pool_size


该参数指定InnoDB用来存储数据字典和其他内部数据结构的内存池大小。缺省值是1M。通常不用太大,只要够用就行,应该与表结构的复杂度有关系。如果不够用,MySQL会在错误日志中写入一条警告信息。

根据MySQL手册,对于2G内存的机器,推荐值是20M,可适当增加。


innodb_thread_concurrency=8


推荐设置为 2*(NumCPUs+NumDisks),默认一般为8

 原文作者:破修电脑的
分享原文地址:http://www.cnblogs.com/Bozh/archive/2013/01/22/2871545.html 收起阅读 »

Centos6.4安装heartbeat3.0详解

HA
#此文档其实可以当成脚本,只要把软件下载到相应的目录即可 在这里软件是放在/soft #此实验软件下载地址:http://pan.baidu.com/share/link?shareid=600042051&uk=823269712 #环境说明: #系统: C...
继续阅读 »
#此文档其实可以当成脚本,只要把软件下载到相应的目录即可 在这里软件是放在/soft
#此实验软件下载地址:http://pan.baidu.com/share/link?shareid=600042051&uk=823269712
#环境说明:
#系统: Centos6.4 系统采用基本安装
node1(主服务器):eth0:192.168.1.6(node1)eth1:10.0.9.103(priv1)
node2(从服务器):eth0:192.168.1.8(node2)eth1:10.0.9.121(priv2)
VIP地址:192.168.1.100
#新建用户
groupadd haclient
useradd -g haclient hacluster
#定义变量
cat << EOF >> /root/.bash_profile
export PREFIX=/usr/local/ha
export LCRSODIR=$PREFIX/libexec/lcrso
export CLUSTER_USER=hacluster
export CLUSTER_GROUP=haclient
export CFLAGS="$CFLAGS -I$PREFIX/include -L$PREFIX/lib"
getent group ${CLUSTER_GROUP} >/dev/null || groupadd -r ${CLUSTER_GROUP}
getent passwd ${CLUSTER_USER} >/dev/null || useradd -r -g ${CLUSTER_GROUP} -d /var/lib/heartbeat/cores/hacluster -s /sbin/nologin -c "cluster user" ${CLUSTER_USER}
EOF
#安装前,yum安装缺的包
yum install -y glib2-devel bzip2-devel libxml2 libxml2-devel libtool-ltdl-devel buuid-devel automake autoconf docbook-style-xsl libxslt-devel gettext libaio-devel resource-agents
#安装各个模块软件包
#安装Cluster Glue
#这个放软件的目录 /soft
cd /soft
tar zxf Reusable-Cluster-Components-glue--02bdcf58f9a0.tar.gz
cd Reusable-Cluster-Components-glue--02bdcf58f9a0
./autogen.sh
./configure --prefix=$PREFIX --with-daemon-user=${CLUSTER_USER} --with-daemon-group=${CLUSTER_GROUP} --enable-fatal-warnings=no LIBS=/lib/libuuid.so.1
#注意:如果你是64位系统将LIBS=/lib64/libuuid.so.1 强烈建议安装下面3个软件业要指定一下,不然也会报错
make && make install
#安装Resource Agents
cd /soft
tar zxf resource-agents-3.9.5.tar.gz
cd resource-agents-3.9.5
./autogen.sh
./configure --prefix=$PREFIX --enable-fatal-warnings=no LIBS=/lib/libuuid.so.1
make && make install
#安装heartbeat
cd /soft
tar zxf Heartbeat-3-0-545554f6fc0a.tar.gz
cd Heartbeat-3-0-545554f6fc0a
./bootstrap
./configure --prefix=$PREFIX --enable-fatal-warnings=no
make && make install
#安装pacemaker
cd /soft
tar jxf Pacemaker-1-0-c3869c00c759.tar.bz2
cd Pacemaker-1-0-c3869c00c759
./autogen.sh
./configure --prefix=$PREFIX --with-lcrso-dir=$LCRSODIR --enable-fatal-warnings=no LIBS=/lib/libuuid.so.1
make && make install
##########################[size=16]#报错信息[/size]######################[size=16]#[/size]
You must have autoconf installed to compile the cluster-glue package.
Download the appropriate package for your system,
or get the source tarball at: ftp://ftp.gnu.org/pub/gnu/autoconf/
解决方法:
yum install automake
Download the appropriate package for your system,
or get the source tarball at: ftp://ftp.gnu.org/pub/gnu/automake/
解决方法:
yum install autoconf
You must have libtool installed to compile the cluster-glue package.
Download the appropriate package for your system,
or get the source tarball at: ftp://ftp.gnu.org/pub/gnu/libtool/
解决方法:
yum install libtool
./configure时出现configure: error: BZ2 libraries not found
解决办法:yum -y install bzip2-devel glib2-devel
make的时候
安装Reusable-Cluster-Components-glue--glue-1.0.9
./.libs/libplumb.so: undefined reference to `uuid_parse’
./.libs/libplumb.so: undefined reference to `uuid_generate’
./.libs/libplumb.so: undefined reference to `uuid_copy’
./.libs/libplumb.so: undefined reference to `uuid_is_null’
./.libs/libplumb.so: undefined reference to `uuid_unparse’
./.libs/libplumb.so: undefined reference to `uuid_clear’
./.libs/libplumb.so: undefined reference to `uuid_compare’
collect2: ld returned 1 exit status
gmake[2]: *** [ipctest] Error 1
gmake[2]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib/clplumbing’
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib’
make: *** [all-recursive] Error 1
解决办法:
./configure --prefix=$PREFIX --with-daemon-user=${CLUSTER_USER} --with-daemon-group=${CLUSTER_GROUP} --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
各位在./configure的时候指定一下LIBS,如果是32位系统的话改成LIBS='/lib/libuuid.so.1'。下面ClusterLabs-resource Heartbeat在./configure的时候都指定一下,要不然继续报错。
解决办法:yum install e2fsprogs-devel libuuid-devel
make的时候报错
/usr/bin/xsltproc \
--xinclude \
http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl hb_report.xml
error : Operation in progress
warning: failed to load external entity "http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"
cannot parse http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
gmake[2]: *** [hb_report.8] Error 4
gmake[2]: Leaving directory `/heartbeat/Reusable-Cluster-Components-glue--5e06b2ddd24b/doc'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/heartbeat/Reusable-Cluster-Components-glue--5e06b2ddd24b/doc'
make: *** [all-recursive] Error 1
解决方法:
yum -y install docbook-style-xsl
查看日志发现错误
grep -i error /var/log/ha-log
Sep 14 19:33:38 node1 pengine: [29617]: ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
Sep 14 19:33:38 node1 pengine: [29617]: ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
Sep 14 19:33:38 node1 pengine: [29617]: ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
Sep 14 19:33:45 node1 pengine: [29617]: info: process_pe_message: Configuration ERRORs found during PE processing. Please run "crm_verify -L" to identify issues.
解决方法:STONITH默认是开启的,而我们做实验的时候是没有这个设备,所以要关闭它
STONTIH设备详解请参考:http://czmmiao.iteye.com/blog/1174667
关闭方法是:
[root@localhost ~]# /usr/local/ha/sbin/crm
abort: couldn't find crm libraries in [/usr/local/ha/sbin /usr/lib/python26.zip /usr/lib/python2.6 /usr/lib/python2.6/plat-linux2 /usr/lib/python2.6/lib-tk /usr/lib/python2.6/lib-old /usr/lib/python2.6/lib-dynload /usr/lib/python2.6/site-packages /usr/lib/python2.6/site-packages/gtk-2.0 /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info]
(check your install and PYTHONPATH)
解决方法:
vim .bash_profile
然后添加以下内容
export PYTHONHONME=/usr/local/ha
export PYTHONPATH=$PYTHONHOME:/usr/local/ha/lib/python2.6/site-packages
export PATH=$PATH:/usr/local/ha/sbin
最后执行 source .bash_profile
[root@node1 ~]# vim /etc/hosts  添加以下内容
192.168.1.6 node1
192.168.1.8 node2
10.0.9.103 priv1
10.0.9.121 priv2
拷贝配置文件
[root@node1 ~]# cp /usr/local/ha/share/doc/heartbeat/ha.cf /usr/local/ha/etc/ha.d/
[root@node1 ~]# cp /usr/local/ha/share/doc/heartbeat/haresources /usr/local/ha/etc/ha.d
[root@node1 ~]# cp /usr/local/ha/share/doc/heartbeat/authkeys /usr/local/ha/etc/ha.d/
ha.cf配置文件部分参数详解:
logfile /var/log/ha-log
#指名heartbaet的日志存放位置
keepalive 2
#指定心跳使用间隔时间为2秒(即每两秒钟在eth1上发送一次广播)
deadtime 30
#指定备用节点在30秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源
warntime 10
#指定心跳延迟的时间为十秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务
initdead 120
#在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。

udpport 694
#设置广播通信使用的端口,694为默认使用的端口号。
baud 19200
#设置串行通信的波特率

bcast eth0 # Linux 指明心跳使用以太网广播方式,并且是在eth0接口上进行广播。
#mcast eth0 225.0.0.1 694 1 0
#采用网卡eth0的Udp多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast和mcast分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。
#ucast eth0 192.168.1.2
#采用网卡eth0的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP地址
auto_failback on
#用来定义当主节点恢复后,是否将服务自动切回,heartbeat的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点,如果该选项设置为off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点
#stonith baytech /etc/ha.d/conf/stonith.baytech
# stonith的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性和完整性。
#watchdog /dev/watchdog
#该选项是可选配置,是通过Heartbeat来监控系统的运行状态。使用该特性,需要在内核中载入"softdog"内核模块,用来生成实际的设备文件,如果系统中没有这个内核模块,就需要指定此模块,重新编译内核。编译完成输入"insmod softdog"加载该模块。然后输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc |grep watchdog"(应为130)。最后,生成设备文件:"mknod /dev/watchdog c 10 130" 。即可使用此功能
node node1 #主节点主机名,可以通过命令“uanme –n”查看。
node node2 #备用节点主机名
ping 192.168.12.237
#选择ping的节点,ping 节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接
ping_group group1 192.168.12.120 192.168.12.237
#类似于ping ping一组ip地址
apiauth pingd gid=haclient uid=hacluster
respawn hacluster /usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s
#该选项是可选配置,列出与heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插件,这些进程遇到故障可以自动重新启动。最常用的进程是pingd,此进程用于检测和监控网卡状态,需要配合ping语句指定的ping node来检测网络的连通性。其中hacluster表示启动pingd进程的身份。
#下面的配置是关键,也就是激活crm管理,开始使用v2 style格式
crm respawn
#注意,还可以使用crm yes的写法,但这样写的话,如果后面的cib.xml配置有问题
#会导致heartbeat直接重启该服务器,所以,测试时建议使用respawn的写法
#下面是对传输的数据进行压缩,是可选项
compression bz2
compression_threshold 2
注意,v2 style不支持ipfail功能,须使用pingd代替
资源文件(/etc/ha.d/haresources)
node1 IPaddr::192.168.1.100/24/eth0 httpd
认证文件(/etc/ha.d/authkeys)
auth 1
1 crc


文章作者:yangdonglin
分享原文地址:http://yangdonglin.blog.51cto.com/5404572/1297439


收起阅读 »

hbase两点错误总结

一、hbase的HRegionServer节点启动失败 2015-10-23 17:24:33,147 WARN [regionserver60020] zookeeper.RecoverableZooKeeper: Node /hbase/rs/Sla...
继续阅读 »


一、hbase的HRegionServer节点启动失败


2015-10-23 17:24:33,147 WARN  [regionserver60020] zookeeper.RecoverableZooKeeper: Node /hbase/rs/SlaveServer,60020,1413095376898 already deleted, retry=false
2015-10-23 17:24:33,147 WARN [regionserver60020] regionserver.HRegionServer: Failed deleting my ephemeral node
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /hbase/rs/SlaveServer,60020,1413095376898
at org.apache.zookeeper.KeeperException.create(KeeperException.java:111)
at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
at org.apache.zookeeper.ZooKeeper.delete(ZooKeeper.java:873)
at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.delete(RecoverableZooKeeper.java:156)
at org.apache.hadoop.hbase.zookeeper.ZKUtil.deleteNode(ZKUtil.java:1273)
at org.apache.hadoop.hbase.zookeeper.ZKUtil.deleteNode(ZKUtil.java:1262)
at org.apache.hadoop.hbase.regionserver.HRegionServer.deleteMyEphemeralNode(HRegionServer.java:1298)
at org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:1012)
at java.lang.Thread.run(Thread.java:662)
2015-10-23 17:24:33,158 INFO [regionserver60020] zookeeper.ZooKeeper: Session: 0x249020a2cfd0014 closed
2015-10-23 17:24:33,158 INFO [regionserver60020-EventThread] zookeeper.ClientCnxn: EventThread shut down
2015-10-23 17:24:33,158 INFO [regionserver60020] regionserver.HRegionServer: stopping server null; zookeeper connection closed.
2015-10-23 17:24:33,158 INFO [regionserver60020] regionserver.HRegionServer: regionserver60020 exiting
2015-10-23 17:24:33,158 ERROR [main] regionserver.HRegionServerCommandLine: Region server exiting
java.lang.RuntimeException: HRegionServer Aborted
at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.start(HRegionServerCommandLine.java:66)
at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.run(HRegionServerCommandLine.java:85)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:126)
at org.apache.hadoop.hbase.regionserver.HRegionServer.main(HRegionServer.java:2422)
2015-10-23 17:24:33,160 INFO [Thread-9] regionserver.ShutdownHook: Shutdown hook starting; hbase.shutdown.hook=true; fsShutdownHook=org.apache.hadoop.fs.FileSystem$Cache$ClientFinalizer@8d5aad
2015-10-23 17:24:33,160 INFO [Thread-9] regionserver.ShutdownHook: Starting fs shutdown hook thread.
2015-10-23 17:24:33,160 INFO [Thread-9] regionserver.ShutdownHook: Shutdown hook finished.
一般这种情况,是因为集群中节点时间相差太多,时间没有同步导致的,解决方案:
# yum -y install ntpdate  && chkconfig ntpdate off
# crontab -e #add sync time cron scripts
[i]/2 [/i] [i] [/i] * ntpdate asia.pool.ntp.org
如果遇到是其他原因的同学,下面回答分享一下!


二、主机名配置问题


failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
根据查看提示链接http://wiki.apache.org/hadoop/ConnectionRefused排查错误,将/etc/hosts中的127.0.0.1 hbase1删除(从节点对应也删除)后程序运行正常。接着尝试运行HBase,没有出现问题!创建表也正常了!
一开始知道得删除hosts文件中127.0.1.1,但是没想到127.0.0.1 主机名也得删除。
 
还有一种情况也会导致集群启动问题,那就是主机名不规范,作为hadoop集群中的主机名,是不支持_和-的,比如hbase_host1这是不支持的! 收起阅读 »

1024看牛逼程序员怎么不花钱巧追美女

前言 在俄罗斯有一个官方节日-“程序员节”,即每年第256天(平年9月13日或闰年9月12日),因为256是程序员熟知的8位元基本数字,而且它是2的8次方,比365少了2的最大幂。同时因为在24位红绿蓝(RGB)颜色空间里,最大值为十六进制0xF...
继续阅读 »
cxy1024.png


前言


在俄罗斯有一个官方节日-“程序员节”,即每年第256天(平年9月13日或闰年9月12日),因为256是程序员熟知的8位元基本数字,而且它是2的8次方,比365少了2的最大幂。同时因为在24位红绿蓝(RGB)颜色空间里,最大值为十六进制0xFFFFFF,表示为白色,所以这一天所有程序员都要穿白色服装来庆祝。
而在中国,程序员作为IT人的代表,因为压力大,交际面窄,过度劳累等特征往往被作为苦逼职业的典型,所以有人在微博上呼吁把今天10月24日设为中国的程序员节,原因是1024对程序员同样是很有意义的一个数字,因为1K=1024b,而在国内一些论坛中1024也代表了给对方最高级的赞扬。所以10月24号设为中国程序员节


平常我是这样


cxyaiq.jpg


追美女是这样


今天是程序员节,在此祝男程序猿女程序媛们节日快乐,争取早日"脱光"!哎呀,回想你兄弟告别单身的历程,可真是太跌荡起伏了,哥们我用了一招最省钱最有效的招数就俘获了美女的芳心,来,听哥们细说!
哥们我是正宗的80后,程序员,相貌一般,不是帅的那类,反正程序员也没一个帅的,哥们也免不了俗。老家在北方,在南方上的大学,大学毕业后,没听从爹娘的话回老家,一个人留在了南方小城!一个人在公司附近,找了间房,过起了租房客。每天上班下班加班,对了,奉劝男同胞,千万别做程序员,TMD太辛苦,根本没有自己的时间,更别提恋爱了!想想那时的自己,光棍节不是加班,就是回家睡觉,更害怕收到朋友发来的光棍节祝福短信,时常很憎恨那帮哥们,MD知道老子没女友还搞连环轰炸,暗暗发誓,等哪天老子有女友了,我整死你们!
去年初,隔壁搬来一女孩,长发,大眼睛,笑起来还有两酒窝,虽然只在楼道间擦肩而过,但哥们我知道她绝对是我的菜,回想当初见到她的第一脸,直到现在哥们的脸还是热乎乎的呢,林俊杰那歌怎么唱来着"小酒窝,长睫毛,迷人的无可救药",哦,她就是俺的天使!可是俺要怎么和天使接近呢?或许如此美丽的天使早有人陪伴了吧!哎,继续让程序陪着俺吧……
于是我,一如往常地工作,上班下班;她也一样。偶尔在楼梯口遇见,一起聊天,一起上楼。从她口中知道,原来她也在这座城市上学,毕业后去了一家网站做编辑,最主要是没有男友。这消息,太令哥我兴奋了!我已经熄灭的小火苗,又点燃了!但工作真的太忙了,在这里再咒一下"程序员"这份苦力工作,它真的让我失去了很多机会,哎……
不过事情却有了转机,她的电脑竟然中病毒了,她主动来找我了。我毫不客气地施展了自己的电脑才华,并且顺利地解决了问题,当我顺利打开IE主页时,她竟然尖叫了!一惊心想,“想夸我也不用这么吧”。谁知她却说:“太好了太好了,我还有很多短信没写呢,终于可以打开短趣网了”,"什么,短趣网?写短信"!原来,她还是一短信写手,除了本身的工作外,还在短趣网上兼职写短信!美女,才女,才貌双全,此等天使,哥们我得加把劲啊……
为了多了解美女一点,我也决定进入短趣网,好好研究一番。可惜,俺只会写程序,不会摆弄文字。不过,哥们我想到了一妙招!每天下载短信,发给她,一来可以增进感情,二来也创造了聊天机会嘛,三来还免费,哥们我太聪明了,于是说干就干!从那时开始,每天清晨的早安晚信,每天深夜的晚安晚信,每个节日的祝福短信,她不开心时的搞笑短信,她生日时的生日短信,想见面的约会短信,甜言蜜语的情话短信,哥们我一条也没落下。半年后,我们终于成了男女朋友,哥们也摆脱了“光棍”,顺利地将美女拥入怀中,当然其中也有争吵,也通过道歉短信与哥们我的诚意,给一一化解了!最近短趣网站上还有秒杀活动,准备也参与一下,秒个大奖给她,哈哈!短趣网和电脑的病毒成了我们的媒婆,直到现在,我也会常常发情话短信给她,一直坚持着……
后来,她有偷偷地告诉我,其实她知道,所有的短信都是来自于短趣网的,但是她也没想到,哥们我会如此的执着!光棍们看到了吗?其实女人都是容易受感动的,只要我们男同胞持之以恒,一定可以成功,适当地使用一些短信,何况去短趣网下载一下又不用钱,能让女友、老婆开心,又不用花钱,何乐而不为呢?
今天程序员节,我有几个哥们分了,这下好了,轮到我整他们了!马上去短趣网上搜一批,一条条发,一个个整,整死他们,真是"君子报仇,十年不晚",哇哈哈……


现在我是这样的


cxyxf.jpg


1024节快乐,程序员不再寂寞





开源技术社区收集整理于网络    动动手点点求关注:
opsk.jpg
收起阅读 »

centos6.4升级内核版本详解

1.查看当前内核版本和内核参数配置 1.查看当前内核版本和内核参数配置 [root@proxy ~]# uname -r 2.6.32-358.el6.x86_64 [root@proxy ~]# cat /etc/grub.conf # grub.c...
继续阅读 »


1.查看当前内核版本和内核参数配置


1.查看当前内核版本和内核参数配置
[root@proxy ~]# uname -r
2.6.32-358.el6.x86_64

[root@proxy ~]# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-358.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=b3c05d05-38bb-4cdd-864e-9c59cdcab2a0 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.el6.x86_64.img


2.下载解压linux-3.4.56.tar.xz内核版本包


[root@proxy src]# wget -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.56.tar.xz
[root@proxy src]# tar xf linux-3.4.56.tar.xz
[root@proxy src]# cd linux-3.4.56


3.配置安装内核


[root@proxy linux-3.4.56]# make mrproper                #清除环境变量,即清除配置文件
[root@proxy linux-3.4.56]# make menuconfig              #在菜单模式下选择需要编译的内核模块
找到以下选中选项并选中networking support → networking options → network packet filtering framework(netfilter)

(1).core netfilter configuration

勾中”Netfilter connection tracking support” -m state相关模块是依赖它的,不选则没有。
将netbios name service protocal support(new) 编译成模块,不然后面升级iptables后启动时会出错
勾中“Netfilter Xtables support (required for ip_tables)”
(2).IP: Netfilter Configuration

将 “IPv4 connection tracking support (require for NAT)” 编译成模块。
勾中IP tables support (required for filtering/masq/NAT) 。
将 “Full NAT” 下的 “MASQUERADE target support” 和 “REDIRECT target support” 编译成模块
(3).其它模块可以根据自己的需要进行选择,若不懂可以参考内核配置手册.

[root@proxy linux-3.4.56]# make clean                   #确保所有东西均保持最新状态.
[root@proxy linux-3.4.56]# make bzImage                 #生成内核文件
[root@proxy linux-3.4.56]# make modules                 #编译模块
[root@proxy linux-3.4.56]# make modules_install         #安装模块
[root@proxy linux-3.4.56]# make install                 #安装
make modules 和 make modules_install 这两步安装时间较长,请耐心等待!



4.查看/etc/grub.conf内核配置文件变化


[root@proxy ~]# cat /etc/grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.4.56)
root (hd0,0)
kernel /vmlinuz-3.4.56 ro root=UUID=b3c05d05-38bb-4cdd-864e-9c59cdcab2a0 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-3.4.56.img
title CentOS (2.6.32-358.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=b3c05d05-38bb-4cdd-864e-9c59cdcab2a0 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.el6.x86_64.img
从上面可以发现,新编译的内核已经ok!


5.修改系统启动内核选择


将/etc/grub.conf文件中default=1修改为default=0
[root@proxy ~]# sed -i 's/default=1/default=0/g' /etc/grub.conf


6.重启系统,让新内核加载生效


[root@proxy ~]# reboot


7.重新登陆系统验证内核版本


[root@proxy ~]# uname -r
3.4.56
收起阅读 »

redis错误error: jemalloc/jemalloc.h分析解决

安装redis-2.6.6过程中遇到一些错误,这里总结分享出来! make错误描述 [root@cachedb redis-2.6.6]# make cd src && make all make[1]: Entering directory `/usr/...
继续阅读 »
安装redis-2.6.6过程中遇到一些错误,这里总结分享出来!


make错误描述


[root@cachedb redis-2.6.6]# make
cd src && make all
make[1]: Entering directory `/usr/local/src/redis-2.6.6/src'
CC adlist.o
在包含自 adlist.c:34 的文件中:
zmalloc.h:50:31: 错误:jemalloc/jemalloc.h:没有那个文件或目录
zmalloc.h:55:2: 错误:#error "Newer version of jemalloc required"
make[1]: *** [adlist.o] 错误 1
make[1]: Leaving directory `/usr/local/src/redis-2.6.6/src'
make: *** [all] 错误 2


分析


在README 文件中我们会发现有如下一段话:
Allocator
---------

Selecting a non-default memory allocator when building Redis is done by setting
the `MALLOC` environment variable. Redis is compiled and linked against libc
malloc by default, with the exception of jemalloc being the default on Linux
systems. This default was picked because jemalloc has proven to have fewer
fragmentation problems than libc malloc.

To force compiling against libc malloc, use:

% make MALLOC=libc

To compile against jemalloc on Mac OS X systems, use:

% make MALLOC=jemalloc
上面是说关于分配器allocator, 如果有MALLOC  这个环境变量,会有用这个环境变量的 去建立Redis。
而且libc 并不是默认的分配器,默认的是 jemalloc, 因为jemalloc 被证明有更少的 fragmentation problems 比libc。但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以我们需要加一个参数。


解决方法


make MALLOC=libc
我是打杂的!遇到的错误总结,分享笔记! 收起阅读 »

redis源码安装脚本

#!/bin/bash pdir=/usr/local/src install_redis () { mkdir -pv /data/logs/redis/ && mkdir -pv /data/redis_6379 cd $pdir wget htt...
继续阅读 »
#!/bin/bash
pdir=/usr/local/src

install_redis () {
mkdir -pv /data/logs/redis/ && mkdir -pv /data/redis_6379
cd $pdir
wget http://redis.googlecode.com/files/redis-2.4.4.tar.gz
tar zxf redis-2.4.4.tar.gz
cd redis-2.4.4
make
make PREFIX=/usr/local/redis install
cd $pdir
rsync -av redis.conf /usr/local/redis/
rsync -av redis /etc/init.d/
chmod 755 /etc/init.d/redis
/etc/init.d/redis start
}
install_redis
配置文件如下:
daemonize yes
pidfile /var/run/redis_6379.pid
port 6379
timeout 0
loglevel notice
logfile /data/logs/redis/redis_6379.log
databases 16
dir /data/redis_6379
slave-serve-stale-data yes
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
slowlog-log-slower-than 10000
slowlog-max-len 1024
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
启动脚本如下:
#/bin/sh
[size=16]Configurations injected by install_server below.... [/size]
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/usr/local/redis/redis.conf"
REDISPORT="6379"

case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac

我是打杂的,分享给需要的人吧!
 
#!/bin/sh
#
# redis init file for starting up the redis daemon
#
# chkconfig: - 20 80
# description: Starts and stops the redis daemon.
#
### BEGIN INIT INFO
# Provides: redis-server
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: start and stop Redis server
# Description: A persistent key-value database
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

name="redis-server"
exec="/usr/bin/$name"
shut="/usr/libexec/redis-shutdown"
pidfile="/var/run/redis/redis.pid"
REDIS_CONFIG="/etc/redis.conf"

[ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis

lockfile=/var/lock/subsys/redis

start() {
[ -f $REDIS_CONFIG ] || exit 6
[ -x $exec ] || exit 5
echo -n $"Starting $name: "
daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG --daemonize yes --pidfile $pidfile"
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
echo -n $"Stopping $name: "
[ -x $shut ] && $shut
retval=$?
if [ -f $pidfile ]
then
# shutdown haven't work, try old way
killproc -p $pidfile $name
retval=$?
else
success "$name shutdown"
fi
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
stop
start
}

rh_status() {
status -p $pidfile $name
}

rh_status_q() {
rh_status >/dev/null 2>&1
}


case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}"
exit 2
esac
exit $?
收起阅读 »