ssdb主从及双主模型配置和简单管理
levelDB是一个key->value 的数据存储库,其只能在本地保存数据,支持持久化,并且支持保存非常大的数据,单机redis在保存较大数据的时候数十G的时候会出现响应慢等问题,而单机levelDB数据在150G以内的时候依然可以保持比较好的性能,其随机写入key->value的数据每秒可达到40W条,每秒随机读在6W,写比读还要快,因此适用于写操作大于读操作的场景,并且不支持网络传输, 即只能本机访问数据,官网地址http://leveldb.org/,国内有360基于levelDB开发支持了网络接口的SSDB,SSDB是一个 C/C++ 语言开发的高性能 NoSQL 数据库, 支持 KV, list, map(hash), zset(sorted set) 等数据结构, 用来替代或者与 Redis 配合存储十亿级别列表的数据,SSDB支持100倍与redis的容量,因此宣称要替换redis,SSDB支持网络、支持redis客户端、支持python/java/go/PHP/C++语言、支持持久化、支持主从复制、主主复制和负载均衡等功能
官方文档:http://ssdb.io/zh_cn/
安装文档:http://ssdb.io/docs/zh_cn/install.html
SSD可以用于保证数据不丢失的场景而不是单单的数据缓存场景,用了SSDB尽量要每天晚上备份文件目录,即使做了主从也要对目录使用其自带的ssdb-dump工具进行备份。
环境: centos 7.X x86_64
centos6.X系统环境可能python版本和作者使用的有兼容性问题需要注意
一、ssdb服务的安装和配置
1.安装依赖
# yum install -y jemalloc-devel autoconf
2.下载安装包并编译
# cd /usr/local/src
# wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip
# unzip master.zip
[root@node2 src]# cd ssdb-master/
[root@node2 ssdb-master]# make
# 默认安装在 /usr/local/ssdb 目录下
[root@node2 ssdb-master]# make install
3.修改启动脚本
[root@node2 ssdb-master]# cp tools/ssdb.sh /etc/init.d/ssdb [root@node2 ssdb-master]# vim /etc/init.d/ssdb
configs="/usr/local/ssdb/ssdb.conf"
4.加入启动项
[root@node2 src]# chkconfig --add ssdb
[root@node2 src]# chkconfig ssdb on
[root@node2 src]# chkconfig --list ssdb
ssdb :off :off :on :on :on :on :off
5.配置命令路径
# vim /etc/profile PATH=$PATH:/usr/local/ssdb
export PATH # source /etc/profile
5.修改配置文件
# vim /usr/local/ssdb/ssdb.conf
server:
ip: 192.168.3.200
port:
6.启动服务
[root@node2 ssdb-master]# /etc/init.d/ssdb start
Reloading systemd: [ OK ]
Starting ssdb (via systemctl): [ OK ] [root@node2 ssdb-master]# ss -tnlp|grep
LISTEN 192.168.3.200: *:* users:(("ssdb-server",pid=,fd=))
连接服务测试
[root@node2 ssdb-master]# ssdb-cli -h 192.168.3.200 -p
ssdb (cli) - ssdb command line tool.
Copyright (c) - ssdb.io 'h' or 'help' for help, 'q' to quit. ssdb-server 1.9. ssdb 192.168.3.200:> set name jack
ok
(0.001 sec)
ssdb 192.168.3.200:> set age
ok
(0.001 sec)
ssdb 192.168.3.200:> get name
jack
二、配置主从同步
从服务器配置:
配置主服务器的ID、type、host、port即可
replication:
binlog: yes
sync_speed: -
slaveof:
id: node1
type: sync
host: 192.168.3.200
port:
测试在主节点上添加一个key在从节点上就可以马上看到
从服务器info信息
ssdb 192.168.3.198:> info
version
1.9.
links total_calls dbsize binlogs
capacity :
min_seq :
max_seq :
replication
slaveof 192.168.3.200:
id : node1
type : sync
status : SYNC
last_seq :
copy_count :
sync_count :
serv_key_range
kv : "" - ""
hash: "" - ""
zset: "" - ""
list: "" - ""
data_key_range
kv : "address" - "salary"
hash: "" - ""
zset: "" - ""
list: "" - ""
leveldb.stats
Compactions
Level Files Size(MB) Time(sec) Read(MB) Write(MB)
主服务器info信息
ssdb 192.168.3.200:> info
version
1.9.
links total_calls dbsize binlogs
capacity :
min_seq :
max_seq :
replication
client 192.168.3.198:
type : sync
status : SYNC
last_seq :
serv_key_range
kv : "" - ""
hash: "" - ""
zset: "" - ""
list: "" - ""
data_key_range
kv : "address" - "name"
hash: "" - ""
zset: "" - ""
list: "" - ""
leveldb.stats
Compactions
Level Files Size(MB) Time(sec) Read(MB) Write(MB)
二、配置双主同步(主要是高可用)
SSDB 数据库是支持双主(双 Master)和多主架构的. 而且, 我们的应用也是部署双主架构, 但当作单主来用. 也就是说, 平时只往其中一个写, 当出现故障时, 整体切换到另一个主上面. 如果应用层已经解决了数据拆分, 也即不会两个节点同时操作一个 key, 那么就可以放心使用双主同时写入.
SSDB 双主的配置非常简单:
只需要将 type 设置为 mirror, 然后每个节点各指向对方即可.
如果是多主, 则每个节点要指向其它 n-1 个节点.
node1中的配置信息:
server:
ip: 192.168.3.200
port: replication:
binlog: yes
sync_speed: -
slaveof:
id: node2
type: mirror
host: 192.168.3.198
port:
node2中的配置信息:
server:
ip: 192.168.3.198
port: replication:
binlog: yes
sync_speed: -
slaveof:
id: node1
type: mirror
host: 192.168.3.200
port:
node1中的info信息:
ssdb 192.168.3.200:> info
version
1.9.
links total_calls dbsize binlogs
capacity :
min_seq :
max_seq :
replication
client 192.168.3.198:
type : mirror
status : SYNC
last_seq :
replication
slaveof 192.168.3.198:
id : node2
type : mirror
status : SYNC
last_seq :
copy_count :
sync_count :
serv_key_range
kv : "" - ""
hash: "" - ""
zset: "" - ""
list: "" - ""
data_key_range
kv : "address" - "salary"
hash: "" - ""
zset: "" - ""
list: "" - ""
leveldb.stats
Compactions
Level Files Size(MB) Time(sec) Read(MB) Write(MB)
--------------------------------------------------
node2中的info信息:
ssdb 192.168.3.198:> info
version
1.9.
links total_calls dbsize binlogs
capacity :
min_seq :
max_seq :
replication
client 192.168.3.200:
type : mirror
status : SYNC
last_seq :
replication
slaveof 192.168.3.200:
id : node1
type : mirror
status : SYNC
last_seq :
copy_count :
sync_count :
serv_key_range
kv : "" - ""
hash: "" - ""
zset: "" - ""
list: "" - ""
data_key_range
kv : "address" - "salary"
hash: "" - ""
zset: "" - ""
list: "" - ""
leveldb.stats
Compactions
Level Files Size(MB) Time(sec) Read(MB) Write(MB)
--------------------------------------------------
此时在任意节点写入数据都会在另外的节点查询到
四、监控工具的使用
将php文件上传到/var/www/html/phpssdbadmin目录
lnmp架构的方法
# yum -y install php php-mysql nginx php-gd* php-mcrypt 修改/etc/nginx/nginx.conf location /phpssdbadmin {
try_files $uri $uri/ /phpssdbadmin/index.php?$args;
}
index index.php;
root /var/www/html;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
} lamp架构的方法
lamp架构的方法
yum install -y httpd php php-gd*
编辑/etc/httpd/conf/httpd.conf
打开rewrite模块
LoadModule rewrite_module modules/mod_rewrite.so DocumentRoot "/var/www/html"
<Directory />
Options FollowSymLinks
AllowOverride All # 修改为All
</Directory> <Directory "/var/www/html">
Order allow,deny
Allow from all
AllowOverride All # 改为all
</Directory>
在根目录下简历.htaccess文件内容如下:
# cat phpssdbadmin/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /var/www/html/phpssdbadmin
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /phpssdbadmin/index.php [L]
</IfModule>
OK,然后重启服务器,service httpd restart ,这样.htaccess就可以使用了
随机推荐
-
JVM配置
1.堆设置 JVM中最大堆大小有三方面限制:操作系统位数(32-bt还是64-bit)限制:可用虚拟内存限制:系统的可用物理内存限制. java -Xmx3550m -Xms3550m -Xmn2g ...
-
前端自动化工具 -- grunt 使用简介
grunt作为一个前端构建工具,有资源压缩,代码检查,文件合并等功能. 下面就简单了解grunt的使用. 一.环境配置 grunt是基于nodejs的,所以需要一个 nodejs 环境,未了解的可以 ...
-
23个.NET开源项目
Castle是.NET里走过了三年的开源框架,下载地址如:http://www.castleproject.org/index.html ,当然如果你是从事过JAVA开发并用过spring,hiber ...
-
Demon_游戏登录界面(具备账号密码输入功能)
using UnityEngine; using System.Collections; using UnityEngine.UI;// public class LoginButton : Mono ...
-
轻松解决ubuntu系统引导问题
什么是ppa PPA,表示 Personal Package Archives,也就是个人软件包集. 有很多软件因为种种原因,不能进入官方的 Ubuntu 软件仓库. 为了方便 Ubuntu 用户使用 ...
-
IC封装
1.QFN •QFN—Quad Flat No-lead Package 四方无引脚扁平封装 2.SOIC •SOIC—Small Outline IC 小外形IC封装 3.TSSOP •TSSOP— ...
-
cocos2dx3.1-lua移植android流程
我很懒惰,写这篇博客只是为了能够转出后,当忘记查看,所以我写了下面非常简单的内容.假设完全没有经验的学生请找另一篇文章 一.环境配置(win7): 用户变量如下面: ANDROID_SDK_ROOT: ...
-
anki_vector SDK源码解析(教程)
一:最近anki vector robot开放了Python SDK,我听到的第一时间就赶快上网查了查,先抛几个官网重要链接吧: Python编程API手册及环境搭建等: https://sdk-re ...
-
linux挂载概念简述:
挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为“挂载点”,解除此关联关系的过程称之为“卸载” 1.挂载:根 ...
-
file类和io流
一.file类 file类是一个可以用其对象表示目录或文件的一个Java.io包中的类 import java.io.File; import java.io.IOException; public ...