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

运维 push 发表了文章 0 个评论 5679 次浏览 2015-10-23 14:19 来自相关话题

安装redis-2.6.6过程中遇到一些错误,这里总结分享出来! make错误描述 [root@cachedb redis-2.6.6]# make cd src && make all ...查看全部
安装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源码安装脚本

运维 push 发表了文章 0 个评论 2703 次浏览 2015-10-23 14:02 来自相关话题

#!/bin/bash pdir=/usr/local/src install_redis () { mkdir -pv /data/logs/redis/ && mkdir -pv /data/redis_ ...查看全部
#!/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 $?

ubuntu下snmp错误Sub-id not found: (top) sysDescr解决

运维 Geek小A 发表了文章 0 个评论 7713 次浏览 2015-10-23 00:51 来自相关话题

一般情况下我们安装snmp如下安装# sudo apt-get -y install snmp snmpd然后设置snmp配置用户名密码,我这里使用v3版本# sudo net-snmp-config --create-snmpv3-user -ro -A s ...查看全部
一般情况下我们安装snmp如下安装
# sudo apt-get -y install snmp snmpd
然后设置snmp配置用户名密码,我这里使用v3版本
# sudo net-snmp-config --create-snmpv3-user -ro -A snmp@mima -a MD5 spuser

测试
# sudo snmpwalk -v 3 -u spuser -a MD5 -A "snmp@mima" -l authNoPriv 127.0.0.1 sysDescr
然后出现如下错误:
sysDescr: Unknown Object Identifier (Sub-id not found: (top) -> sysDescr)
这个是因为你缺少snmp所需的mib库,如下安装使用安装最新的mibs库
# sudo sudo apt-get install snmp-mibs-downloader
然后再测试,你还有可能会出错,那是因为snmp配置的mibs不是想要的,你只需要如下操作
# sudo > /etc/snmp/snmp.conf
把snmp文件清空,活着注释mibs那行也行!
最后你应该测试ok的,结果如下:
# sudo snmpwalk -v 3 -u spuser -a MD5 -A "snmp@mima" -l authNoPriv 127.0.0.1 sysDescr
SNMPv2-MIB::sysDescr.0 = STRING: Linux zabbixagent 2.6.32-431.11.5.el6.ucloud.x86_64 #1 SMP Thu Jul 3 09:42:34 CST 2014 x86_64
问题解决了,希望可以帮到同样遇到这样问题的人!

sed匹配行前行后加入一行数据

运维 Ansible 发表了文章 0 个评论 3355 次浏览 2015-10-22 11:39 来自相关话题

a 追加内容 sed '/匹配内容/a\要加入的内容' test.file(将内容追加到匹配内容目标行的下一行位置) i 插入内容 sed '/匹配内容/i\要加入的内容' test.file (将内容插入到匹配内容目标行的上一行位置) ...查看全部
a 追加内容 sed '/匹配内容/a\要加入的内容' test.file(将内容追加到匹配内容目标行的下一行位置)
i 插入内容 sed '/匹配内容/i\要加入的内容' test.file (将内容插入到匹配内容目标行的上一行位置)
 


Example:


#我需要把文件中包含'10.0.1.110'这个关键词的行前或行后加入内容为"10.0.1.119  sendhost"一行记录
test.file 文件内容如下:
[root@mhost contorl]# cat test.file
10.0.1.114 masterweb
10.0.1.112 coredb1
10.0.1.110 wwwweb
10.0.1.113 coredb2
10.0.1.111 cache1
10.0.1.110 cache2
10.0.1.115 cache3


加在行后


[root@mhost contorl]# sed '/10.0.1.110/a\10.0.1.119 sendhost' test.file 
10.0.1.114 masterweb
10.0.1.112 coredb1
10.0.1.110 wwwweb
10.0.1.119 sendhost 已经加上
10.0.1.113 coredb2
10.0.1.111 cache1
10.0.1.110 cache2
10.0.1.119 sendhost 已经加上
10.0.1.115 cache3

#如果要精确匹配就是要把内容加到10.0.1.110 cache2下面一行的话,匹配内容就要精确
[root@mhost contorl]# sed '/10.0.1.110 cache2/a\10.0.1.119 sendhost' test.file
10.0.1.114 masterweb
10.0.1.112 coredb1
10.0.1.110 wwwweb
10.0.1.113 coredb2
10.0.1.111 cache1
10.0.1.110 cache2
10.0.1.119 sendhost 已经加上
10.0.1.115 cache3


加在行前


[root@mhost contorl]# sed '/10.0.1.110/i\10.0.1.119 sendhost' test.file 
10.0.1.114 masterweb
10.0.1.112 coredb1
10.0.1.119 sendhost 已经加上
10.0.1.110 wwwweb
10.0.1.113 coredb2
10.0.1.111 cache1
10.0.1.119 sendhost 已经加上
10.0.1.110 cache2
10.0.1.115 cache3

#如果要精确匹配就是要把内容加到10.0.1.110 cache2上面一行的话,匹配内容就要精确
[root@mhost contorl]# sed '/10.0.1.110 cache2/i\10.0.1.119 sendhost' test.file
10.0.1.114 masterweb
10.0.1.112 coredb1
10.0.1.110 wwwweb
10.0.1.113 coredb2
10.0.1.111 cache1
10.0.1.119 sendhost 已经加上
10.0.1.110 cache2
10.0.1.115 cache3
**确认修改没有问题sed -i 加-i 尝试然后放心修改!

What to do IaaS PaaS SaaS

科技前沿 Ansible 发表了文章 0 个评论 2569 次浏览 2015-10-21 02:02 来自相关话题

"云服务" 现在已经快成了一个家喻户晓的词了。如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道。   "云" 其实是互联网的一个隐喻,"云计算" 其实就是使用互联网来接入存储或者运行在远程服务器端的应 ...查看全部
"云服务" 现在已经快成了一个家喻户晓的词了。如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道。
 
"云" 其实是互联网的一个隐喻,"云计算" 其实就是使用互联网来接入存储或者运行在远程服务器端的应用,数据,或者服务。
 
任何一个使用基于互联网的方法来计算,存储和开发的公司,都可以从技术上叫做从事云的公司。然而,不是所有的云公司都一样。不是所有人都是CTO,所以有时候看到云技术背后的一些词可能会比较头疼。


云也是分层的


任何一个在互联网上提供其服务的公司都可以叫做云计算公司。其实云计算分几层的,分别是Infrastructure(基础设施)-as-a-Service,Platform(平台)-as-a-Service,Software(软件)-as-a-Service。基础设施在最下端,平台在中间,软件在顶端。别的一些“软”的层可以在这些层上面添加。
iaas-paas-saas.jpg


IaaS: Infrastructure-as-a-Service(基础设施即服务)


第一层叫做IaaS,有时候也叫做Hardware-as-a-Service,几年前如果你想在办公室或者公司的网站上运行一些企业应用,你需要去买服务器,或者别的高昂的硬件来控制本地应用,让你的业务运行起来。
但是现在有IaaS,你可以将硬件外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。
一些大的IaaS公司包括Amazon, Microsoft, VMWare, Rackspace和Red Hat.不过这些公司又都有自己的专长,比如Amazon和微软给你提供的不只是IaaS,他们还会将其计算能力出租给你来host你的网站。


PaaS: Platform-as-a-Service(平台即服务)


第二层就是所谓的PaaS,某些时候也叫做中间件。你公司所有的开发都可以在这一层进行,节省了时间和资源。
PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等。
一些大的PaaS提供者有Google App Engine,Microsoft Azure,Force.com,Heroku,Engine Yard.最近兴起的公司有AppFog,Mendix 和 Standing Cloud.


SaaS: Software-as-a-Service(软件即服务)


第三层也就是所谓SaaS。这一层是和你的生活每天接触的一层,大多是通过网页浏览器来接入。任何一个远程服务器上的应用都可以通过网络来运行,就是SaaS了。
你消费的服务完全是从网页如Netflix, MOG, Google Apps, Box.net, Dropbox或者苹果的iCloud那里进入这些分类。尽管这些网页服务是用作商务和娱乐或者两者都有,但这也算是云技术的一部分。
一些用作商务的SaaS应用包括Citrix的GoToMeeting,Cisco的WebEx,Salesforce的CRM,ADP,Workday和SuccessFactors。
国内做SAAS的服务商有云智慧、听云等!
分享原文地址

kvm错误整理

大数据 koyo 发表了文章 0 个评论 14466 次浏览 2015-10-21 01:26 来自相关话题

一、启动虚拟机​Connection reset by peer # virsh start vmhost1 error: Failed to start domain vmhost1 error: Unabl ...查看全部


一、启动虚拟机​Connection reset by peer


# virsh start vmhost1
error: Failed to start domain vmhost1
error: Unable to read from monitor: Connection reset by peer
在虚拟机运行过程中关闭宿主服务器就有可能导致这种情况出现,由于宿主服务器中的kvm虚拟机控制器与安装在kvm中的虚拟机会话被异常重置,所以我们可以如下解决:
# virsh managedsave-remove vmhost1
# virsh start vmhost1
如果启动查看/var/log/libvirt/qemu/vmhost1.log下log还报如下错误:
Cannot set up guest memory 'pc.ram': Cannot allocate memory
这个问题可能是分配给vmhost1分配的内存过大(甚至超过的物理主机的内存大小),或者可能是宿主机没有足够的内存分配给此虚拟机,导致无法启动!


二、重Define虚拟机时无/usr/bin/kvm


error: Failed to define domain from hostname.xml
error: Cannot find QEMU binary /usr/bin/kvm: No such file or directory
解决方法:
# ln -s /usr/libexec/qemu-kvm /usr/bin/kvm


三、error: internal error process exited while connecting to monitor


# virsh start vmhost1  
error: Failed to start domain vmhost1
error: internal error process exited while connecting to monitor: kvm: -drive file=/dev/sp1368155439693/v1368544020461,if=none,id=drive-virtio-disk0,format=qcow2: could not open disk image /dev/sp1368155439693/v1368544020461: Invalid argument
分析:镜像格式错误,用qemu-img info 检查镜像和xml配置文件中指定的type是否一致!


四、Unable to load library 'virt': libvirt.so


Unable to load library 'virt': libvirt.so: cannot open shared object file: No such file or directory

Linux下解决:
ln -s /usr/lib/libvirt.so.0 /usr/lib/libvirt.so

windows下解决:
将libvirt-0.dll改名为virt.dll


五、error: Refusing to undefine while domain managed save image exists


# virsh undefine vmhost1
error: Refusing to undefine while domain managed save image exists
http://www.redhat.com/archives/libvir-list/2011-July/msg01219.html
解决方法:virsh undefine $domain  --managed-save


六、启动libvirtd进程出错


# /usr/local/sbin/libvirtd -d -l --config /usr/local/etc/libvirt/libvirtd.conf (编译安装的启动方式)
error:/usr/local/sbin/libvirtd: initialization failed
try to install libpcap-devel RPM and rebuild libvirt http://comments.gmane.org/gmane.comp.emulators.libvirt/58218

apt-get install libpcap-dev
上面的方法好像都没有效果,但是尝试了http://wiki.libvirt.org/page/The_daemon_cannot_be_started说的,把配置文件里的
listen_tls = 0注释取消(更奇怪的问题,在我的客户端链接不对)


七、启动虚拟机报错


# virsh start vmhost1
error: Failed to start domain vmhost1
error: internal error process exited while connecting to monitor: Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
No accelerator found!
上面的提示信息就是因为QEMU在初始化阶段因为无法找到kvm内核模块。
# modprobe kvm   #载入指定的模块
重启电脑,进入bios界面,设置advance选项里面的virtualization标签为Enabled
通过命令 lsmod | grep kvm    #显示已载入的模块


八、虚拟机迁移


# virsh migrate --live 1 qemu+tcp://192.168.0.121 --p2p --tunnelled --unsafe 
error: operation failed: Failed to connect to remote libvirt URI qemu+tcp://192.168.0.121(在URI后面加上/system,‘system’相当于root用户的访问权限)

#virsh migrate --live 2 qemu+tcp://192.168.0.121/system --p2p --tunnelled
error: Unsafe migration: Migration may lead to data corruption if disks use cache != none(加上--unsafe参数)

#virsh migrate --live 2 qemu+tcp://192.168.0.121/system --p2p --tunnelled --unsafe
error: Timed out during operation: cannot acquire state change lock (启动虚拟机有时也会遇此错误),需要重启libvirtd进程


九、virsh


error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Connection refused(libvirtd 进程没有启动,libvirtd是一个监听客户端请求的进程)

# virsh -c qemu:///system list
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied
error: failed to connect to the hypervisor
(当前用户没有权限,修改/etc/libvirt/libvirtd.conf,unix_sock_rw_perms = 0777,使所有用户都有权限读写)

apr_sockaddr_info_get() failed for

运维 Ansible 回复了问题 2 人关注 1 个回复 4253 次浏览 2015-10-20 17:14 来自相关话题

扩展php的redis模块安装脚本

运维 空心菜 发表了文章 0 个评论 2257 次浏览 2015-10-20 11:31 来自相关话题

#!/bin/bash #Auth http://openskill.cn redis_module () {     cd /usr/local/src/ && wget https://codeload.g ...查看全部
#!/bin/bash
#Auth http://openskill.cn

redis_module () {
    cd /usr/local/src/ && wget https://codeload.github.com/nicolasff/phpredis/zip/master    
    mv master redis-module.zip
    unzip redis-module.zip 
    cd phpredis-master/
    phpize && ./configure
    make && make install
    echo -e "[redis]\nextension=redis.so" > /etc/php.d/redis.ini
    php -m |grep -i redis
}
redis_module

zookeepr运维经验分享

大数据 空心菜 发表了文章 0 个评论 3082 次浏览 2015-10-19 23:09 来自相关话题

ZooKeeper 是分布式环境下非常重要的一个中间件,可以完成动态配置推送、分布式 Leader 选举、分布式锁等功能。在运维 ZooKeeper 服务的以来,积累如下经验: 集群数量 3台起,如果是虚拟机,必须分散在不 ...查看全部
ZooKeeper 是分布式环境下非常重要的一个中间件,可以完成动态配置推送、分布式 Leader 选举、分布式锁等功能。在运维 ZooKeeper 服务的以来,积累如下经验:


  1. 集群数量


3台起,如果是虚拟机,必须分散在不同的宿主机上,以实现容灾的目的。如果长远来看(如2-3年)需求会持续增长,可以直接部署5台。ZooKeeper集群扩容是比较麻烦的事情,因此宁可前期稍微浪费一点。


  1. 客户端配置域名而不是 IP


如果有一天你的 ZooKeeper 集群需要做机房迁移,或者其中几个节点机器挂了,需要更换。让你的用户更新 ZooKeeper 服务器配置不是件轻松的事情,因此一开始就配置好域名,到时候更新 DNS 即可。


  1. 开启 autopurge.snapRetainCount


ZooKeeper 默认不会自动清理 tx log,所以总会有一天你会收到磁盘报警(如果你有磁盘监控的话)。开启自动清理机制后,就不用担心了,我的配置如下:
autopurge.snapRetainCount=500
autopurge.purgeInterval=24


  1. 扩容


如果你可以接受停止服务半个小时,那基本随意玩了,但在比较严肃的环境下,还是不能停服务的。我的做法是这样的:
0. 有节点 A, B, C 处于服务状态
server.3=192.168.12.1:2888:3888
server.4=192.168.12.2:2888:3888
server.5=192.168.12.3:2888:3888
1. 加入节点 D,配置如下:
server.3=192.168.12.1:2888:3888
server.4=192.168.12.2:2888:3888
server.5=192.168.12.3:2888:3888
server.6=192.168.12.4:2888:3888
server.7=192.168.12.5:2888:3888
用 4 字命令检查,保证该节点同步完毕集群数据,处于 Follower 状态:
# echo srvr | nc 192.168.12.4 2181
Zookeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
Latency min/avg/max: 0/0/13432
Received: ***
Sent: ***
Connections: ***
Outstanding: 0
Zxid: 0x***
Mode: follower
Node count: ***
需要注意的是,这一步加入的节点的 id,必须大于集群中原有的节点的 id,例如 6 > 3,4,5,我也不知道为什么需要这样。
  1. 同上一步一样,加入节点 E
  2. 更新 A B C 的配置如 D 和 E,并依此重启


  1. 机房迁移


例如要把服务从 X 机房的 A B C 迁移到 Y 机房的 A’ B’ C’。
做法是首先把集群扩容成包含6个节点的集群;然后修改域名指向让用户的连接都转到 A’ B’ C’;最后更新集群配置,把 A B C 从集群摘除。


  1. 跨机房容灾


由于 ZooKeeper 天生不喜欢偶数(怕脑裂),因此有条件的就三机房部署,但机房之间的网络条件得是类似局域网的条件,否则性能就堪忧了。

双机房做自动容灾基本不可能,加入手动步骤是可以的,和 DB 一样,短时间不可用,立刻启用另外一个机房,平时保证数据同步。

三机房部署,如果一个机房离的比较远,网络延迟较高怎么办?可以 3 + 3 + 1 部署,1 就放在那个网络延迟较高的地方,确保 leader 在 3 + 3 这两个机房中间,那么平时的性能就能保证了。怎么保证 leader 不到 1 呢?目前能想到的办法就是如果发现就重启它

Hadoop可以运行单机模式吗?

大数据 空心菜 回复了问题 2 人关注 2 个回复 5297 次浏览 2015-10-18 22:18 来自相关话题