文件缓存tmpfs + 数据缓存SSDB

文件缓存tmpfs
基于内存的文件系统,直接使用ram(物理内存)+swap(交换分区)

tmpfs缓存文件系统
/dev/shm共享内存
动态的使用虚拟内存,文件删除后释放内存

特性:

1.动态空间使用和动态变化
2.速度
3.没有持久性(重启失效)

主要应用场景:

1.缓存 squid nginx
2.php session /tmp
3.存放socket
4.自定义缓存

1.将文件拷贝到/dev/shm目录中,发现/dev/shm使用率变化了

[root@node1 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 30G 3.9G 27G 13% /
devtmpfs devtmpfs 901M 0 901M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 8.8M 903M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 xfs 297M 122M 176M 41% /boot
/dev/mapper/centos-data xfs 40G 224M 40G 1% /data
tmpfs tmpfs 183M 0 183M 0% /run/user/0

[root@node1 ~]# cp jdk-8u131-linux-x64.gz /dev/shm
[root@node1 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 30G 3.9G 27G 13% /
devtmpfs devtmpfs 901M 0 901M 0% /dev
tmpfs tmpfs 912M 177M 735M 20% /dev/shm
tmpfs tmpfs 912M 8.8M 903M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 xfs 297M 122M 176M 41% /boot
/dev/mapper/centos-data xfs 40G 224M 40G 1% /data
tmpfs tmpfs 183M 0 183M 0% /run/user/0

[root@node1 ~]# free -m
total used free shared buff/cache available
Mem: 1823 640 72 185 1110 768
Swap: 4095 0 4095

2.删除后发现内存也变了

[root@node1 ~]# rm -f /dev/shm/jdk-8u131-linux-x64.gz 
[root@node1 ~]# free -m
total used free shared buff/cache available
Mem: 1823 641 248 8 933 945
Swap: 4095 0 4095

创建文件,并划分为tmpfs文件系统

[root@node1 ~]# mkdir /mnt/data
[root@node1 ~]# mount
mount mount.fuse mountpoint 
[root@node1 ~]# mount -t tmpfs tepfs /mnt/data/
[root@node1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 30G 3.9G 27G 13% /
devtmpfs 901M 0 901M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.8M 903M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 297M 122M 176M 41% /boot
/dev/mapper/centos-data 40G 224M 40G 1% /data
tmpfs 183M 0 183M 0% /run/user/0
tepfs 912M 0 912M 0% /mnt/data

3.指定tmpfs文件系统大小为50M

[root@node1 ~]# mkdir /mnt/data1
[root@node1 ~]# mount -t tmpfs -o size=50m tmpfs /mnt/data1
[root@node1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 30G 3.9G 27G 13% /
devtmpfs 901M 0 901M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.8M 903M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 297M 122M 176M 41% /boot
/dev/mapper/centos-data 40G 224M 40G 1% /data
tmpfs 183M 0 183M 0% /run/user/0
tepfs 912M 0 912M 0% /mnt/data
tmpfs 50M 0 50M 0% /mnt/data1

4.重新设置tmpfs文件系统大小为100M

[root@node1 ~]# mount -o remount,size=100m /mnt/data
[root@node1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 30G 3.9G 27G 13% /
devtmpfs 901M 0 901M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.8M 903M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 297M 122M 176M 41% /boot
/dev/mapper/centos-data 40G 224M 40G 1% /data
tmpfs 183M 0 183M 0% /run/user/0
tepfs 100M 0 100M 0% /mnt/data
tmpfs 50M 0 50M 0% /mnt/data1

5.如果希望重启后还生效,需要写入/etc/fstab,否则可能系统无法正常启动

tempfs /mnt/data tmpfs size=50M 0 0

###############################################################

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 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

6.修改配置文件

# vim /usr/local/ssdb/ssdb.conf
server:
ip: 192.168.3.200
port: 8888

 文件缓存tmpfs + 数据缓存SSDB

7.启动服务

[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

 

二、配置主从同步

文件缓存tmpfs + 数据缓存SSDB

从服务器配置:

配置主服务器的ID、type、host、port即可

replication:
        binlog: yes
        sync_speed: -1
        slaveof:
                id: node1
                type: sync
                host: 192.168.3.200
                port: 8888

 

文件缓存tmpfs + 数据缓存SSDB

测试在主节点上添加一个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)

文件缓存tmpfs + 数据缓存SSDB

主服务器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)

 

三、配置双主同步(主要是高可用)

文件缓存tmpfs + 数据缓存SSDB
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

 文件缓存tmpfs + 数据缓存SSDB

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

 

此时在任意节点写入数据都会在另外的节点查询到

四、监控工具的使用

将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就可以使用了

文件缓存tmpfs + 数据缓存SSDB

上一篇:哈夫曼编码(Huffman coding)的那些事,(编码技术介绍和程序实现)


下一篇:如何使用Visual Studio 2019配置EasyX环境