ssdb主從及雙主模型配置和簡單管理php
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++語言、支持持久化、支持主從複製、主主複製和負載均衡等功能html
官方文檔:http://ssdb.io/zh_cn/
安裝文檔:http://ssdb.io/docs/zh_cn/install.htmljava
SSD能夠用於保證數據不丟失的場景而不是單單的數據緩存場景,用了SSDB儘可能要天天晚上備份文件目錄,即便作了主從也要對目錄使用其自帶的ssdb-dump工具進行備份。node
環境: centos 7.X x86_64python
centos6.X系統環境可能python版本和做者使用的有兼容性問題須要注意mysql
1、ssdb服務的安裝和配置
1.安裝依賴nginx
# yum install -y jemalloc-devel autoconf
2.下載安裝包並編譯git
# 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 目錄下github
[root@node2 ssdb-master]# make install
3.修改啓動腳本redis
[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 0:off 1:off 2:on 3:on 4:on 5:on 6: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: 8888
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 8888 LISTEN 0 128 192.168.3.200:8888 *:* users:(("ssdb-server",pid=47357,fd=13))
鏈接服務測試
[root@node2 ssdb-master]# ssdb-cli -h 192.168.3.200 -p 8888 ssdb (cli) - ssdb command line tool. Copyright (c) 2012-2016 ssdb.io 'h' or 'help' for help, 'q' to quit. ssdb-server 1.9.4 ssdb 192.168.3.200:8888> set name jack ok (0.001 sec) ssdb 192.168.3.200:8888> set age 18 ok (0.001 sec) ssdb 192.168.3.200:8888> get name jack
2、配置主從同步
從服務器配置:
配置主服務器的ID、type、host、port便可
replication: binlog: yes sync_speed: -1 slaveof: id: node1 type: sync host: 192.168.3.200 port: 8888
測試在主節點上添加一個key在從節點上就能夠立刻看到
從服務器info信息
ssdb 192.168.3.198:8888> info version 1.9.4 links 1 total_calls 9 dbsize 0 binlogs capacity : 20000000 min_seq : 0 max_seq : 4 replication slaveof 192.168.3.200:8888 id : node1 type : sync status : SYNC last_seq : 3 copy_count : 3 sync_count : 0 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:8888> info version 1.9.4 links 1 total_calls 12 dbsize 0 binlogs capacity : 20000000 min_seq : 0 max_seq : 3 replication client 192.168.3.198:57714 type : sync status : SYNC last_seq : 3 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)
2、配置雙主同步(主要是高可用)
SSDB 數據庫是支持雙主(雙 Master)和多主架構的. 並且, 咱們的應用也是部署雙主架構, 但看成單主來用. 也就是說, 平時只往其中一個寫, 當出現故障時, 總體切換到另外一個主上面. 若是應用層已經解決了數據拆分, 也即不會兩個節點同時操做一個 key, 那麼就能夠放心使用雙主同時寫入.
SSDB 雙主的配置很是簡單:
只須要將 type 設置爲 mirror, 而後每一個節點各指向對方便可.
若是是多主, 則每一個節點要指向其它 n-1 個節點.
node1中的配置信息:
server: ip: 192.168.3.200 port: 8888 replication: binlog: yes sync_speed: -1 slaveof: id: node2 type: mirror host: 192.168.3.198 port: 8888
node2中的配置信息:
server: ip: 192.168.3.198 port: 8888 replication: binlog: yes sync_speed: -1 slaveof: id: node1 type: mirror host: 192.168.3.200 port: 8888
node1中的info信息:
ssdb 192.168.3.200:8888> info version 1.9.4 links 1 total_calls 1 dbsize 273 binlogs capacity : 20000000 min_seq : 1 max_seq : 71 replication client 192.168.3.198:57724 type : mirror status : SYNC last_seq : 71 replication slaveof 192.168.3.198:8888 id : node2 type : mirror status : SYNC last_seq : 68 copy_count : 4 sync_count : 64 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) -------------------------------------------------- 0 1 0 0 0 0
node2中的info信息:
ssdb 192.168.3.198:8888> info version 1.9.4 links 1 total_calls 6 dbsize 1690 binlogs capacity : 20000000 min_seq : 1 max_seq : 69 replication client 192.168.3.200:46991 type : mirror status : SYNC last_seq : 69 replication slaveof 192.168.3.200:8888 id : node1 type : mirror status : SYNC last_seq : 72 copy_count : 0 sync_count : 0 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) -------------------------------------------------- 0 1 0 0 0 0
此時在任意節點寫入數據都會在另外的節點查詢到
4、監控工具的使用
將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:9000; 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就可使用了