首页 文章 精选 留言 我的

精选列表

搜索[存储],共10011篇文章
优秀的个人博客,低调大师

Redis持久化存储

Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式;二是Append-only file(缩写aof)的方式;三是虚拟内存方式;四是diskstore方式。下面分别介绍之。 一、RBD(快照) 原理 在某个时间点将内存中的数据写入一个磁盘的临时文件,持久化结束后,用这个临时文件替换上次持久化的文件。 配置文件 save 900 1 # 在900秒内如果键值修改过1次就快照 save 300 10 # 在300秒内如果键值修改过10次就快照 save 60 10000 # 在60秒内键值修改过10000次就快照 stop-writes-on-bgsave-error yes # 后台备份出错时,是否禁止新的写入操作? 如果不禁止容易造成数据不一致 rdbcompression yes # 导出的rdb文件是否压缩 rdbchecksum yes # 恢复时导入rdb文件是否检验完整性、是否检验版本是否一致 dbfilename dump.rdb # 导出来得rdb文件名 dir /var/lib/redis # rdb的存放路径 二、AOF 原理 通过将发送到服务器的写操作命令记录下来,形成AOF文件,此文件只许追加不能修改,Redis启动时会读取AOF文件后重构数据(重新执行一遍)。文件默认名称是appendonly.aof 配置文件 appendonly no # 是否开启aof功能 appendfilename "appendonly.aof" # 文件名 appendfsync always # 只要一修改就同步至缓冲区,并同步至磁盘 appendfsync everysec # 每秒将数据同步至缓冲区,并同步至磁盘 appendfsync no # redis不设定同步策略,由内核设定的参数决定是否同步 no-appendfsync-on-rewrite no # appendfsync设定为always或everysec的话,还要不要同步磁盘 auto-aof-rewrite-percentage 100 # 每隔多久重构aof文件,单位秒 auto-aof-rewrite-min-size 64mb # aof文件最小为多少时重构一次aof文件。搭配上一条使用 aof-load-truncated yes # 崩溃修复后自动进行全备 aof重写、重构 将大量重复的命令合并成一条命令,而不必频繁的去重新执行每一条命令. 三、AOF对比RDB AOF更加安全,可以将数据即时同步到文件中,但是消耗磁盘I/O,效率低 Snapshot更高效,它是服务器在正常运行情况下数据同步最佳手段,文件尺寸小,效率高,安全性低 注:RDB与AOF同时开启 默认使用AOF来恢复数据 四、常用架构 架构良好的环境中:Master使用AOF,Slave使用snapshot。原因是主要确保数据完整,从要速度快。 网络环境较差:建议使用master与slave同时使用AOF更加安全 网络良好、需要收密集型写操作:建议Master采用snapshot,Slave采用AOF

优秀的个人博客,低调大师

docker存储与通信

一、数据管理 用户在使用docker 的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的分享,这必然涉及容器的数据管理。 容器数据的管理主要两种方式: 数据卷 数据卷容器 1、数据卷 (1)数据卷的概念 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: 1>数据卷可以在容器之间共享和重用。 2>对数据卷的修改会立马生效。 3>对数据卷的更新,不会影响镜像。 4>卷会一直存在,直到没有容器使用。 5>数据卷的使用,类似于Linux 下对目录或文件进行mount 操作 创建数据卷 docker run 在使用时,后面可加 -v 标记,可以在容器内创建一个数据卷。多次使用-v 标记可以创建多个数据卷。 [root@localhost ~]# docker run -it -p 5000:80 --name web -v/html:/usr/share/nginx/htmlnginx:1 /bin/bash //-it 交互式并获得一个tty 终端,-p 将宿主机5000 端口映射给容器的80 端口,--name 起个名字叫web, -v 创建一个数据卷 把宿主机的/html 目录(若不存在会自动建立)挂载到容器的/usr/share/nginx/html(此容器中nginx 的默认发布路径为此目录),使用nginx:1 这个镜像运行一个容器,执行/bin/bash 命令获得一个shell。 root@844ff80d3334:/# root@844ff80d3334:/ctrl+p ctrl+q # [root@localhost ~]# [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 844ff80d3334 nginx:1 "/bin/bash" About a minute ago Up About a minute 0.0.0.0:5000->80/tcp web [root@localhost ~]# ls /html/ [root@localhost ~]# echo "123123" > /html/index.html 浏览器访问宿主机5000 端口查看 [root@localhost ~]# echo "123" > /html/index.html//只要修改宿主机/html 里的内容,容器里的/usr/share/nginx/html 跟着变 docker 挂载数据卷的默认权限是读写(rw),用户也可以通过,ro 指定为只读: [root@localhost ~]# docker run -it -p5001:80 --name we1 -v/html1:/usr/share/nginx/html:ronginx:1 /bin/bash root@4f7bdd156b4e:/# /etc/init.d/nginx start root@4f7bdd156b4e:/#ctrl+p ctrl+q [root@localhost ~]# [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4f7bdd156b4e nginx:1 "/bin/bash" 16 seconds ago Up 14 seconds 0.0.0.0:5001->80/tcp we1 a2752d8fe0fd nginx:1 "/bin/bash" 13 minutes ago Up 13 minutes 0.0.0.0:5000->80/tcp we 加了:ro 之后,容器内挂载的数据卷的数据就无法修改 2、数据卷容器 (1)数据卷容器概述 用户需要在容器之间共享一些持续性更新的数据,这时,可以使用数据卷容器。数据容器也是一个普通的容器。 (2)创建数据卷容器 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx 1 2f24e0f40c85 37 minutes ago 181.2 MB centos 1 385c6554f48e 3 days ago 196.7 MB [root@localhost ~]# docker run -it -v /dbdata --name dbdata centos:1 /bin/bash //创建一个数据卷容器,并在其中创建一个数据卷挂载到/dbdata [root@9ecb0e48e121 /]# exit [root@localhost ~]# docker run -it --volumes-from dbdata --name test1 centos:1 /bin/bash //--volumes-from 来挂载dbdata 容器中的数据卷,创建test1 和test2 两个容器,查看数据是否同步 [root@94672c86ad58 /]# ls anaconda-post.log dbdata etc lib lost+found mnt proc run srv tmp var bin dev home lib64 media opt root sbin sys usr [root@94672c86ad58 /]# [root@94672c86ad58 /]# ls dbdata/ [root@94672c86ad58 /]# touch /dbdata/aaa [root@94672c86ad58 /]# ls dbdata/ aaa [root@94672c86ad58 /]# exit exit [root@localhost ~]# docker run -it --volumes-from dbdata --name test2 centos:1 /bin/bash [root@c1bf115c4b23 /]# ls anaconda-post.log dbdata etc lib lost+found mnt proc run srv tmp var bin dev home lib64 media opt root sbin sys usr [root@c1bf115c4b23 /]# ls dbdata/ aaa //测试文件还在 [root@c1bf115c4b23 /]# exit Exit 3、利用数据卷容器迁移数据 (1)备份 [root@localhost ~]# docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos:1 tar cvf /backup/backup.tar /dbdata //在centos:1 镜像上创建了一个叫worker 的容器,再通过使用 --volumes-from dbdata 这个参数让worker 容器挂载dbdata 容器的数据卷(即dbdata 数据卷);使用 -v $(pwd):/backup 参数来挂载本地的当前目录到worker 容器的/backup 目录;worker 容器启动后,使用tar cvf /backup/backup.tar /dbdata 命令, 来将/dbdata 下内容打包备份为容器内的/backup/backup.tar,即宿主机当前目录下的backup.tar 运行结果: tar: Removing leading `/' from member names /dbdata/ /dbdata/aaa (2)恢复 [root@localhost ~]# docker run -it -v /dbdata --name dbdata2 centos:1 /bin/bash // 创建一个带有数据卷的容器:dbdata2 [root@2a17825b9823 /]# exit [root@localhost ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2a17825b9823 centos:1 "/bin/bash" 37 seconds ago Exited (0) 12 seconds ago dbdata2 [root@localhost ~]# docker run --volumes-from dbdata2 -v $(pwd):/backup centos:1 tar xvf /backup/backup.tar //创建另一个新的容器,挂载dbdata2 的容器,并使用tar xvf 解压备份文件到所挂载的容器卷即可 dbdata/ dbdata/aaa 二、docker 的网络基础配置 1.端口映射实现访问容器 从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器的外部是无法通过网路来访问容器内部开的应用和服务的。可以通过 -P 或 -p 参数来指定端口映射 1>大写P -P:docker 会随机映射一个文件/proc/sys/net/ipv4/ip_local_port_range 中定义的端口范围作 为一个本地端口,随后将这个本地端口映射到容器内部开放的网络端口 [root@localhost ~]# docker run -d -P webapp:1 python app.py 9276997c8e3e3a2bee9cb48737bbfa27faa4577d811e2e3f0e5fddd590121a46 [root@localhost ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9276997c8e3e webapp:1 "python app.py" 10 seconds ago Up 9 seconds 0.0.0.0:32768->5000/tcp focused_torvalds [root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 2>小写p -p :指定要映射的端口,并且在一个指定端口上只可以绑定一个容器 格式: ip:hostPort:containerPort| ip::containerPort |hostPort:containerPort ip:主机端口:容器端口 | ip::容器端口 | 主机端口:容器端口 映射所有接口地址 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx 1 2f24e0f40c85 About an hour ago 181.2 MB centos 1 385c6554f48e 3 days ago 196.7 MB docker.io/training/webapplatest 6fae60ef3446 21 months ago 348.7 MB webapp 1 6fae60ef3446 21 months ago 348.7 MB [root@localhost ~]# docker run -d -p 5000:5000 -p 3000:80 webapp:1 python app.py 7181e66382876d61601bc8c3dc635db09b1c63868c8d2d0ed372b455901b5db2 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 765ed2301854 webapp:1 "python app.py" 5 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp, 0.0.0.0:3000->80/tcp evil_almeida 9276997c8e3e webapp:1 "python app.py" 7 minutes ago Up 7 minutes 0.0.0.0:32768->5000/tcp focused_torvalds 映射到指定地址的指定端口,可以使用ip:hostPort:containerPort [root@localhost ~]# docker run -d -p 127.0.0.1:6000:5000 webapp:1 python app.py bc861a62448423350151b8ef7ec31a18925d7d92938de4769135a349a16ffa0e [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bc861a624484 webapp:1 "python app.py" 5 seconds ago Up 4 seconds 127.0.0.1:6000->5000/tcp tender_heyrovsky 765ed2301854 webapp:1 "python app.py" About a minute ago Up About a minute 0.0.0.0:5000->5000/tcp, 0.0.0.0:3000->80/tcp evil_almeida 9276997c8e3e webapp:1 "python app.py" 9 minutes ago Up 9 minutes 0.0.0.0:32768->5000/tcp focused_torvalds [root@localhost ~]# curlhttp://127.0.0.1:6000 Hello world![root@localhost ~]# 映射到指定地址的任意端口,使用ip::containerPort 格式,在本地主机会自动分配一个端口 [root@localhost ~]# docker run -d -p 127.0.0.1::5000 webapp:1 python app.py 3b2b1c871b29673ae1eb702d45b8f6085656f6196cb6d80c11250a58da646d0a [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3b2b1c871b29 webapp:1 "python app.py" 7 seconds ago Up 5 seconds 127.0.0.1:32769->5000/tcp silly_meitner bc861a624484 webapp:1 "python app.py" 2 minutes ago Up 2 minutes 127.0.0.1:6000->5000/tcp tender_heyrovsky 765ed2301854 webapp:1 "python app.py" 3 minutes ago Up 3 minutes 0.0.0.0:5000->5000/tcp, 0.0.0.0:3000->80/tcp evil_almeida 9276997c8e3e webapp:1 "python app.py" 11 minutes ago Up 11 minutes 0.0.0.0:32768->5000/tcp focused_torvalds 2.容器互联实现容器间通信 容器的连接(linking)系统是除了端口映射外另一种可以与容器中应用进行交互的方式。它会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息 使用--link参数可以容器之间安全的进行交互 [root@localhost ~]# cat mysql5.tar |docker import - mysql:1 sha256:8c1652f0a50af3ac76b630185cc2fb6cc525ec8d47fe13287573e9623d5a899a [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 1 8c1652f0a50a 2 minutes ago 375 MB nginx 1 2f24e0f40c85 About an hour ago 181.2 MB centos 1 385c6554f48e 3 days ago 196.7 MB docker.io/training/webapplatest 6fae60ef3446 21 months ago 348.7 MB webapp 1 6fae60ef3446 21 months ago 348.7 MB [root@localhost ~]# docker run -d -it --name db mysql:1 /bin/bash 8f96883620812e2abdddc5e46bec48449924557dfa10e974b7ca0ee2ef89ce7c [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8f9688362081 mysql:1 "/bin/bash" 27 seconds ago Up 26 seconds db [root@localhost ~]# docker run -d -P --name wec --link db:db webapp:1 python app.py // --link参数的格式:--linkname:alias,其中name是要链接的容器的名称,alias是这个链接的别名 223ba1ec1b986d14cb9394a62ac839705aebab6a8d7dca33b8e3ad7bf549c119 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 223ba1ec1b98 webapp:1 "python app.py" 10 seconds ago Up 8 seconds 0.0.0.0:32770->5000/tcp wec 8f9688362081 mysql:1 "/bin/bash" 4 minutes ago Up 4 minutes db 此时,db容器和web容器建立互联关系 本文转自Mr_chen 51CTO博客,原文链接:http://blog.51cto.com/metis/1945274,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册