Redis Sentinel安装部署与常用操作

来源:互联网 发布:suse yum配置 编辑:程序博客网 时间:2024/05/01 08:29

Redis Sentinel安装部署与常用操作

1. 部署主机情况

这里写图片描述

2. 下载安装

分别在几台服务器上安装Redis,安装之前请确保Redis安装依赖都已经安装:gcc,make, tcl, jemalloc
安装目录:/usr/local/redis/

cd /usr/local/wget http://download.redis.io/releases/redis-3.2.6.tar.gztar -zxvf redis-3.2.6.tar.gzmv redis-3.2.6 rediscd redismake && make install

新建working directory,把需要用到的文件拷贝过去

cd /homemkdir redismkdir redis/logsmkdir redis/datamv /usr/local/bin/redis-* /home/redis/

3. 定制化配置文件

目前已经将配置好的配置文件拷贝到相应的主机目录上,配置文件有以下:
redis-6379.conf

############ GENERAL ################daemonize yespidfile "./logs/redis-6379.pid"port 6379tcp-backlog 511bind 0.0.0.0timeout 0tcp-keepalive 60loglevel noticelogfile "./logs/redis-6379.log"databases 16############ SNAPSHOTTING #################save 900 1#save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename "dump-6379.rdb"dir "/home/redis/data"############ REPLICATION ################masterauth "abcdefg"slave-serve-stale-data yesslave-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay norepl-backlog-size 64mbslave-priority 100# min-slaves-to-write 3# min-slaves-max-lag 10############ SECURITY ################requirepass "abcdefg"############ LIMITS ################# maxclients 10000maxmemory 4gbmaxmemory-policy noeviction############ APPEND ONLY MODE ################appendonly yesappendfilename "appendonly-6379.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 80auto-aof-rewrite-min-size 128mbaof-load-truncated yes############ LUA SCRIPTING ################lua-time-limit 5000############ REDIS CLUSTER ################# cluster-enabled yes# cluster-node-timeout 15000# cluster-slave-validity-factor 10# cluster-migration-barrier 1# cluster-require-full-coverage yes############ SLOW LOG ################slowlog-log-slower-than 10000slowlog-max-len 128############ LATENCY MONITOR ################latency-monitor-threshold 0############ EVENT NOTIFICATION ################notify-keyspace-events ""############ ADVANCED CONFIG ################hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-entries 512list-max-ziplist-value 64set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 512mb 128mb 120client-output-buffer-limit pubsub 32mb 8mb 60hz 10aof-rewrite-incremental-fsync yes# Generated by CONFIG REWRITE

4. 主从配置

从节点的配置文件基本一致,只需要在redis配置文件上添加上slaveof MASTER_IP PORT

# 设置当本机为slave服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步slaveof 127.0.0.1 6379# 当master服务设置了密码保护时,slave需要设置服务连接master的密码masterauth abcdefg

5. 启动Redis实例

通过以下命令分别把Redis实例启动,启动顺序,先启动主节点,然后再启动从节点实例

cd /home/redis/./redis-server ./redis-6379.conf &

启动完一个redis实例记得先查看一下日志输出,看是否正常启动完成。如果是从节点实例启动会与主节点进行同步数据,同步成功会在日志后面有以下输出:

5190:S 17 Dec 14:42:53.957 * Connecting to MASTER 172.16.0.46:63795190:S 17 Dec 14:42:53.957 * MASTER <-> SLAVE sync started5190:S 17 Dec 14:42:53.958 * Non blocking connect for SYNC fired the event.5190:S 17 Dec 14:42:53.958 * Master replied to PING, replication can continue...5190:S 17 Dec 14:42:53.959 * Partial resynchronization not possible (no cached master)5190:S 17 Dec 14:42:53.989 * Full resync from master: 5e126b4a8e9d7cd9ee7c50ffedeba6a95e1ae523:15190:S 17 Dec 14:42:54.060 * MASTER <-> SLAVE sync: receiving 18 bytes from master5190:S 17 Dec 14:42:54.061 * MASTER <-> SLAVE sync: Flushing old data5190:S 17 Dec 14:42:54.061 * MASTER <-> SLAVE sync: Loading DB in memory5190:S 17 Dec 14:42:54.061 * MASTER <-> SLAVE sync: Finished with success

6. 哨兵配置

首先分别在多台机器上redis目录中建立sentinel目录

cd /home/redis/mkdir sentinel

然后分别在机器上建立sentinel.conf文件如下:

port 26371dir /tmplogfile "/home/redis/sentinel/sentinel.log"protected-mode nosentinel monitor x_master 172.16.6.6 6379 2sentinel auth-pass x_master abcdefgsentinel down-after-milliseconds x_master 15000sentinel failover-timeout x_master 180000sentinel parallel-syncs x_master 1

同样启动完一个sentinel实例记得先查看一下日志输出,看是否正常启动完成。
日志输出需要注意以下几点:
哨兵会对检测信息进行输出,判断master是否下线,有主观下线和客观下线之分:
1. 主观下线(Subjectively Down,简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。
2. 客观下线(Objectively Down,简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的服务器下线判断。
客观下线条件只适用于主服务器:对于任何其他类型的 Redis 实例,Sentinel 在将它们判断为下线前不需要进行协商, 所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。只要一个 Sentinel 发现某个主服务器进入了客观下线状态,这个Sentinel 就可能会被其他 Sentinel 推选出,并对失效的主服务器执行自动故障迁移操作。

7. Redis常用操作

7.1 登录与退出客户端

进入到想要查看的主机,通过以下命令指定登录哪个实例端口

cd /home/redis/./redis-cli –p 6379> auth abcdefg
> quit # 退出连接

7.2 停止Redis服务

方法一:登录客户端,执行shutdown,生产环境慎用。

> shutdown

方法二:直接kill掉相应的实例进程。

7.3 监控Redis请求执行信息

登录客户端后执行:执行monitor,生产环境慎用。

> monitor

7.4 查看Redis统计信息

登录客户端后执行:执行info

> info

信息如下:

# Serverredis_version:3.2.6 ###redis版本号redis_git_sha1:00000000 ###git SHA1redis_git_dirty:0 ###git dirty flagredis_build_id:78796c63e58b72dcredis_mode:standalone ###redis运行模式os:Linux 2.6.32-431.el6.x86_64 x86_64 ###os版本号arch_bits:64 ###64位架构multiplexing_api:epoll ###调用epoll算法gcc_version:4.4.7 ###gcc版本号process_id:25899 ###服务器进程PIDrun_id:eae356ac1098c13b68f2b00fd7e1c9f93b1c6a2c ###Redis的随机标识符(用于sentinel和集群)tcp_port:6379 ###Redis监听的端口号uptime_in_seconds:6419 ###Redis运行时长(s为单位)uptime_in_days:0 ###Redis运行时长(天为单位)hz:10lru_clock:10737922 ###以分钟为单位的自增时钟,用于LRU管理config_file:/etc/redis/redis.conf ###redis配置文件# Clientsconnected_clients:1 ###已连接客户端的数量(不包括通过从属服务器连接的客户端)client_longest_output_list:0 ###当前连接的客户端中最长的输出列表client_biggest_input_buf:0 ###当前连接的客户端中最大的输出缓存blocked_clients:0 ###正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量 需监控# Memoryused_memory:2281560 ###由 Redis 分配器分配的内存总量,以字节(byte)为单位used_memory_human:2.18M ###以更友好的格式输出redis占用的内存used_memory_rss:2699264 ###从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top,ps 等命令的输出一致used_memory_peak:22141272 ### Redis 的内存消耗峰值(以字节为单位)used_memory_peak_human:21.12M ###以更友好的格式输出redis峰值内存占用used_memory_lua:35840 ###LUA引擎所使用的内存大小mem_fragmentation_ratio:1.18 ###used_memory_rss 和 used_memory 之间的比率mem_allocator:jemalloc-3.6.0###在理想情况下, used_memory_rss 的值应该只比 used_memory 稍微高一点儿。当 rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。内存碎片的比率可以通过 mem_fragmentation_ratio 的值看出。当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。# Persistenceloading:0 ###记录服务器是否正在载入持久化文件rdb_changes_since_last_save:0 ###距离最近一次成功创建持久化文件之后,经过了多少秒rdb_bgsave_in_progress:0 ###记录了服务器是否正在创建 RDB 文件rdb_last_save_time:1420023749 ###最近一次成功创建 RDB 文件的 UNIX 时间戳rdb_last_bgsave_status:ok ###最近一次创建 RDB 文件的结果是成功还是失败rdb_last_bgsave_time_sec:0 ###最近一次创建 RDB 文件耗费的秒数rdb_current_bgsave_time_sec:-1 ###如果服务器正在创建 RDB 文件,那么这个域记录的就是当前的创建操作已经耗费的秒数aof_enabled:1 ###AOF 是否处于打开状态aof_rewrite_in_progress:0 ###服务器是否正在创建 AOF 文件aof_rewrite_scheduled:0 ###RDB 文件创建完毕之后,是否需要执行预约的 AOF 重写操作aof_last_rewrite_time_sec:-1 ###最近一次创建 AOF 文件耗费的时长aof_current_rewrite_time_sec:-1 ###如果服务器正在创建 AOF 文件,那么这个域记录的就是当前的创建操作已经耗费的秒数aof_last_bgrewrite_status:ok ###最近一次创建 AOF 文件的结果是成功还是失败aof_last_write_status:okaof_current_size:176265 ###AOF 文件目前的大小aof_base_size:176265 ###服务器启动时或者 AOF 重写最近一次执行之后,AOF 文件的大小aof_pending_rewrite:0 ###是否有 AOF 重写操作在等待 RDB 文件创建完毕之后执行aof_buffer_length:0 ###AOF 缓冲区的大小aof_rewrite_buffer_length:0 ###AOF 重写缓冲区的大小aof_pending_bio_fsync:0 ###后台 I/O 队列里面,等待执行的 fsync 调用数量aof_delayed_fsync:0 ###被延迟的 fsync 调用数量# Statstotal_connections_received:8466 ###服务器已接受的连接请求数量total_commands_processed:900668 ###服务器已执行的命令数量instantaneous_ops_per_sec:1 ###服务器每秒钟执行的命令数量total_net_input_bytes:82724170total_net_output_bytes:39509080instantaneous_input_kbps:0.07instantaneous_output_kbps:0.02rejected_connections:0 ###因为最大客户端数量限制而被拒绝的连接请求数量sync_full:2sync_partial_ok:0sync_partial_err:0expired_keys:0 ###因为过期而被自动删除的数据库键数量evicted_keys:0 ###因为最大内存容量限制而被驱逐(evict)的键数量。keyspace_hits:0 ###查找数据库键成功的次数。keyspace_misses:500000 ###查找数据库键失败的次数。pubsub_channels:0 ###目前被订阅的频道数量pubsub_patterns:0 ###目前被订阅的模式数量latest_fork_usec:402 ###最近一次 fork() 操作耗费的毫秒数# Replicationrole:master ###如果当前服务器没有在复制任何其他服务器,那么这个域的值就是 master ;否则的话,这个域的值就是 slave 。注意,在创建复制链的时候,一个从服务器也可能是另一个服务器的主服务器connected_slaves:2 ###2个slavesslave0:ip=172.16.6.7,port=6379,state=online,offset=1639,lag=1slave1:ip=172.16.6.8,port=6379,state=online,offset=1639,lag=0master_repl_offset:1639repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:2repl_backlog_histlen:1638# CPUused_cpu_sys:41.87 ###Redis 服务器耗费的系统 CPUused_cpu_user:17.82 ###Redis 服务器耗费的用户 CPUused_cpu_sys_children:0.01 ###后台进程耗费的系统 CPUused_cpu_user_children:0.01 ###后台进程耗费的用户 CPU# Keyspacedb0:keys=3101,expires=0,avg_ttl=0 ###keyspace 部分记录了数据库相关的统计信息,比如数据库的键数量、数据库已经被删除的过期键数量等。对于每个数据库,这个部分都会添加一行以下格式的信息

7.5 查看key

登录客户端后执行:执行keys

> keys key # 查看特定的key,支持表达式> keys * # 查看所有的key

7.6 在线查看和修改配置

Redis配置信息通过.conf文件进行配置,运行过程中可以通过以下命令进行查看和修改

> config get :获取服务器配置信息

例如:

> config get dir # 获取工作目录> config get * # 查看所有配置
> config set 配置信息 # 临时设置> config rewrite 配置信息 # 永久设置,将目前服务器的参数配置写入redis.conf

7.7 获取慢查询

结果为查询ID、发生时间、运行时长和原命令

> SLOWLOG GET 10

7.8 获取慢查询

命令为SLAVEOF
SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。
通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。
如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

> SLAVEOF host port> SLAVEOF NO ONE

7.9 通过Sentinel主从在线互相切换

Sentinel命令有以下
PING :返回 PONG 。
SENTINEL masters :列出所有被监视的主服务器,以及这些主服务器的当前状态;
SENTINEL slaves :列出给定主服务器的所有从服务器,以及这些从服务器的当前状态;
SENTINEL get-master-addr-by-name :返回给定名字的主服务器的 IP 地址和端口号。 如果这个主服务器正在执行故障转移操作, 或者针对这个主服务器的故障转移操作已经完成, 那么这个命令返回新的主服务器的 IP 地址和端口号;
SENTINEL reset : 重置所有名字和给定模式 pattern 相匹配的主服务器。 pattern 参数是一个 Glob 风格的模式。 重置操作清楚主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel ;
SENTINEL failover : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移。(切换需要一定时间,会出现卡顿影响业务,慎用)

> SENTINEL failover <master name> # 手动切换

7.10 通过Sentinel查看哨兵与redis状态

Sentinel命令可以查看相关信息:

> sentinel master mymaster //查看master的状态 > sentinel slaves mymaster  //查看salves的状态> sentinel sentinels mymaster  //查看哨兵的状态> sentinel get-master-addr-by-name mymaster //获取当前master的地址> info sentinel//查看哨兵信息

7.11 通过Sentinel查看哨兵与redis状态

Redis dbsize命令用来得到所选数据库key数量。

> dbsize

7.12 显示客户端列表

返回连接到Redis服务器的客户端列表。

> client list

7.13 关闭指定的客户端连接

关闭指定的客户端连接,生产环境慎用。

> client kill

7.14 修改从节点指向主节点(在哨兵模式下)

例如B是A的从节点,同时C也是A的从节点,想要修改C为B的从节点,从而形成链式主从关系,A <- B <- C。在哨兵模式下,如果单纯在C节点下在线之下saveof命令,并不能成功,原因是命令切换后,哨兵管理下已经监管到C了,会对C重新切换回来作为A的从节点。因此需要进行以下操作:
1. 先停掉C节点实例。(并修改C节点的redis配置文件slaveof B.ip B.port)
2. 让哨兵重新刷新监管列表,分别登录几个哨兵客户端执行命令

> redis-cli -p 26371> SENTINEL RESET *# SENTINEL RESET mastername
  1. 然后再把C节点重新起来
原创粉丝点击