怎么做刷会员网站,手机网站设计字体多大,河南省重点项目建设网站,长春网站建设电话咨询关于docker的基础知识#xff0c;请见《别在说自己不知道docker了#xff0c;全文通俗易懂的给你说明白docker的基础与底层原理》
在自己学习的过程中经常会需要动手安装一下常见的工具#xff0c;本篇就手把手带你用docker安装一遍。
jdk安装
如果先要更换之前的jdk从第…关于docker的基础知识请见《别在说自己不知道docker了全文通俗易懂的给你说明白docker的基础与底层原理》
在自己学习的过程中经常会需要动手安装一下常见的工具本篇就手把手带你用docker安装一遍。
jdk安装
如果先要更换之前的jdk从第一步开始之前没下载过从第二步开始,建议先检查一下系统有没有自带jdk的
1、安装准备
检查系统jdk版本
java -version检查jdk自带安装包
rpm -qa | grep java卸载jdk
yum -y remove tzdata-java.noarch如果有就卸载卸载的包名通过rpm -qa | grep java获取包名要全部输入
rpm -e --nodeps #这里输入要卸载的包#2、开始安装
CentOS虚拟机使用yum安装jdk
通过yum命令安装jdk不需要配置环境变量就能进行使用,前提需要网络通常
查看云端目前支持安装的jdk版本两种查询方式
yum search java|grep jdk
或
yum -y list java*在/usr/目录下创建java目录
mkdir /usr/java
cd /usr/java下载地址https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html #如果下载不下来手动下载后放到/usr/java目录下并解压(还是自己下载吧
tar -zxvf jdk-8u371-linux-i586.tar.gz安装完成后测试是否安装成功
java -version搜索java文件查找jdk安装目录
find / -name java设置环境变量
vi /etc/profile在profile中添加如下内容
#set java environment
JAVA_HOME/etc/java/jdk1.8.0_371
JRE_HOME/etc/java/jdk1.8.0_371/jre
CLASS_PATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH让修改生效
java -versiondocker 安装 redis
搜索redis镜像
# docker serach 镜像名
docker search redis 拉起redis镜像 如果不输入版本号则会默认拉取最新版本latest
命令docker pull 镜像名称:版本号
docker pull redis接下来就是要将redis 的配置文件进行挂载以配置文件方式启动redis 容器。挂载即将宿主的文件和容器内部目录相关联相互绑定在宿主机内修改文件的话也随之修改容器内部文件
1、挂载 redis 的配置文件
2、挂载 redis 的持久化文件为了数据的持久化。
配置文件存放的地方
mkdir -p /usr/local/redis
mkdir -p /usr/local/redis/data下载配置文件 wget http://download.redis.io/redis-stable/redis.conf启动redis容器
docker run --restartalways --log-opt max-size100m --log-opt max-file2 -p 8081:6379 --name redis -v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456
说明 –restartalways 总是开机启动 –log是日志方面的 -p 6379:6379 将6379端口挂载出去 –name 给这个容器取一个名字 -v 数据卷挂载 /home/redis/myredis/redis.conf:/etc/redis/redis.conf 这里是将 liunx 路径下的redis.conf 和redis下的redis.conf 挂载在一起。 /home/redis/redis/data:/data 这个同上 -d redis 表示后台启动redis redis-server /etc/redis/redis.conf 以配置文件启动redis加载容器内的conf文件最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/home/redis/redis/redis.conf –appendonly yes 开启redis 持久化 –requirepass qwer1234 设置密码
通过docker ps指令查看启动状态
docker ps -a |grep redis # 通过docker ps指令查看启动状态是否成功.查看容器运行日志
docker logs --since 30m redis进入容器
docker exec -it redis redis-cli或 从docker进入redis服务
docker exec -it redis /bin/bash连接客户端redis-cli
redis-cli 验证密码
auth qwer1234查看当前redis有没有设置密码
config get requirepass停止运行redis
# docker stop 容器名
docker stop redis删除容器
# docker rm 容器名
docker rm redis查看所有的镜像
docker images删除镜像
# docker rmi 镜像id
docker rmi 739b59b94569redis.conf配置文件内容
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#bind 127.0.0.1protected-mode no# 监听端口
port 6379tcp-backlog 511# 设置 Redis 连接密码
requirepass 123456# 当客户端闲置多长时间后关闭连接如果指定为 0表示关闭该功能
timeout 0tcp-keepalive 300# 是否以守护进程的方式运行 yes是启用守护进程no为不是
daemonize nosupervised no# 当redis以守护进程的方式运行时默认把pid先写指定文件
pidfile /var/run/redis_6379.pid# 指定日志记录级别Redis 总共支持四个级别debug、verbose、notice、warning默认为 verbose
loglevel notice# 日志记录方式默认为标准输出如果redis以守护进程方式运行这里又设置为标准输出日志则将为发送给dev/null
logfile #设置数据库的数量默认数据库为 0
databases 30always-show-logo yes# 900 秒15 分钟内有1个更改则保存快照
save 900 1
# 300 秒5 分钟内有10个更改则保存快照
save 300 10
# 60 秒1 分钟内有10000个更改则保存快照
save 60 10000stop-writes-on-bgsave-error yes# 指定存储至本地数据库时是否压缩数据默认为 yesRedis 采用 LZF 压缩如果为了节省 CPU 时间可以关闭该选项但会导致数据库文件变的巨大
rdbcompression yesrdbchecksum yes# 指定本地数据库文件名默认值为 dump.rdb
dbfilename dump.rdb# 指定本地数据库存放目录
dir ./replica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-disable-tcp-nodelay noreplica-priority 100lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no# 指定是否在每次更新操作后进行日志记录,也就是是否开启aof日志备份默认为no
appendonly yes# 指定更新日志文件名,也就是aof日志的文件名
appendfilename appendonly.aofno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000slowlog-max-len 128notify-keyspace-events # 指定在超过指定数量或元素超过某一临界值采用一种特殊的哈希算法
hash-max-ziplist-entries 512
hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128
zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096
stream-node-max-entries 100activerehashing yeshz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yes
配置说明
1.# daemonize no 默认情况下redis不是在后台运行的如果需要在后台运行把该项的值更改为yes
daemonize yes2.# 当redis在后台运行的时候Redis默认会把pid文件放在/var/run/redis.pid你可以配置到其他地址。当运行多个redis服务时需要指定不同的pid文件和端口。
pidfile /var/run/redis.pid3.# 指定redis运行的端口默认是6379
port 63794.# 指定redis只接收来自于该IP地址的请求如果不进行设置那么将处理所有请求 在生产环境中最好设置该项 bind
bind 127.0.0.15.# 设置客户端连接时的超时时间单位为秒。当客户端在这段时间内没有发出任何指令那么关闭该连接 0是关闭此设置
timeout 06.# 指定日志记录级别 Redis总共支持四个级别debug、verbose、notice、warning默认为verbosedebug 记录很多信息用于开发和测试 varbose 有用的信息不像debug会记录那么多 notice 普通的verbose常用于生产环境 warning 只有非常重要或者严重的信息会记录到日志
loglevel notice7.TCP连接保活策略可以通过tcp-keepalive配置项来进行设置单位为秒假如设置为60秒则server端会每60秒向连接空闲的客户端发起一次ACK请求以检查客户端是否已经挂掉对于无响应的客户端则会关闭其连接。所以关闭一个连接最长需要120秒的时间。如果设置为0则不会进行保活检测。
tcp-keepalive 08.redis也支持通过logfile配置项来设置日志文件的生成位置。如果设置为空字符串则redis会将日志输出到标准输出。假如你在daemon情况下将日志设置为输出到标准输出则日志会被写到/dev/null中。
logfile 9.对于redis来说可以设置其数据库的总数量假如你希望一个redis包含16个数据库那么设置如下
databases 16这16个数据库的编号将是0到15。默认的数据库是编号为0的数据库。用户可以使用select DBid来选择相应的数据库。
10.我们可以用如下的指令来让数据保存到磁盘上即控制RDB快照功能
save seconds changes如果你想禁用RDB持久化的策略只要不设置任何save指令就可以或者给save传入一个空字符串参数也可以达到相同效果就像这样
save 11.如果用户开启了RDB快照功能那么在redis持久化数据到磁盘时如果出现失败默认情况下redis会停止接受所有的写请求。这样做的好处在于可以让用户很明确的知道内存中的数据和磁盘上的数据已经存在不一致了。如果redis不顾这种不一致一意孤行的继续接收写请求就可能会引起一些灾难性的后果。
如果下一次RDB持久化成功redis会自动恢复接受写请求。当然如果你不在乎这种数据不一致或者有其他的手段发现和控制这种不一致的话你完全可以关闭这个功能以便在快照写入失败时也能确保redis继续接受新的写请求。配置项如下
stop-writes-on-bgsave-error yes12.对于存储到磁盘中的快照可以设置是否进行压缩存储。如果是的话redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话可以设置为关闭此功能但是存储在磁盘上的快照会比较大。
rdbcompression yes13.在存储快照后我们还可以让redis使用CRC64算法来进行数据校验但是这样做会增加大约10%的性能消耗如果你希望获取到最大的性能提升可以关闭此功能。
rdbchecksum yes14.设置快照文件的名称默认是这样配置的
dbfilename dump.rdb15.还可以设置这个快照文件存放的路径。比如默认设置就是当前文件夹
dir ./16.Redis提供了主从功能通过salveof配置项可以控制一台redis服务器作为另一个redis的从服务器通过指定的IP和端口来确认对应的服务器。一般情况下我们会建议用户为从redis设置一个不同频率的快照持久化的周期或者为从redis配置一个不同的服务端口等等。
slaveof masterip masterport17.如果主redis设置了验证密码的话使用requirepass来设置则在从redis的配置中要使用masterauth来设置校验密码否则的话主redis会拒绝从redis的访问请求。
masterauth master-password18.当从redis失去了与主redis的连接或者主从同步正在进行中时redis该如何处理外部发来的访问请求呢这里从redis可以有两种选择
第一种选择如果slave-serve-stale-data设置为yes默认则从redis仍会继续响应客户端的读写请求。
第二种选择如果slave-serve-stale-data设置为no则从redis会对客户端的请求返回“SYNC with master in progress”当然也有例外当客户端发来INFO请求和SLAVEOF请求从redis还是会进行处理。
slave-serve-stale-data yes19.你可以控制一个从redis是否可以接受写请求。将数据直接写入从redis一般只适用于那些生命周期非常短的数据因为在主从同步时这些临时数据就会被清理掉。自从redis2.6版本之后默认从redis为只读。
slave-read-only yes20.在主从同步时可能在这些情况下会有超时发生
1.以从redis的角度来看当有大规模IO传输时。
2.以从redis的角度来看当数据传输或PING时主redis超时
3.以主redis的角度来看在回复从redis的PING时从redis超时
用户可以设置上述超时的时限不过要确保这个时限比repl-ping-slave-period的值要大否则每次主redis都会认为从redis超时。
repl-timeout 6021.我们可以控制在主从同步时是否禁用TCP_NODELAY。如果开启TCP_NODELAY那么主redis会使用更少的TCP包和更少的带宽来向从redis传输数据。但是这可能会增加一些同步的延迟大概会达到40毫秒左右。如果你关闭了TCP_NODELAY那么数据同步的延迟时间会降低但是会消耗更多的带宽。
repl-disable-tcp-nodelay no22.我们还可以设置同步队列长度。队列长度backlog)是主redis中的一个缓冲区在与从redis断开连接期间主redis会用这个缓冲区来缓存应该发给从redis的数据。这样的话当从redis重新连接上之后就不必重新全量同步数据只需要同步这部分增量数据即可。
repl-backlog-size 1mb23.如果主redis等了一段时间之后还是无法连接到从redis那么缓冲队列中的数据将被清理掉。我们可以设置主redis要等待的时间长度。如果设置为0则表示永远不清理。默认是1个小时。
repl-backlog-ttl 360024.假如主redis发现有超过M个从redis的连接延时大于N秒那么主redis就停止接受外来的写请求。这是因为从redis一般会每秒钟都向主redis发出PING而主redis会记录每一个从redis最近一次发来PING的时间点所以主redis能够了解每一个从redis的运行情况。
# min-slaves-to-write 3
# min-slaves-max-lag 10上面这个例子表示假如有大于等于3个从redis的连接延迟大于10秒那么主redis就不再接受外部的写请求。上述两个配置中有一个被置为0则这个特性将被关闭。默认情况下min-slaves-to-write为0而min-slaves-max-lag为10。
25.我们可以给众多的从redis设置优先级在主redis持续工作不正常的情况优先级高的从redis将会升级为主redis。而编号越小优先级越高。比如一个主redis有三个从redis优先级编号分别为10、100、25那么编号为10的从redis将会被首先选中升级为主redis。当优先级被设置为0时这个从redis将永远也不会被选中。默认的优先级为100。
slave-priority 10026.我们可以要求redis客户端在向redis-server发送请求之前先进行密码验证。当你的redis-server处于一个不太可信的网络环境中时相信你会用上这个功能。由于redis性能非常高所以每秒钟可以完成多达15万次的密码尝试所以你最好设置一个足够复杂的密码否则很容易被黑客破解。
requirepass foobared27.redis允许我们对redis指令进行更名比如将一些比较危险的命令改个名字避免被误执行。比如可以把CONFIG命令改成一个很复杂的名字这样可以避免外部的调用同时还可以满足内部调用的需要
rename-command CONFIG 28.我们可以设置redis同时可以与多少个客户端进行连接。默认情况下为10000个客户端。当你无法设置进程文件句柄限制时redis会设置为当前的文件句柄限制值减去32因为redis会为自身内部处理逻辑留一些句柄出来。
如果达到了此限制redis则会拒绝新的连接请求并且向这些连接请求方发出“max number of clients reached”以作回应。
maxclients 1000029.我们甚至可以设置redis可以使用的内存量。一旦到达内存使用上限redis将会试图移除内部数据移除规则可以通过maxmemory-policy来指定。
如果redis无法根据移除规则来移除内存中的数据或者我们设置了“不允许移除”那么redis则会针对那些需要申请内存的指令返回错误信息比如SET、LPUSH等。但是对于无内存申请的指令仍然会正常响应比如GET等。
maxmemory bytes30.对于内存移除规则来说redis提供了多达6种的移除规则。他们是
1.volatile-lru使用LRU算法移除过期集合中的key
2.allkeys-lru使用LRU算法移除key
3.volatile-random在过期集合中移除随机的key
4.allkeys-random移除随机的key
5.volatile-ttl移除那些TTL值最小的key即那些最近才过期的key。
6.noeviction不进行移除。针对写操作只是返回错误信息。
无论使用上述哪一种移除规则如果没有合适的key可以移除的话redis都会针对写请求返回错误信息。
# The default is:
#
# maxmemory-policy noeviction31.LRU算法和最小TTL算法都并非是精确的算法而是估算值。所以你可以设置样本的大小。假如redis默认会检查5个key并选择其中LRU的那个那么你可以改变这个key样本的数量。
axmemory-samples 532.默认情况下redis会异步的将数据持久化到磁盘。这种模式在大部分应用程序中已被验证是很有效的但是在一些问题发生时比如断电则这种机制可能会导致数分钟的写请求丢失。
如上半部分中介绍的追加文件Append Only File是一种更好的保持数据一致性的方式。即使当服务器断电时也仅会有1秒钟的写请求丢失当redis进程出现问题且操作系统运行正常时甚至只会丢失一条写请求。
appendonly no33.还可以设置aof文件的名称
appendfilename appendonly.aof34.fsync()调用用来告诉操作系统立即将缓存的指令写入磁盘。一些操作系统会“立即”进行而另外一些操作系统则会“尽快”进行。
redis支持三种不同的模式
1.no不调用fsync()。而是让操作系统自行决定sync的时间。这种模式下redis的性能会最快。
2.always在每次写请求后都调用fsync()。这种模式下redis会相对较慢但数据最安全。
3.everysec每秒钟调用一次fsync()。这是性能和安全的折衷
# appendfsync always
appendfsync everysec
# appendfsync no35.当fsync方式设置为always或everysec时如果后台持久化进程需要执行一个很大的磁盘IO操作那么redis可能会在fsync()调用时卡住。目前尚未修复这个问题这是因为即使我们在另一个新的线程中去执行fsync()也会阻塞住同步写调用。
为了缓解这个问题我们可以使用下面的配置项这样的话当BGSAVE或BGWRITEAOF运行时fsync()在主进程中的调用会被阻止。这意味着当另一路进程正在对AOF文件进行重构时redis的持久化功能就失效了就好像我们设置了“appendsync none”一样。如果你的redis有时延问题那么请将下面的选项设置为yes。否则请保持no因为这是保证数据完整性的最安全的选择。
no-appendfsync-on-rewrite no36.我们允许redis自动重写aof。当aof增长到一定规模时redis会隐式调用BGREWRITEAOF来重写log文件以缩减文件体积。
redis是这样工作的redis会记录上次重写时的aof大小。假如redis自启动至今还没有进行过重写那么启动时aof文件的大小会被作为基准值。这个基准值会和当前的aof大小进行比较。如果当前aof大小超出所设置的增长比例则会触发重写。另外你还需要设置一个最小大小是为了防止在aof很小时就触发重写。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb如果设置auto-aof-rewrite-percentage为0则会关闭此重写功能。
37.lua脚本的最大运行时间是需要被严格限制的要注意单位是毫秒
lua-time-limit 5000创建redis.conf
touch redis.conf