ssdbrocks手册.docx
《ssdbrocks手册.docx》由会员分享,可在线阅读,更多相关《ssdbrocks手册.docx(25页珍藏版)》请在冰豆网上搜索。
ssdbrocks手册
ssdb-rocks说明手册
1、简介
Leveldb是一个google实现的非常高效的kv数据库,基于文件存储系统,所以它支撑量大的数据而不因为内存的限制受取约束。
LevelDB只是一个C/C++的编程语言库,所以,PHP,Python等编程语言无法直接使用LevelDB,必须 将LevelDB封装成一个网络服务器。
而SSDB就是一个LevelDB的服务器(LevelDBServer),以LevelDB作为存储引擎,支持PHP/Java/Python/C/C++等客户端。
RocksDB实际上是在LevelDB之上做的改进,各方面都比levelDb强,它是Facebook开源的存储引擎。
而rocksdb本身只是一个数据库存储引擎,没有client-server支持。
因此ssdb-rocks诞生了。
ssdb-rocks为rocksdb封装了网络支持,支持C++,PHP,Java,Go,Python等客户端API。
2、安装说明
2、1RocksDB需要的依赖
yuminstallzlibzlib-develbzip2bzip2-develgflagsgflags-develsnappysnappy-devel
2、2RocksDB需要的gcc47-c++
下载rpm包地址:
http:
//people.centos.org/tru/devtools-1.1/6/x86_64/RPMS/
scl-utils-20120927-2.el6_4.6.centos.x86_64.rpm
devtoolset-1.1-runtime-1-13.el6.noarch.rpm
devtoolset-1.1-gcc-4.7.2-5.el6.x86_64.rpm
devtoolset-1.1-libstdc++-devel-4.7.2-5.el6.x86_64.rpm
devtoolset-1.1-gcc-c++-4.7.2-5.el6.x86_64.rpm
安装
rpm-ivhscl-utils-20120927-2.el6_4.6.centos.x86_64.rpmdevtoolset-1.1-runtime-1-13.el6.noarch.rpmdevtoolset-1.1-gcc-4.7.2-5.el6.x86_64.rpmdevtoolset-1.1-libstdc++-devel-4.7.2-5.el6.x86_64.rpmdevtoolset-1.1-gcc-c++-4.7.2-5.el6.x86_64.rpm
vim~/.bashrc
加入
exportCC=/opt/centos/devtoolset-1.1/root/usr/bin/gcc
exportCPP=/opt/centos/devtoolset-1.1/root/usr/bin/cpp
exportCXX=/opt/centos/devtoolset-1.1/root/usr/bin/c++
执行source~/.bashrc
2、3安装
gitclone
make&&makeinstall
3、使用说明
3、1启动ssdb-rocks服务器
/usr/local/ssdb/ssdb-server-d/usr/local/ssdb/ssdb.conf
3、2停止ssdb-rocks服务器
kill`cat/usr/local/ssdb/var/ssdb.pid`
3、3启动ssdb-rocks客户端
/usr/local/ssdb/ssdb-cli-h127.0.0.1-p8888
4、配置文件详解
SSDB的配置文件使用一个TAB来表示一级缩进,不要使用空格来缩进,无论你用2个,3个,4个,或者无数个空格都不行!
一定要记得修改你的Linux内核参数,关于maxopenfiles(最大文件描述符数)的内容,否则,你会在log.txt看到Toomanyopenfiles类似的错误,或者在客户端看到Connectionresetbypeer错误。
4.1监听网络端口
server:
ip:
0.0.0.0
port:
8888
默认的配置文件监听127.0.0.1本地回路网络,所以无法从其它机器上连接此SSDB服务器.如果你希望从其它机器上连接SSDB服务器,必须把127.0.0.1改为0.0.0.0.同时,利用配置文件的deny,allow指令限制可信的来源IP访问.
如果不做网络限制便监听0.0.0.0IP可能导致被任意机器访问到你的数据,这很可能是一个安全问题!
你可以结合操作系统的iptables来限制网络访问.
4.2日志配置
日志解读
一般,建议你将logger.level设置为debug级别.
请求处理
2014-06-1811:
01:
40.335[DEBUG]serv.cpp(395):
w:
0.393,p:
5.356,req:
seta1,resp:
ok1
w:
0.393请求的排队时间,毫秒
p:
5.356请求的处理时间,毫秒
req:
...请求内容
resp:
...响应内容
找出慢请求
找出慢请求的命令是:
tail-flog.txt|grepresp|grep'[wp]:
[1-9][0-9]\{0,\}\.'
#或者
catlog.txt|grepresp|grep'[wp]:
[1-9][0-9]\{0,\}\.'
这些命令用于找出排队时间,或者处理时间大于等于1毫秒的请求.
找出大于10毫秒的请求:
catlog.txt|grepresp|grep'[wp]:
[1-9][0-9]\{1,\}\.'
找出大于100毫秒的请求:
catlog.txt|grepresp|grep'[wp]:
[1-9][0-9]\{2,\}\.'
SSDB在工作中
ssdb-server会每隔5分钟输出这样的一条log
2014-06-1811:
18:
03.600[INFO]ssdb-server.cpp(215):
ssdbworking,links:
0
2014-06-1811:
23:
03.631[INFO]ssdb-server.cpp(215):
ssdbworking,links:
0
links:
0当前的连接数
日志级别
支持的日志级别有:
debug,warn,error,fatal.
一般,建议你将logger.level设置为debug级别.
输出日志到终端屏幕
编辑ssdb.conf,将
logger:
output:
log.txt
修改为
logger:
output:
stdout
4.3内存占用
一个ssdb-server实例占用的内存最高达到(MB):
cache_size+write_buffer_size*66+32
你可以调整配置参数,限制ssdb-server的内存占用.
4.4同步和复制
同步和复制的配置与监控
配置主-从
#server1
replication:
slaveof:
#server2
replication:
slaveof:
id:
svc_1
#sync|mirror,defaultissync
type:
sync
ip:
127.0.0.1
port:
8888
主-主
#server1
replication:
slaveof:
id:
svc_2
#sync|mirror,defaultissync
type:
mirror
ip:
127.0.0.1
port:
8889
#server2
replication:
slaveof:
id:
svc_1
#sync|mirror,defaultissync
type:
mirror
ip:
127.0.0.1
port:
8888
多主
在一组一共包含n个实例的SSDB实例群中,每一个实例必须slaveof其余的n-1个实例.
replication:
slaveof:
id:
svc_1
#sync|mirror,defaultissync
type:
mirror
ip:
127.0.0.1
port:
8888
slaveof:
id:
svc_2
#sync|mirror,defaultissync
type:
mirror
ip:
127.0.0.1
port:
8889
#...moreslaveof
监控同步状态
info命令返回的信息
ssdb127.0.0.1:
8899>info
binlogs
capacity:
10000000
min_seq:
1
max_seq:
74
replication
client127.0.0.1:
55479
type:
sync
status:
SYNC
last_seq:
73
replication
slaveof127.0.0.1:
8888
id:
svc_2
type:
sync
status:
SYNC
last_seq:
73
copy_count:
0
sync_count:
44
binlogs
当前实例的写操作状态.
capacity:
binlog队列的最大长度
min_seq:
当前队列中的最小binlog序号
max_seq:
当前队列中的最大binlog序号
replication
可以有多条replication记录.每一条表示一个连接进来的slave(client),或者一个当前服务器所连接的master(slaveof).
slaveof|clientip:
port,远端master/slave的ip:
port.
type:
类型,sync|mirror.
status:
当前同步状态,DISCONNECTED|INIT|OUT_OF_SYNC|COPY|SYNC.
last_seq:
上一条发送或者收到的binlog的序号.
slaveof.id:
master的id(这是从slave's角度来看的,你永远不需要在master上配置它自己的id).
slaveof.copy_count:
在全量同步时,已经复制的key的数量.
slaveof.sync_count:
发送或者收到的binlog的数量.
关于status:
DISCONNECTED:
与master断开了连接,一般是网络中断.
INIT:
初始化状态.
OUT_OF_SYNC:
由于短时间内在master有大量写操作,导致binlog队列淘汰,slave丢失同步点,只好重新复制全部的数据.
COPY:
正在复制基准数据的过程中,新的写操作可能无法及时地同步.
SYNC:
同步状态是健康的.
判断同步状态
binlogs.max_seq是指当前实例上的最新一次的写(写/更新/删除)操作的序号,replication.client.last_seq是指已发送给slave的最新一条binlog的序号.
所以,如果你想判断主从同步是否已经同步到位(实时更新),那么就判断binlogs.max_seq和replication.client.last_seq是否相等.
4.5启动从服务与连接
/usr/local/ssdb/ssdb-server-d/usr/local/ssdb/ssdb_slave.conf
/usr/local/ssdb/ssdb-cli-h127.0.0.1-p8889
5、集群配置
Twemproxy是一个Redis/Memcached代理中间件,可以实现诸如分片逻辑、HashTag、减少连接数等功能。
尤其在有大量应用服务器的场景下Twemproxy的角色就凸显了,能有效减少连接数。
5、1安装twemproxy
gitclone
cdtwemproxy
autoreconf-fvi
./configure--enable-debug=log
make
makeinstall
src/nutcracker-h
mkdir-p/usr/local/nutcracker/bin
mkdir-p/usr/local/nutcracker/conf
cpsrc/nutcracker/usr/local/nutcracker/bin
cpconf/*/usr/local/nutcracker/conf
5、2配置文件详解
gamma:
listen:
192.168.10.59:
22123
hash:
crc32a
distribution:
ketama
timeout:
400
backlog:
1024
preconnect:
true
redis:
true
auto_eject_hosts:
true
server_retry_timeout:
2000
server_failure_limit:
3
servers:
-192.168.10.58:
8888:
1
-192.168.10.59:
8888:
1
详细的配置信息如下:
●listen
twemproxy监听的端口。
可以以ip:
port或name:
port的形式来书写。
●hash
可以选择的key值的hash算法:
>one_at_a_time
>md5
>crc16
>crc32(crc32implementationcompatiblewithlibmemcached)
>crc32a(correctcrc32implementationasperthespec)
>fnv1_64
>fnv1a_64
>fnv1_32
>fnv1a_32
>hsieh
>murmur
>jenkins
如果没选择,默认是fnv1a_64。
●hash_tag
hash_tag允许根据key的一个部分来计算key的hash值。
hash_tag由两个字符组成,一个是hash_tag的开始,另外一个是hash_tag的结束,在hash_tag的开始和结束之间,是将用于计算key的hash值的部分,计算的结果会用于选择服务器。
例如:
如果hash_tag被定义为”{}”,那么key值为"user:
{user1}:
ids"和"user:
{user1}:
tweets"的hash值都是基于”user1”,最终会被映射到相同的服务器。
而"user:
user1:
ids"将会使用整个key来计算hash,可能会被映射到不同的服务器。
●distribution
存在ketama、modula和random3种可选的配置。
其含义如下:
ketama
ketama一致性hash算法,会根据服务器构造出一个hashring,并为ring上的节点分配hash范围。
ketama的优势在于单个节点添加、删除之后,会最大程度上保持整个群集中缓存的key值可以被重用。
modula
modula非常简单,就是根据key值的hash值取模,根据取模的结果选择对应的服务器。
random
random是无论key值的hash是什么,都随机的选择一个服务器作为key值操作的目标。
●timeout
单位是毫秒,是连接到server的超时值。
默认是永久等待。
●backlog
监听TCP的backlog(连接等待队列)的长度,默认是512。
●preconnect
是一个boolean值,指示twemproxy是否应该预连接pool中的server。
默认是false。
●redis
是一个boolean值,用来识别到服务器的通讯协议是redis还是memcached。
默认是false。
●server_connections
每个server可以被打开的连接数。
默认,每个服务器开一个连接。
●auto_eject_hosts
是一个boolean值,用于控制twemproxy是否应该根据server的连接状态重建群集。
这个连接状态是由server_failure_limit阀值来控制。
默认是false。
●server_retry_timeout
单位是毫秒,控制服务器连接的时间间隔,在auto_eject_host被设置为true的时候产生作用。
默认是30000毫秒。
●server_failure_limit
控制连接服务器的次数,在auto_eject_host被设置为true的时候产生作用。
默认是2。
●servers
一个pool中的服务器的地址、端口和权重的列表,包括一个可选的服务器的名字,如果提供服务器的名字,将会使用它决定server的次序,从而提供对应的一致性hash的hashring。
否则,将使用server被定义的次序。
5、3启动nutcracker
测试配置文件
/usr/local/nutcracker/bin/nutcracker-t-c/usr/local/nutcracker/conf/nutcracker.yml
后台启动
/usr/local/nutcracker/bin/nutcracker-d-c/usr/local/nutcracker/conf/nutcracker.yml
6、高可用配置
Keepalived是一种高性能的服务器高可用或热备解决方案,Keepalived可以用来防止服务器单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。
6、1安装keepalived
安装openssl
yum-yinstallopenssl*
安装popt
yum-yinstallpopt*
安装ipvsadm
yum-yinstallipvsadm
安装libnl-dev
yum-yinstalllibnl-dev*
wgethttp:
//www.keepalived.org/software/keepalived-1.2.16.tar.gz
tar-zxvfkeepalived-1.2.16.tar.gz
cdkeepalived-1.2.16
./configure--prefix=/usr/local/keepalived
make
makeinstall
6、2开机启动设置
cp/usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/rc.d/init.d/
cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/
mkdir/etc/keepalived
cp/usr/local/keepalived/etc/keepalived/keepalived.conf/etc/keepalived/
cp/usr/local/keepalived/sbin/keepalived/usr/sbin/
chkconfigkeepalivedon
servicekeepalivedstart|stop
/usr/local/keepalived/sbin/keepalived-f/etc/keepalived/keepalived.conf
6、3配置文件详解
global_defs{
notification_email{#指定keepalived在发生切换时需要发送email到的对象,一行一个
sysadmin@fire.loc
}
notification_email_fromAlexandre.Cassen@firewall.loc#指定发件人
smtp_serverlocalhost#指定smtp服务器地址
smtp_connect_timeout30#指定smtp连接超时时间
router_idLVS_DEVEL#运行keepalived机器的一个标识
}
vrrp_sync_groupVG_1{#监控多个网段的实例
group{
inside_network#实例名
outside_network
}
notify_master/path/xx.sh#指定当切换到master时,执行的脚本
netify_backup/path/xx.sh#指定当切换到backup时,执行的脚本
notify_fault"path/xx.shVG_1"#故障时执行的脚本
notify/path/xx.sh
smtp_alert#使用global_defs中提供的邮件地址和smtp服务器发送邮件通知
}
vrrp_instanceinside_network{
stateBACKUP#指定那个为master,那个为backup,如果设置了nopreempt这个值不起作用,主备考priority决
定
interfaceeth0#设置实例绑定的网卡
dont_track_primary#忽略vrrp的interface错误(默认不设置)
track_interface{#设置额外的监控,里面那个网卡出现问题都会切换
eth0
eth1
}
mcast_src_ip#发送多播包的地址,如果不设置默认使用绑定网卡的primaryip
garp_master_delay#在切换到master状态后,延迟进行gratuitousARP请求
virtual_router_id50#VPID标记
priority99#优先级,高优先级竞选为master
advert_int1#检查间隔,默认1秒
nopreempt#设置为不抢占注:
这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高
preempt_delay#抢占延时,默认5分钟
debug#debug级别
authentication{#设置认证
auth_typePASS#认证方式
auth_pass111111#认证密码
}