东莞网站建设是什么,工程 建筑 公司 取名 参考,凡科网代理登录,建设博客网站目录
一、Redis环境准备#xff1a;
1、下载redis
2、Windows下的.msi安装和.zip格式区别#xff1a;
二、哨兵介绍#xff1a;
1、一主二从三哨兵理论图#xff1a;
2.哨兵的主要功能#xff1a;
3.哨兵用于实现 redis 集群的高可用#xff0c;本身也是分布式的
1、下载redis
2、Windows下的.msi安装和.zip格式区别
二、哨兵介绍
1、一主二从三哨兵理论图
2.哨兵的主要功能
3.哨兵用于实现 redis 集群的高可用本身也是分布式的作为一个哨兵集群去运行互相协同工作。
4.哨兵的核心知识
三、使用Redis主从复制的作用
1数据冗余
2故障恢复
3读写分离
4负载均衡
5高可用的基石
五、配置redis一主二从
第一步修改redis.windows.conf配置文件
第二步启动三台redis服务器
第三步配置从库不配置主库
六、配置redis三哨兵
1、sentinel-26379.conf
2、sentinel-26380.conf
3、sentinel-26381.conf
4、sentinel.conf配置文件详解
七、redis哨兵测试
1、准备测试
2、关闭 6379 主服务观察 sentinel 服务的信息变化
3、重启6379服务查看三个服务的信息
4. 关闭 6380 主服务
5. 重启 6380 服务
八、总结 一、Redis环境准备
1、下载redis
windows版本readis下载GitHub
https://github.com/tporadowski/redis/releases 官网下载无Windows版本 Download | Redis Redis中文网站 http://www.redis.cn 所有版本这里都有Index of /releases/下载后是个Linux的压缩文件需要下载、解压和编译 2、Windows下的.msi安装和.zip格式区别
.msi是Windows installer开发出来的程序安装文件它可以让你安装修改卸载你所安装的程序。说白了.msi就是Windows installer的数据包把所有和安装文件相关的内容封装在一个包里。此外它还包含有关安装过程自己的信息。例如安装序列、目标文件夹路径、安装选项和控制安装过程的属性。 .zip是一个压缩包解压之后即可不需要安装
本人这里使用的是 Redis-x64-3.2.100.zip 版本
二、哨兵介绍
1、一主二从三哨兵理论图 一主两从三哨兵集群当master节点宕机时通过哨兵(sentinel)重新推选出新的master节点保证集群的可用性。
2.哨兵的主要功能 1.集群监控负责监控 Redis master 和 slave 进程是否正常工作。 2.消息通知如果某个 Redis 实例有故障那么哨兵负责发送消息作为报警通知给管理员。 3.故障转移如果 master node 挂掉了会自动转移到 slave node 上。 4.配置中心如果故障转移发生了通知 client 客户端新的 master 地址。
PS根据推举机制集群中哨兵数量最好为奇数(3、5…)
3.哨兵用于实现 redis 集群的高可用本身也是分布式的作为一个哨兵集群去运行互相协同工作。
故障转移时判断一个 master node 是否宕机了需要大部分的哨兵都同意才行涉及到了分布式选举的问题。 即使部分哨兵节点挂掉了哨兵集群还是能正常工作的因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的那就很坑爹了。 4.哨兵的核心知识
哨兵至少需要 3 个实例来保证自己的健壮性。 哨兵 redis 主从的部署架构是不保证数据零丢失的只能保证 redis 集群的高可用性。 对于哨兵 redis 主从这种复杂的部署架构尽量在测试环境和生产环境都进行充足的测试和演练。
三、使用Redis主从复制的作用 主从复制是指将一台Redis主节点服务器的数据复制到其他的Redis从节点服务器。
主节点称为(master/leader)从节点称为(slave/follower)
1数据冗余
主从复制实现了数据的热备份这也是持久化实现的另一种方式。
2故障恢复
当主节点出现问题时可以由从节点提供服务实现快速的故障恢复实际上是一种服务的冗余。
3读写分离
master服务主要用来写slave服务主要用来读数据。可以提高服务器的负载能力可以根据需求的变化添加从节点的数量。
4负载均衡
同时配合读写分离由主节点提供写服务从节点提供读服务分担服务器的负载。在写少读多的情况下通过多个从节点分担读负载能够大大提高Redis服务的并发量和负载。
5高可用的基石
主从复制是哨兵和集群模式能够实施的基础。 五、配置redis一主二从 在正常的生产中我们是准备多台服务器比如三台每台都在各自的linux系统中安装redis。
但是此处为了演示方便我使用一台电脑安装虚拟机在虚拟机上安装三份redis服务来模拟一主二从的效果。
第一步修改redis.windows.conf配置文件
将原redis.conf配置文件复制出来三份分别修改的如下几个地方 1、redis.windows-6379.conf
# 打开后台运行
daemonize yes# 打开RDB持久化配置
# RDB持久化策略 默认三种方式
# [900秒内有1次修改],
# [300秒内有10次修改]
# [60秒内有10000次修改]即触发RDB持久化
# 我们也可以手动修改该参数或新增策略
save 900 1
save 300 10
save 60 10000 # RDB文件名
dbfilename dump-6379.rdb# 当Redis以上述守护进程方式运行时Redis默认会把进程文件写入/var/run/redis.pid文件
pidfile D:/\Redis-x64-3.2.100/run/redis_6379.pid# Redis监听端口号默认为6379如果指定0端口表示Redis不监听TCP连接
port 6379
2、redis.windows-6380.conf
# 打开后台运行
daemonize yes# 打开RDB持久化配置
# RDB持久化策略 默认三种方式
# [900秒内有1次修改],
# [300秒内有10次修改]
# [60秒内有10000次修改]即触发RDB持久化
# 我们也可以手动修改该参数或新增策略
save 900 1
save 300 10
save 60 10000 # RDB文件名
dbfilename dump-6380.rdb# 当Redis以上述守护进程方式运行时Redis默认会把进程文件写入/var/run/redis.pid文件
pidfile D:/\Redis-x64-3.2.100/run/redis_6380.pid# Redis监听端口号
port 6380
3、redis.windows-6381.conf
# 打开后台运行
daemonize yes# 打开RDB持久化配置
# RDB持久化策略 默认三种方式
# [900秒内有1次修改],
# [300秒内有10次修改]
# [60秒内有10000次修改]即触发RDB持久化
# 我们也可以手动修改该参数或新增策略
save 900 1
save 300 10
save 60 10000 # RDB文件名
dbfilename dump-6381.rdb# 当Redis以上述守护进程方式运行时Redis默认会把进程文件写入/var/run/redis.pid文件
pidfile D:/\Redis-x64-3.2.100/run/redis_6381.pid# Redis监听端口号默认为6381如果指定0端口表示Redis不监听TCP连接
port 6381
redis.conf配置文件详解
# Redis配置文件样例# 单位注意事项当需要内存大小时可以指定它以通常的形式 1k 5GB 4M 等等
#
# 1k 1000 bytes
# 1kb 1024 bytes
# 1m 1000000 bytes
# 1mb 1024*1024 bytes
# 1g 1000000000 bytes
# 1gb 1024*1024*1024 bytes
#
# u单位不区分大小写所以 1GB 1Gb 1gB 都是一样的################################## INCLUDES包含 ###################################
# 这在你有标准配置模板但是每个redis服务器又需要个性设置的时候很有用。等同import导入
#
# include .\path\to\local.conf
# include c:\path\to\other.conf
# include /path/to/local.conf
# include /path/to/other.conf################################## NETWORK网络相关配置 ###################################### 默认情况bind127.0.0.1只允许来自bind指定网卡的Redis请求。如没有指定则可以接受来自任意一个网卡的Redis请求
# 生产环境肯定要写你应用服务器的地址服务器是需要远程访问的所以需要将其注释掉。
# 如果开启了protected-mode那么在没有设定bind ip且没有设密码的情况下Redis只允许接受本机的响应。
# 默认配置
# bind 127.0.0.1 -::1
bind 127.0.0.1# 默认是将本机访问保护模式设置yes若是没有设置密码还要允许其他电脑访问那么要设置其为no。
# 注保护模式是指当没有设置密码的时候只能通过本机访问设置了密码之后其他电脑也可以访问。
# 是否开启保护模式。如配置里没有指定bind和密码。开启该参数后redis只允许本地访问拒绝外部访问
# 要是开启了密码和bind可以开启。否则最好关闭设置为no。
protected-mode yes# Redis监听端口号默认为6379如果指定0端口表示Redis不监听TCP连接
# 默认6379端口号
port 6379# 设置tcp的backlogbacklog其实是一个连接队列backlog队列总和未完成三次握手队列 已经完成三次握手队列。
# 在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。
# 注意Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值128所以需要确认增大/proc/sys/net/core/somaxconn和/proc/sys/net/ipv4/tcp_max_syn_backlog128两个值来达到想要的效果
# 默认值
tcp-backlog 511# 配置unix socket来让redis支持监听本地连接。
# unixsocket /var/run/redis/redis.sock# 配置unix socket使用文件的权限
# unixsocketperm 700# 一个空闲的客户端维持多少秒会关闭0表示关闭该功能。即永不关闭
# 连接超时时间单位秒超过timeout服务端会断开连接为0则服务端不会主动断开连接不能小于0
# 默认值
timeout 0# tcp keepalive参数。对访问客户端的一种心跳检测每个n秒检测一次。
# 单位为秒如果设置为0则不会进行Keepalive检测建议设置成60。如果设置不为0就使用配置tcp的SO_KEEPALIVE值
# 使用keepalive有两个好处:
# 1) 检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。
# 2) 在Linux内核中设置了keepaliveredis会定时给对端发送ack。检测到对端关闭需两倍的设置值
tcp-keepalive 0################################# GENERAL通配 ###################################### 是否为后台进程默认为no若是想要后台运行要设置为yes守护进程后台启动。
# 是否在后台执行yes后台运行no不是后台运行老版本默认
# 默认情况下Redis不作为守护进程运行。如果你需要就说yes。
# 注意Redis会在/var/run/ Redis中写入一个pid文件。被daemon化时的Pid。
# 不支持WINDOWS daemonize
daemonize no# https://blog.51cto.com/u_16213298/7681021
# 这里额外提及到一个组件 - supervisor可以用于替换默认的守护进程可以了解一下
# 用于监听你的redis进程行为
# supervised no - 默认模式不搞这么多骚操作
# supervised upstart - 利用 upstart 来进行管理
# supervised systemd - 利用 systemd 来管理
# supervised auto - #based on UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal process is ready.
# They do not enable continuous liveness pings back to your supervisor.
# 不支持在 WINDOWS 使用 supervised no# 当Redis以上述守护进程方式运行时Redis默认会把进程文件写入/var/run/redis.pid文件
# NOT SUPPORTED ON WINDOWS pidfile /var/run/redis.pid
# 默认值
# pidfile /var/run/redis_6379.pid# 指定日志记录级别指定日志记录级别Redis总共支持四个级别debug、verbose、notice、warning默认为notice。
# 开发模式中使用debug可以看到更详细的信息。Verbose类似于java中的info
# 四个级别根据使用阶段来选择生产环境选择notice 或者warning
# 四个级别
# 1) debug很多信息方便开发、测试
# 2) verbose许多有用的信息但是没有debug级别信息多默认
# 3) notice适当的日志级别适合生产环境
# 4) warning只记录非常重要/关键的消息
# 默认值
loglevel notice# 日志文件名称。开发日志写到的路径默认为空。
# 指定日志文件记录的位置。logfile “”标准输出。则日志将会发送给/dev/null
# 默认值
logfile # 是否将日志输出到系统日志
# syslog-enabled no# syslog的标识符
# syslog-ident redis# 日志的来源、设备指定系统日志工具。必须是 USER 或介于 LOCAL0-LOCAL7 之间
# syslog-facility local0# 设定库的数量 默认16默认数据库为0可以使用SELECT dbid命令在连接上指定数据库id。可以修改数据库的数量。
databases 16########################### SNAPSHOTTING (快照方式) ###########################
# 持久化规则持久化方式RDB、AOF。持久化到文件。rdb .aof# 指定在多长时间内有多少次更新操作就将数据同步到数据文件可以多个条件配合
# 注释掉“save”这一行配置项就可以让保存数据库功能失效
# 900秒15分钟内至少1个key值改变则进行数据库保存--持久化
# 300秒5分钟内至少10个key值改变则进行数据库保存--持久化
# 60秒1分钟内至少10000个key值改变则进行数据库保存--持久化
# save
save 900 1
save 300 10
save 60 10000# 持久化错误时是否继续工作
# 当RDB持久化出现错误后是否依然进行继续进行工作yes不能进行工作no可以继续进行工作
# 可以通过info中的rdb_last_bgsave_status了解RDB持久化是否有错误
stop-writes-on-bgsave-error yes# 压缩.rdb文件需要消耗CPU资源
# 指定存储至本地数据库时是否压缩数据耗cpu资源默认为yesRedis采用LZF压缩
# 如果为了节省CPU时间可以关闭该选项但会导致数据库文件变的巨大
rdbcompression yes# 校验.rdb文件
# 保存rdb文件时是否进行错误检查校验。
# 从rdb格式的第五个版本开始在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的容错性
# 但是在保存rdb文件的时候会有大概10%的性能损耗如果你追求高性能可以关闭该配置。
rdbchecksum yes# 指定本地数据库文件名rdb文件的名称默认值为dump.rdb
dbfilename dump.rdb# 数据目录数据库的写入会在这个目录.rdb、.aof文件也会写在这个目录
# 指定本地数据库存放目录dump.rdb文件存放目录rdb、aof文件也会写在这个目录
# 注意这里只能指定一个目录不能指定文件名文件名由上一个dbfilename配置项指定
dir ./############################## APPEND ONLY MODE 附加模式################################ 默认不开启AOF
# AOF持久化指定是否在每次更新操作后进行日志记录默认redis是异步快照的把数据写入本地磁盘
# redis默认使用的是rdb方式持久化此方式在许多应用中已足够用。
# 但redis如果中途宕机会导致可能有几分钟的数据丢失按照上面save条件来策略进行持久化
# Append Only File是另一种持久化方式可提供更好的持久化特性。
# Redis会把每次写入的数据在接收后都写入appendonly.aof 文件
# 每次启动时Redis都会先把这个文件的数据读入内存里先忽略RDB文件。
appendonly no# 指定aof文件名默认文件名为appendonly.aof
appendfilename appendonly.aof# AOF持久化三种同步策略
# 1) no不同步不执行fsync数据不会持久化
# 2) always每次有数据发生变化时都会写入appendonly.aof慢安全
# 3) everysec每秒同步一次到appendonly.aof可能会导致丢失这1s数据折中选择默认值
#
# appendfsync always
appendfsync everysec
# appendfsync no# 重写规则
# 在AOF重写或写入rdb文件时会执行大量IO
# 对于everysec和always的AOF模式来说执行fsync会造成阻塞过长时间
# yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入
# 默认为no建议yes。Linux的默认fsync策略是30秒。可能丢失30秒数据。
no-appendfsync-on-rewrite no# AOF自动重写配置。当目前AOF文件大小超过上一次重写的aof文件大小的百分之多少进行重写
# 即当AOF文件增长到一定大小时Redis能调用bgrewriteaof对日志文件进行重写。
# 当前AOF文件大小是上次日志重写得到AOF文件大小的二倍设置为100时自动启动新的日志重写过程。
auto-aof-rewrite-percentage 100# 设置允许重写的最小AOF文件大小避免了达到约定百分比但尺寸仍然很小的情况还要重写
auto-aof-rewrite-min-size 64mb# aof文件可能在尾部是不完整的当redis启动的时候aof文件的数据被载入内存。
# 重启可能发生在redis所在的主机操作系统宕机后尤其在ext4文件系统没有加上dataordered选项redis宕机或者异常终止不会造成尾部不完整现象。出现这种现象可以选择让redis退出或者导入尽可能多的数据。
# 如果选择的是yes当截断的aof文件被导入的时候会自动发布一个log给客户端然后load。
# 如果是no用户必须手动redis-check-aof修复AOF文件才可以。
aof-load-truncated yes################################# REPLICATION主从复制 ################################## 主从复制。使用slaveof从 Redis服务器复制一个Redis实例。注意该配置仅限于当前slave有效
# 设置当本机为slav服务时设置master服务的ip地址及端口Redis启动时自动从master进行数据同步
# slaveof masterip masterport
slaveof 127.0.0.1 6379# 如master设置了requirepass密码slave用此选项指定master认证密码
# 下文的“requirepass”配置项可以指定密码
# masterauth master-password
masterauth 123456# 从库同主机失去连接或者复制正在进行从机库的两种运行方式
# 当slave与master之间的连接断开或slave正在与master进行数据同步时如果有slave请求
# 1) yesslave仍然响应请求此时可能有问题
# 2) noslave会返回SYNC with master in progress错误信息。但INFO和SLAVEOF命令除外。
slave-serve-stale-data yes# 作为从服务器默认情况下是只读的yes可以修改成NO用于写不建议。
slave-read-only yes# 是否使用socket方式复制数据。目前redis复制提供两种方式disk和socket。
# 如果新的slave连上来或者重连的slave无法部分同步就会执行全量同步master会生成rdb文件。
# 有2种方式
# 1) diskmaster创建一个新的进程把rdb文件保存到磁盘再把磁盘上的rdb文件传递给slave。
# 2) socketmaster创建一个新的进程直接把rdb文件以socket的方式发给slave。
# disk方式时当一个rdb保存的过程中多个slave都能共享这个rdb文件。
# socket方式就得一个个slave顺序复制。在磁盘速度缓慢网速快的情况下推荐用socket方式。
# 是否使用无盘同步RDB文件默认为nono为不使用无盘将rdb保存到磁盘再发给slave
repl-diskless-sync no# diskless复制的延迟时间防止设置为0。一旦复制开始
# 节点不会再接收新slave的复制请求直到下一个rdb传输。所以最好等待一段时间等更多的slave连上来
# Master准备好RDB文件后等等待传输时间
repl-diskless-sync-delay 5# slave根据指定的时间间隔向服务器发送ping请求。默认10秒。
# slave端向server端发送ping的时间区间设置默认为10秒
# repl-ping-slave-period 10# 复制连接超时时间。master和slave都有超时时间的设置。
# master检测到slave上次发送的时间超过repl-timeout即认为slave离线清除该slave信息。
# slave检测到上次和master交互的时间超过repl-timeout则认为master离线。
# 需注意repl-timeout需设置一个比repl-ping-slave-period更大的值不然会经常检测到超时。
# 设置超时时间
# repl-timeout 60# 是否禁止复制tcp链接的tcp nodelay参数默认是no即使用tcp nodelay。
# 如master设置了yes在把数据复制给slave时会减少包的数量和更小的网络带宽。
# 但这也可能带来数据的延迟。默认我们推荐更小的延迟但在数据量传输很大的场景下建议选择yes。
# #是否启用TCP_NODELAY如设置成yes则redis会合并小的TCP包从而节省带宽但会增加同步延迟40ms造成master与slave数据不一致假如设置成no则redis master会立即发送同步数据没有延迟前者关注性能后者关注redis服务中的数据一致性。
repl-disable-tcp-nodelay no# 复制缓冲区大小这是一个环形复制缓冲区用来保存最新复制的命令。
# 这样在slave离线时无需完全复制master的数据如果可以执行部分同步只需把缓冲区的部分数据复制# 给slave就能恢复正常复制状态。缓冲区的大小越大slave离线的时间可以更长复制缓冲区只有在有
# slave连接的时候才分配内存。没有slave的一段时间内存会被释放出来默认1m。
# master的写入数据缓冲区用于记录自上一次同步后到下一次同步过程中间的写入命令
# repl-backlog-size 5mb# master没有slave一段时间会释放复制缓冲区的内存repl-backlog-ttl设置该时间长度。单位为秒
# 如果一段时间后没有slave连接到master则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。
# repl-backlog-ttl 3600# 当master不可用Sentinel会根据slave的优先级选举一个master。
# 最低的优先级的slave当选master。而配置成0永远不会被选举。
# slave端的优先级设置值是一个整数数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复如果值设置为0则表示该slave永远不会被选择。
slave-priority 100# master停止写入的方式健康的slave的个数小于Nmater就禁止写入。master最少得有多少个健康的
# slave存活才能执行写命令。这个配置虽然不能保证N个slave都一定能接收到master的写操作
# 但能避免没有足够健康的slave时master不能写入来避免数据丢失。设置为0是关闭该功能。
# 设置一个master端的可用slave少于多少个
# min-slaves-to-write 3# 延迟小于min-slaves-max-lag 秒的slave才认为是健康的slave。
# 设置所有slave延迟时间都大于多少秒时master不接收写操作(拒绝写入)。
# min-slaves-max-lag 10################################## SECURITY安全 #################################### requirepass设置密码
# 访问密码的查看、设置和取消
# 配置redis连接认证密码永久设置需要再配置文件redis.conf中进行设置。
# 临时设置在命令中设置密码只是临时的。重启redis服务器密码就还原了。
# 如果配置了则客户端在连接Redis时需通过auth password命令提供密码默认关闭
# 注意因为redis太快了每秒可认证15w次密码简单的很容易被攻破最好使用一个更复杂的密码
# 默认值默认是注释掉的
# requirepass foobared# 把危险的命令给修改成其他名称。比如CONFIG命令可以重命名为一个很难被猜到的命令
# 这样用户不能使用而内部工具还能接着使用。
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52# 设置成一个空的值可以禁止一个命令
# rename-command CONFIG ################################### LIMITS限制 ##################################### maxclients最大连接数设置
# 设置redis同时可以与多少个客户端进行连接。
# 默认情况下为10000个客户端设置0表示不作限制。
# 如果达到了此限制redis则会拒绝新的连接请求并且向这些连接请求方发出“max number of clients reached”以作回应。
# 设置连上redis的最大客户端连接数量。默认10000。
# redis不区分连接是客户端连接还是内部打开文件或和slave连接等故maxclients最小建议设置到32
# maxclients 10000# If Redis is to be used as an in-memory-only cache without any kind of
# persistence, then the fork() mechanism used by the background AOF/RDB
# persistence is unnecessary. As an optimization, all persistence can be
# turned off in the Windows version of Redis. This will redirect heap
# allocations to the system heap allocator, and disable commands that would
# otherwise cause fork() operations: BGSAVE and BGREWRITEAOF.
# This flag may not be combined with any of the other flags that configure
# AOF and RDB operations.
# persistence-available [(yes)|no]# Dont use more memory than the specified amount of bytes.
# When the memory limit is reached Redis will try to remove keys
# according to the eviction policy selected (see maxmemory-policy).
#
# If Redis cant remove keys according to the policy, or if the policy is
# set to noeviction, Redis will start to reply with errors to commands
# that would use more memory, like SET, LPUSH, and so on, and will continue
# to reply to read-only commands like GET.
#
# This option is usually useful when using Redis as an LRU cache, or to set
# a hard memory limit for an instance (using the noeviction policy).
#
# WARNING: If you have slaves attached to an instance with maxmemory on,
# the size of the output buffers needed to feed the slaves are subtracted
# from the used memory count, so that network problems / resyncs will
# not trigger a loop where keys are evicted, and in turn the output
# buffer of slaves is full with DELs of keys evicted triggering the deletion
# of more keys, and so forth until the database is completely emptied.
#
# In short... if you have slaves attached it is suggested that you set a lower
# limit for maxmemory so that there is some free RAM on the system for slave
# output buffers (but this is not needed if the policy is noeviction).
#
# WARNING: not setting maxmemory will cause Redis to terminate with an
# out-of-memory exception if the heap limit is reached.
#
# NOTE: since Redis uses the system paging file to allocate the heap memory,
# the Working Set memory usage showed by the Windows Task Manager or by other
# tools such as ProcessExplorer will not always be accurate. For example, right
# after a background save of the RDB or the AOF files, the working set value
# may drop significantly. In order to check the correct amount of memory used
# by the redis-server to store the data, use the INFO client command. The INFO
# command shows only the memory used to store the redis data, not the extra
# memory used by the Windows process for its own requirements. Th3 extra amount
# of memory not reported by the INFO command can be calculated subtracting the
# Peak Working Set reported by the Windows Task Manager and the used_memory_peak
# reported by the INFO command.# maxmemory最大内存容量
# 建议必须设置否则将内存占满造成服务器宕机
# 设置redis可以使用的内存量。一旦到达内存使用上限redis将会试图移除内部数据移除规则可以通过maxmemory-policy来指定。
# 如果redis无法根据移除规则来移除内存中的数据或者设置了“不允许移除”那么redis则会针对那些需要申请内存的指令返回错误信息比如SET、LPUSH等。
# 但是对于无内存申请的指令仍然会正常响应比如GET等。如果你的redis是主redis说明你的redis有从redis那么在设置内存使用上限时需要在系统中留出一些内存空间给同步队列缓存只有在你设置的是“不移除”的情况下才不用考虑这个因素。
# 当maxmemory-policy处理后仍然到达最大内存设置将无法再进行写入操作但仍然可以进行读取操作。
# 默认值,是被注释掉的
# maxmemory bytes# maxmemory-policy最大内存时策略
# 内存容量超过maxmemory后的处理策略如下几种策略
# 1) volatile-lru只使用LRU算法移除key只对设置了过期时间的键最近最少使用默认
# 2) allkeys-lru在所有集合key中使用LRU算法移除key
# 3) volatile-random在过期集合中移除随机的key只对设置了过期时间的键
# 4) allkeys-random在所有集合key中移除随机的key
# 5) volatile-ttl移除那些TTL值最小的key即那些最近要过期的key
# 6) noeviction不进行移除。针对写操作只是返回错误信息
# 默认值,是被注释掉的
# maxmemory-policy noeviction# maxmemory-samples最大内存样本数量
# 设置样本数量LRU算法和最小TTL算法都并非是精确的算法而是估算值所以你可以设置样本的大小redis默认会检查这么多个key并选择其中LRU的那个。
# 一般设置3到7的数字数值越小样本越不准确但性能消耗越小。
# 默认值,是被注释掉的
# maxmemory-samples 5
# maxmemory-samples 3################################ LUA SCRIPTING LUA 脚本 ################################ 如果达到最大时间限制毫秒redis会记个log然后返回error。当一个脚本超过了最大时限。
# 只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一个可以杀没有调write命令的东西。
# 要是已经调用了write只能用第二个命令杀。
lua-time-limit 5000################################ REDIS CLUSTER Redis集群 ################################ 集群开关默认是不开启集群模式。
# cluster-enabled yes# 集群配置文件的名称每个节点都有一个集群相关的配置文件持久化保存集群的信息。
# 这个文件无需手动配置这个配置文件有Redis生成并更新每个Redis集群节点需要一个单独的配置文件
# 请确保与实例运行的系统中配置文件名称不冲突
# cluster-config-file nodes-6379.conf# 节点互连超时的阀值。集群节点超时毫秒数
# cluster-node-timeout 15000# 在进行故障转移时全部slave会请求申请为master有些slave可能与master断开连接一段时间了
# 导致数据过于陈旧这种slave不该提升为master。该参数判断slave与master断线的时间是否过长。
# 判断方法是比较slave断开连接的时间和
# (node-timeout * slave-validity-factor) repl-ping-slave-period
# 如果节点超时时间为三十秒, 并且slave-validity-factor为10
# 假设默认的repl-ping-slave-period是10秒即如果超过310秒slave将不会尝试进行故障转移
# cluster-slave-validity-factor 10# master的slave数量大于该值slave才能迁移到其他孤立master上如这个参数若被设为2
# 那么只有当一个主节点拥有2 个可工作的从节点时它的一个从节点会尝试迁移。
# cluster-migration-barrier 1# 默认情况下集群全部的slot有节点负责集群状态才为ok才能提供服务。
# 设置为no可以在slot没有全部分配的时候提供服务。
# 不建议打开该配置这样会造成分区时小分区的master一直在接受写请求而造成很长时间数据不一致。
# cluster-require-full-coverage yes# In order to setup your cluster make sure to read the documentation
# available at http://redis.io web site.################################## SLOW LOG 慢日志 #################################### slog log是用来记录redis运行中执行比较慢的命令耗时。
# 当命令的执行超过了指定时间就记录在slow log中slog log保存在内存中所以没有IO操作。
# 执行时间比slowlog-log-slower-than大的请求记录到slowlog里面单位是微秒
# 所以1000000就是1秒。注意负数时间会禁用慢查询日志而0则会强制记录所有命令。
slowlog-log-slower-than 10000# 慢查询日志长度。当一个新的命令被写进日志时最老的那个记录会被删掉。
# 这个长度没有限制。只要有足够的内存就行。你可以通过 SLOWLOG RESET 来释放内存。
slowlog-max-len 1024############################ VIRTUAL MEMORY 虚拟内存 ############################ 指定是否启用虚拟内存机制默认no
# VM机制将数据分页存放由Redis将访问量较少的页即冷数据swap到磁盘上内存占用多最好关闭
# 访问多的页面由磁盘自动换出到内存中
vm-enabled no# 虚拟内存文件位置默认值为/tmp/redis.swap不可多个Redis实例共享
# Redis交换文件最好的存储是SSD固态硬盘
vm-swap-file /tmp/redis.swap# redis使用的最大内存上限保护redis不会因过多使用物理内存影响性能
# 将大于vm-max-memory的数据存入虚拟内存但无论设置多少所有索引数据都是内存存储的即keys
# 当vm-max-memory设置为0时所有value都存在于磁盘。默认值为0
vm-max-memory 0# Redis swap文件分成了很多的page一个对象可以保存在多个page上面
# 但一个page上不能被多个对象共享vm-page-size是要根据存储的数据大小来设定的。
# 建议
# 如果存储很多小对象page大小设置为32或64字节
# 如果存储很大的对象则可以使用更大的page如果不确定就使用默认值
# 每个页面的大小设置为32字节
vm-page-size 32# 设置swap文件中页面数量
# 由于页表一种表示页面空闲或使用的bitmap是存放在内存中的在磁盘上每8个页将消耗1byte的内存
# swap空间总容量为 vm-page-size * vm-pages
vm-pages 134217728# 设置访问swap文件的线程数最后不要超过机器的核数
# 如果设置为0那么所有对swap文件的操作都是串行的可能会造成比较长时间的延迟默认值为4
vm-max-threads 4################################ LATENCY MONITOR ############################### 启用 redis 延迟监控
# 单位毫秒100表示一百毫秒。如果将 latency-monitor-threshold 的值设置为 0则表示关闭延迟监控。
# 默认情况下延迟监视是禁用的因为大多数情况下不需要它。
# 如果您没有延迟问题并且收集数据会影响性能冲击虽然很小但可以在大负荷下测量。延迟
# 可以使用该命令轻松地在运行时启用监视
latency-monitor-threshold 0############################# EVENT NOTIFICATION ############################### “notify-keyspace-events”将一个组合字符串作为参数零个或多个字符的。空字符串表示通知是禁用的。
# 通过对notify-keyspace-events参数修改可以指定服务器发送哪种类型的通知。
# 下面对于一些参数的描述。默认情况下此功能是关闭的。
# K 键空间通知所有通知以 keyspace 为前缀
# E 键事件通知所有通知以 keyevent 为前缀
# g DEL、EXPIRE、RENAME 等类型无关的通用命令的通知
# $ 字符串命令的通知
# l 列表命令的通知
# s 集合命令的通知
# h 哈希命令的通知
# z 有序集合命令的通知
# x 过期事件每当有过期键被删除时发送
# e 驱逐(evict)事件每当有键因为 maxmemory 政策而被删除时发送
# A 参数 g$lshzxe 的别名
#
# 例1: 要启用列表和通用事件使用notify-keyspace-events Elg
# 例2: 获取订阅通道的过期密钥流 __keyevent0__:expired notify-keyspace-events Ex
#
# 默认情况下所有通知都是禁用的因为大多数用户不需要这个特性和这个特性有一些开销。
# 请注意如果没有指定K或E中的至少一个则不传递任何事件。
notify-keyspace-events ############################### ADVANCED CONFIG 高级配置################################ 哈希表中元素条目总个数512个采用ziplist否则使用hash
hash-max-ziplist-entries 512# 哈希表中每个value的长度64字节时采用ziplist否则使用hash
hash-max-ziplist-value 64# list元素512个采用ziplist否则用linkedlist
list-max-ziplist-size -2# list内某个元素大小64字节时采用ziplist否则用linkedlist
list-compress-depth 0# set内元素数量512个且都是整数型值采用inset否则使用hashtable
set-max-intset-entries 512# zset内元素数量128个采用ziplist否则用skiplist跳表
zset-max-ziplist-entries 128# zset内某个元素大小64字节时采用ziplist否则用skiplist跳表
zset-max-ziplist-value 64# value大小 hll-sparse-max-bytes使用稀疏数据结构sparse
# value大小 hll-sparse-max-bytes使用稠密的数据结构dense。
# 一个比16000大的value是几乎没用的建议的value大概为3000。
# 如果对CPU要求不高对空间要求较高的建议设置到10000左右。
hll-sparse-max-bytes 3000# Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash可以降低内存的使用。
# 当你的使用场景中有非常严格的实时性需要不能够接受Redis时不时的对请求有2毫秒的延迟的话
# 把这项配置为no。如果没有这么严格的实时性要求可以设置为yes以便能够尽可能快的释放内存。
# 指定是否激活重置哈希默认为开启
activerehashing yes# 对客户端输出缓冲进行限制,可以强迫那些不从服务器读取数据的客户端断开连接
# 用来强制关闭传输缓慢的客户端。
# 对于normal client第一个0表示取消hard limit第二个0和第三个0表示取消soft limit
# normal client默认取消限制因为如果没有寻问他们是不会接收数据的。
client-output-buffer-limit normal 0 0 0# 对于slave client和 MONITER client如果client-output-buffer一旦超过256mb
# 又或者超过64mb持续60秒那么服务器就会立即断开客户端连接。
client-output-buffer-limit slave 256mb 64mb 60# 对于pubsub client如果client-output-buffer一旦超过32mb又或者超过8mb持续60秒
# 那么服务器就会立即断开客户端连接。
client-output-buffer-limit pubsub 32mb 8mb 60# redis执行任务的频率为1s除以hz。
hz 10# 在AOF重写时如果打开了aof-rewrite-incremental-fsync开关系统会每32MB执行一次fsync。
# 这对于把文件写入磁盘是有帮助的可以避免过大的延迟峰值。
aof-rewrite-incremental-fsync yes第二步启动三台redis服务器
redis-server redis.windows-6379.confredis-server redis.windows-6380.conf
redis-server redis.windows-6381.conf
第三步配置从库不配置主库 先连接上redis客户端
redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381
然后将6380和6381机器配置成从机#slaveof 主机ip 主机端口号 在主机查看从机信息发现配置成功。 六、配置redis三哨兵
新建sentinel.conf文件复制为三份分别为
1、sentinel-26379.conf
# 配置地址及端口
port 26379# 配置地址
bind 127.0.0.1# 所有哨兵监听的都是主服务器当前主服务器是 6379所以就监控 6379
# 将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 只要同意 Sentinel的数量不达标自动故障迁移就不会执行
sentinel monitor mymaster 127.0.0.1 6379 2# 3s内mymaster无响应则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 3000# 如果10秒后,mysater仍没启动过来则启动failover
sentinel failover-timeout mymaster 10000# 执行故障转移时最多有1个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1
2、sentinel-26380.conf
# 配置地址及端口
port 26380# 配置地址
bind 127.0.0.1# 所有哨兵监听的都是主服务器当前主服务器是 6379所以就监控 6379
# 将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 只要同意 Sentinel的数量不达标自动故障迁移就不会执行
sentinel monitor mymaster 127.0.0.1 6379 2# 3s内mymaster无响应则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 3000# 如果10秒后,mysater仍没启动过来则启动failover
sentinel failover-timeout mymaster 10000# 执行故障转移时最多有1个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1
3、sentinel-26381.conf
# 配置地址及端口
port 26381# 配置地址
bind 127.0.0.1# 所有哨兵监听的都是主服务器当前主服务器是 6379所以就监控 6379
# 将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 只要同意 Sentinel的数量不达标自动故障迁移就不会执行
sentinel monitor mymaster 127.0.0.1 6379 2# 3s内mymaster无响应则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 3000# 如果10秒后,mysater仍没启动过来则启动failover
sentinel failover-timeout mymaster 10000# 执行故障转移时最多有1个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1
4、sentinel.conf配置文件详解 哨兵的配置主要就是修改sentinel.conf配置文件中的参数在Redis安装目录即可看到此配置文件各参数详解
# Example sentinel.conf# 绑定IP地址
bind 127.0.0.1 192.168.1.1# 默认情况下Redis Sentinel不作为守护程序运行。 如果需要可以设置为 yes。
daemonize no# 保护模式是否禁止外部链接除绑定的ip地址外
# protected-mode no# 启用守护进程运行后Redis将在/var/run/redis-sentinel.pid中写入一个pid文件
pidfile /var/run/redis-sentinel.pid# 指定日志文件名。 如果值为空将强制Sentinel日志标准输出。守护进程下如果使用标准输出进行日志记录则日志将发送到/dev/null
logfile # 哨兵sentinel实例运行的端口 默认26379
port 26379# 哨兵sentinel的工作目录
dir /tmp# sentinel announce-ip ip
# sentinel announce-port port
#
# 上述两个配置指令在环境中非常有用因为NAT可以通过非本地地址从外部访问Sentinel。
# 当提供announce-ip时Sentinel将在通信中声明指定的IP地址而不是像通常那样自动检测本地地址。
# 类似地当提供announce-port 有效且非零时Sentinel将宣布指定的TCP端口。
# 这两个选项不需要一起使用如果只提供announce-ipSentinel将宣告指定的IP和“port”选项指定的服务器端口。
# 如果仅提供announce-portSentinel将通告自动检测到的本地IP和指定端口。
# Example:
# sentinel announce-ip 1.2.3.4# 哨兵sentinel监控的redis主节点的 ip port
# master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符.-_组成。
# quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
# sentinel monitor master-name ip redis-port quorum
sentinel monitor mymaster 127.0.0.1 6379 2# 当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
# sentinel auth-pass master-name password
sentinel auth-pass mymaster 123456# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
# sentinel down-after-milliseconds master-name milliseconds
sentinel down-after-milliseconds mymaster 30000# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步
# 这个数字越小完成failover所需的时间就越长
# 但是如果这个数字越大就意味着越 多的slave因为replication而不可用。
# 可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
# sentinel parallel-syncs master-name numslaves
sentinel parallel-syncs mymaster 1# 故障转移的超时时间 failover-timeout 可以用在以下这些方面
# 1. 同一个sentinel对同一个master两次failover之间的间隔时间。
# 2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
# 3.当想要取消一个正在进行的failover所需要的时间。
# 4.当进行failover时配置所有slaves指向新的master所需的最大时间。不过即使过了这个超时slaves依然会被正确配置为指向master但是就不按parallel-syncs所配置的规则来了
# 默认三分钟
# sentinel failover-timeout master-name milliseconds
sentinel failover-timeout mymaster 180000# SCRIPTS EXECUTION# 配置当某一事件发生时所需要执行的脚本可以通过脚本来通知管理员例如当系统运行不正常时发邮件通知相关人员。
# 对于脚本的运行结果有以下规则
# 若脚本执行后返回1那么该脚本稍后将会被再次执行重复次数目前默认为10
# 若脚本执行后返回2或者比2更高的一个返回值脚本将不会重复执行。
# 如果脚本在执行过程中由于收到系统中断信号被终止了则同返回值为1时的行为相同。
# 一个脚本的最大执行时间为60s如果超过这个时间脚本将会被一个SIGKILL信号终止之后重新执行。# 通知型脚本:当sentinel有任何警告级别的事件发生时比如说redis实例的主观失效和客观失效等等将会去调用这个脚本
# 这时这个脚本应该通过邮件SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时将传给脚本两个参数
# 一个是事件的类型
# 一个是事件的描述。
# 如果sentinel.conf配置文件中配置了这个脚本路径那么必须保证这个脚本存在于这个路径并且是可执行的否则sentinel无法正常启动成功。
# 通知脚本
# sentinel notification-script master-name script-path
sentinel notification-script mymaster /var/redis/notify.sh# 客户端重新配置主节点参数脚本
# 当一个master由于failover而发生改变时这个脚本将会被调用通知相关的客户端关于master地址已经发生改变的信息。
# 以下参数将会在调用脚本时传给脚本:
# master-name role state from-ip from-port to-ip to-port
# 目前state总是“failover”,
# role是“leader”或者“observer”中的一个。
# 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的
# 这个脚本应该是通用的能被多次调用不是针对性的。
# sentinel client-reconfig-script master-name script-path
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh# 安全
# 避免脚本重置默认值yes
# 默认情况下SENTINEL SET将无法在运行时更改notification-script和client-reconfig-script。
# 这避免了一个简单的安全问题客户端可以将脚本设置为任何内容并触发故障转移以便执行程序。
sentinel deny-scripts-reconfig yes# REDIS命令重命名
# 在这种情况下可以告诉Sentinel使用不同的命令名称而不是正常的命令名称。
# 例如如果主“mymaster”和相关副本的“CONFIG”全部重命名为“GUESSME”我可以使用
# SENTINEL rename-command mymaster CONFIG GUESSME
# 设置此类配置后每次Sentinel使用CONFIG时它将使用GUESSME。 请注意实际上不需要尊重命令案例因此在上面的示例中写“config guessme”是相同的。
# SENTINEL SET也可用于在运行时执行此配置。
# 为了将命令设置回其原始名称撤消重命名可以将命令重命名为它自身
# SENTINEL rename-command mymaster CONFIG CONFIG
最后是先启动三个服务然后启动三个哨兵然后客户端启动哨兵
redis-server.exe sentinel-26379.conf --sentinel
redis-server.exe sentinel-26380.conf --sentinel
redis-server.exe sentinel-26381.conf --sentinel
启动后查看sentinel信息redis-cli -p sentinel的端口号
redis-cli -p 26379
info sentinel 发现有两个从机三个哨兵节点OK了。
七、redis哨兵测试
1、准备测试
启动 Redis 服务命令redis-server.exe redis.windows.conf
启动哨兵服务命令redis-server.exe sentinel.conf --sentinel 我们主服务是 6379 端口可以通过 redisDisktopManager 工具执行 info replication 命令查看实例信息明显能看到role 角色为 master有两个 slave如下 2、关闭 6379 主服务观察 sentinel 服务的信息变化
主机sentinel-26379.conf效果如图 从机sentinel-26380.conf效果如图 从机sentinel-26381.conf效果如图 有sentinel.config的日志可以看出主机6379挂掉后重新选举出的主机为6380的机器也可以通过 info replication 命令查看对应服务的信息 3、重启6379服务查看三个服务的信息
注意redis.config配置文件中的配置slaveof和masterauth的位置可能会出现master节点上查不到对应的从节点信息我的解决办法是调整这两个配置的位置和顺序然后再次重启 上面可以看出 6379 变为了从服务master 信息指向 63806381 依然为从服务6380 依然为主服务。
4. 关闭 6380 主服务
再把 6380 服务关掉6379 又变回主服务6380 的 master 信息重新指向 6379如下信息 5. 重启 6380 服务
注意redis.config配置文件中的配置slaveof和masterauth的位置可能会出现master节点上查不到对应的从节点信息我的解决办法是调整这两个配置的位置和顺序然后再次重启
再把 6380 服务开启master 信息重新指向 6379如下信息 八、总结
redis 哨兵模式非常大程度保证了服务的高可用只要还有一个 Redis 实例能够正常运行都能保证业务请求的可用性是一种非常优秀的防灾思想。 文章转载自: http://www.morning.myzfz.com.gov.cn.myzfz.com http://www.morning.tkxyx.cn.gov.cn.tkxyx.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.lmcrc.cn.gov.cn.lmcrc.cn http://www.morning.ckwrn.cn.gov.cn.ckwrn.cn http://www.morning.wmdqc.com.gov.cn.wmdqc.com http://www.morning.dfqmy.cn.gov.cn.dfqmy.cn http://www.morning.xnymt.cn.gov.cn.xnymt.cn http://www.morning.qzpqp.cn.gov.cn.qzpqp.cn http://www.morning.mhcft.cn.gov.cn.mhcft.cn http://www.morning.tfwg.cn.gov.cn.tfwg.cn http://www.morning.gpmrj.cn.gov.cn.gpmrj.cn http://www.morning.xrwsg.cn.gov.cn.xrwsg.cn http://www.morning.slfmp.cn.gov.cn.slfmp.cn http://www.morning.slqzb.cn.gov.cn.slqzb.cn http://www.morning.jgmlb.cn.gov.cn.jgmlb.cn http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn http://www.morning.cwtrl.cn.gov.cn.cwtrl.cn http://www.morning.wqbrg.cn.gov.cn.wqbrg.cn http://www.morning.qhrlb.cn.gov.cn.qhrlb.cn http://www.morning.nmngg.cn.gov.cn.nmngg.cn http://www.morning.nqwz.cn.gov.cn.nqwz.cn http://www.morning.hwljx.cn.gov.cn.hwljx.cn http://www.morning.smyxl.cn.gov.cn.smyxl.cn http://www.morning.mpszk.cn.gov.cn.mpszk.cn http://www.morning.plhhd.cn.gov.cn.plhhd.cn http://www.morning.krywy.cn.gov.cn.krywy.cn http://www.morning.lnrr.cn.gov.cn.lnrr.cn http://www.morning.gpnfg.cn.gov.cn.gpnfg.cn http://www.morning.jhwwr.cn.gov.cn.jhwwr.cn http://www.morning.gynls.cn.gov.cn.gynls.cn http://www.morning.grjh.cn.gov.cn.grjh.cn http://www.morning.mjyrg.cn.gov.cn.mjyrg.cn http://www.morning.ychrn.cn.gov.cn.ychrn.cn http://www.morning.yxwrr.cn.gov.cn.yxwrr.cn http://www.morning.dnhdp.cn.gov.cn.dnhdp.cn http://www.morning.btpll.cn.gov.cn.btpll.cn http://www.morning.gyqnp.cn.gov.cn.gyqnp.cn http://www.morning.hmjasw.com.gov.cn.hmjasw.com http://www.morning.fkwp.cn.gov.cn.fkwp.cn http://www.morning.tjqcfw.cn.gov.cn.tjqcfw.cn http://www.morning.npxht.cn.gov.cn.npxht.cn http://www.morning.nhgfz.cn.gov.cn.nhgfz.cn http://www.morning.kycxb.cn.gov.cn.kycxb.cn http://www.morning.mbfj.cn.gov.cn.mbfj.cn http://www.morning.wcqxj.cn.gov.cn.wcqxj.cn http://www.morning.djpps.cn.gov.cn.djpps.cn http://www.morning.zgqysw.cn.gov.cn.zgqysw.cn http://www.morning.bdgb.cn.gov.cn.bdgb.cn http://www.morning.jmlgk.cn.gov.cn.jmlgk.cn http://www.morning.yxkyl.cn.gov.cn.yxkyl.cn http://www.morning.fxzw.cn.gov.cn.fxzw.cn http://www.morning.kjtdy.cn.gov.cn.kjtdy.cn http://www.morning.lthgy.cn.gov.cn.lthgy.cn http://www.morning.qlck.cn.gov.cn.qlck.cn http://www.morning.ljhnn.cn.gov.cn.ljhnn.cn http://www.morning.ypdhl.cn.gov.cn.ypdhl.cn http://www.morning.mjqms.cn.gov.cn.mjqms.cn http://www.morning.pszw.cn.gov.cn.pszw.cn http://www.morning.mhcft.cn.gov.cn.mhcft.cn http://www.morning.tpnxj.cn.gov.cn.tpnxj.cn http://www.morning.rnmyw.cn.gov.cn.rnmyw.cn http://www.morning.rklgm.cn.gov.cn.rklgm.cn http://www.morning.jxdhc.cn.gov.cn.jxdhc.cn http://www.morning.kflpf.cn.gov.cn.kflpf.cn http://www.morning.lyldhg.cn.gov.cn.lyldhg.cn http://www.morning.cpmfp.cn.gov.cn.cpmfp.cn http://www.morning.cjmmn.cn.gov.cn.cjmmn.cn http://www.morning.rjyd.cn.gov.cn.rjyd.cn http://www.morning.drwpn.cn.gov.cn.drwpn.cn http://www.morning.kcnjz.cn.gov.cn.kcnjz.cn http://www.morning.wpydf.cn.gov.cn.wpydf.cn http://www.morning.mhcft.cn.gov.cn.mhcft.cn http://www.morning.zrnph.cn.gov.cn.zrnph.cn http://www.morning.pmtky.cn.gov.cn.pmtky.cn http://www.morning.jrqbr.cn.gov.cn.jrqbr.cn http://www.morning.bnbtp.cn.gov.cn.bnbtp.cn http://www.morning.qflwp.cn.gov.cn.qflwp.cn http://www.morning.dxhdn.cn.gov.cn.dxhdn.cn http://www.morning.rglzy.cn.gov.cn.rglzy.cn