redis集群部署 – 记忆角落

redis集群部署

/ 0评 / 0

redis集群部署

部署前提:

高可用Redis cluster集群(20),主从+哨兵一台机器70个服务,每个服务限定10G内存(记得是运存,不是数据盘)

解读:69个服务+1个哨兵

1.上传redis安装包

这里用得是redis-4.0.10.tar.gz

上传文件到 目录/usr/local

或者外网直接下载

wget http://download.redis.io/releases/redis-4.0.10.tar.gz

2.安装GCC

yum install gcc

3.解压并安装

解压

tar xzvf redis-4.0.10.tar.gz

编译安装

make
make install

建立一个软连接

ln -s redis-4.0.10 redis

注:如出现/bin/sh: cc: command not found错误,是因为没有安装 gcc 环境,使用命令yum install gcc安装 gcc 环境即可

image-20210206000512881

测试是否安装成功

#进入redis目录
cd redis
# 执行启动命令 读取默认配置文件
redis-server ./redis.conf 
# 连接测试,默认是6379
redis-cli -p 6379

4.搭建redis主从构造搭建

Redis集群不用安装多个Redis,只需复制多个配置文件,修改即可

4.1.搭建redis master(只在master主机安装即可)

创建redis master 配置文件存放的文件夹

mkdir -p /data/redis/redis_master

cd /data/redis/redis_master

redis_master的配置文件如下

vi redis.conf

# 守护进程模式
daemonize yes 
# pid file 修改pidfile指向路径
pidfile /data/redis/redis_master/redis_master.pid

# 监听端口
port 6379

# TCP接收队列长度,受/proc/sys/net/core/somaxconn和tcp_max_syn_backlog这两个内核参数的影响
#tcp-backlog 511

# 一个客户端空闲多少秒后关闭连接(0代表禁用,永不关闭)
timeout 0

# 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK
tcp-keepalive 60

# 指定服务器调试等级
# 可能值:
# debug (大量信息,对开发/测试有用)
# verbose (很多精简的有用信息,但是不像debug等级那么多)
# notice (适量的信息,基本上是你生产环境中需要的)
# warning (只有很重要/严重的信息会记录下来)
loglevel notice

# 指明日志文件名
logfile "/data/redis/redis_master/redis6379.log"

# 设置数据库个数
databases 16

# 会在指定秒数和数据变化次数之后把数据库写到磁盘上
# 900秒(15分钟)之后,且至少1次变更
# 300秒(5分钟)之后,且至少10次变更
# 60秒之后,且至少10000次变更
save 900 1
save 300 10
save 60 10000


# 默认如果开启RDB快照(至少一条save指令)并且最新的后台保存失败,Redis将会停止接受写操作
# 这将使用户知道数据没有正确的持久化到硬盘,否则可能没人注意到并且造成一些灾难
stop-writes-on-bgsave-error yes

# 当导出到 .rdb 数据库时是否用LZF压缩字符串对象
rdbcompression yes

# 版本5的RDB有一个CRC64算法的校验和放在了文件的最后。这将使文件格式更加可靠。
rdbchecksum yes

# 持久化数据库的文件名
dbfilename dump-master.rdb

# 工作目录
dir /data/redis/redis_master/

# 当master服务设置了密码保护时,slav服务连接master的密码
masterauth testmaster123

# 当一个slave失去和master的连接,或者同步正在进行中,slave的行为可以有两种:
#
# 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,
# 可能是正常数据,或者是过时了的数据,也可能是还没获得值的空数据。
# 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步
# (SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。
slave-serve-stale-data yes

# 你可以配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据比较有用(因为写入salve
# 的数据在同master同步之后将很容易被删除
slave-read-only yes

# 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY?
# 如果你选择“yes”Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave
# 上有延迟,Linux内核的默认配置会达到40毫秒
# 如果你选择了 "no" 数据传输到salve的延迟将会减少但要使用更多的带宽
repl-disable-tcp-nodelay no

# slave的优先级是一个整数展示在Redis的Info输出中。如果master不再正常工作了,哨兵将用它来
# 选择一个slave提升=升为master。
# 优先级数字小的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,100,25,
# 哨兵将挑选优先级最小数字为10的slave。
# 0作为一个特殊的优先级,标识这个slave不能作为master,所以一个优先级为0的slave永远不会被
# 哨兵挑选提升为master
slave-priority 100


# 密码验证
# 警告:因为Redis太快了,所以外面的人可以尝试每秒150k的密码来试图破解密码。这意味着你需要
# 一个高强度的密码,否则破解太容易了
requirepass testmaster123

# redis实例最大占用内存,不要用比设置的上限更多的内存。一旦内存使用达到上限,Redis会根据选定的回收策略(参见:
# maxmemmory-policy)删除key
maxmemory 10gb

# 最大内存策略:如果达到内存限制了,Redis如何选择删除key。你可以在下面五个行为里选:
# volatile-lru -> 根据LRU算法删除带有过期时间的key。
# allkeys-lru -> 根据LRU算法删除任何key。
# volatile-random -> 根据过期设置来随机删除key, 具备过期时间的key。 
# allkeys->random -> 无差别随机删, 任何一个key。 
# volatile-ttl -> 根据最近过期时间来删除(辅以TTL), 这是对于有过期时间的key 
# noeviction -> 谁也不删,直接在写操作时返回错误。
maxmemory-policy volatile-lru

# 默认情况下,Redis是异步的把数据导出到磁盘上。这种模式在很多应用里已经足够好,但Redis进程
# 出问题或断电时可能造成一段时间的写操作丢失(这取决于配置的save指令)。
#
# AOF是一种提供了更可靠的替代持久化模式,例如使用默认的数据写入文件策略(参见后面的配置)
# 在遇到像服务器断电或单写情况下Redis自身进程出问题但操作系统仍正常运行等突发事件时,Redis
# 能只丢失1秒的写操作。
#
# AOF和RDB持久化能同时启动并且不会有问题。
# 如果AOF开启,那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性。
appendonly no

# aof文件名
appendfilename "appendonly.aof"

# fsync() 系统调用告诉操作系统把数据写到磁盘上,而不是等更多的数据进入输出缓冲区。
# 有些操作系统会真的把数据马上刷到磁盘上;有些则会尽快去尝试这么做。
#
# Redis支持三种不同的模式:
#
# no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。
# always:每次写操作都立刻写入到aof文件。慢,但是最安全。
# everysec:每秒写一次。折中方案。 
appendfsync everysec

# 如果AOF的同步策略设置成 "always" 或者 "everysec",并且后台的存储进程(后台存储或写入AOF
# 日志)会产生很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调用而阻塞很久。
# 注意,目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们同步的write(2)调用。
#
# 为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止主进程进行fsync()。
# 
# 这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。
# 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)
# 
# 如果你有延时问题把这个设置成"yes",否则就保持"no",这是保存持久数据的最安全的方式。
no-appendfsync-on-rewrite yes

# 自动重写AOF文件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# AOF文件可能在尾部是不完整的(这跟system关闭有问题,尤其是mount ext4文件系统时
# 没有加上data=ordered选项。只会发生在os死时,redis自己死不会不完整)。
# 那redis重启时load进内存的时候就有问题了。
# 发生的时候,可以选择redis启动报错,并且通知用户和写日志,或者load尽量多正常的数据。
# 如果aof-load-truncated是yes,会自动发布一个log给客户端然后load(默认)。
# 如果是no,用户必须手动redis-check-aof修复AOF文件才可以。
# 注意,如果在读取的过程中,发现这个aof是损坏的,服务器也是会退出的,
# 这个选项仅仅用于当服务器尝试读取更多的数据但又找不到相应的数据时。
aof-load-truncated yes

# Lua 脚本的最大执行时间,毫秒为单位
lua-time-limit 5000

# Redis慢查询日志可以记录超过指定时间的查询
slowlog-log-slower-than 10000

# 这个长度没有限制。只是要主要会消耗内存。你可以通过 SLOWLOG RESET 来回收内存。
slowlog-max-len 128

# redis延时监控系统在运行时会采样一些操作,以便收集可能导致延时的数据根源。
# 通过 LATENCY命令 可以打印一些图样和获取一些报告,方便监控
# 这个系统仅仅记录那个执行时间大于或等于预定时间(毫秒)的操作, 
# 这个预定时间是通过latency-monitor-threshold配置来指定的,
# 当设置为0时,这个监控系统处于停止状态
latency-monitor-threshold 0

# Redis能通知 Pub/Sub 客户端关于键空间发生的事件,默认关闭
notify-keyspace-events ""

# 当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省内存的
# 数据结构来编码。可以通过下面的指令来设定限制
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

# 与hash似,数据元素较少的list,可以用另一种方式来编码从而节省大量空间。
# 这种特殊的方式只有在符合下面限制时才可以用
list-max-ziplist-entries 512
list-max-ziplist-value 64

# set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。
# 下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度。
set-max-intset-entries 512

# 与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。
# 这种编码只适合长度和元素都小于下面限制的有序集合
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# HyperLogLog稀疏结构表示字节的限制。该限制包括
# 16个字节的头。当HyperLogLog使用稀疏结构表示
# 这些限制,它会被转换成密度表示。
# 值大于16000是完全没用的,因为在该点
# 密集的表示是更多的内存效率。
# 建议值是3000左右,以便具有的内存好处, 减少内存的消耗
hll-sparse-max-bytes 3000

# 启用哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)
activerehashing yes

# 客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# 默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个key
# 同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理
hz 10

# 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步
aof-rewrite-incremental-fsync yes

maxmemory 10gb ,即可限定服务限定10G内存(记得是运存,不是数据盘)

启动master

redis-server ./redis.conf

查看下是否存在进程 6379

[root@pod3-highapp-c-28 redis_master]# ps axu|grep redis
root     191460  0.0  0.0 112712   964 pts/1    S+   00:17   0:00 grep --color=auto redis
root     227202 22.2  0.0 274336 61668 ?        Ssl  Feb03 736:51 redis-server *:6379

在客户端做链接测试

redis-cli  -p 6379 -a testmaster123

#插入一条数据:
set name hcxt
#查询数据:
get name
退出:
quit


127.0.0.1:6379> set name hcxt
OK
127.0.0.1:6379> get name
"hcxt"
127.0.0.1:6379> quit
[root@pod3-highapp-c-28 redis_master]# 

至此 redis_master 启动成功,能正常读写数据

4.2搭建redis slave(所有机器)

创建redis slave 配置文件存放的文件夹

mkdir -p /data/redis/redis_7000
....
mkdir -p /data/redis/redis_7068

image-20210206002909274

修改redis.conf配置文件 slave的配置和master基本一致,只需要修改相应的pidfile,端口,日志文件名,并配上master的地址和认证密码

配置文件如下:

# 守护进程模式
daemonize yes 
# pid file 修改pidfile指向路径
pidfile /data/redis/redis_7000/redis_slave.pid

# 监听端口
port 7000

# TCP接收队列长度,受/proc/sys/net/core/somaxconn和tcp_max_syn_backlog这两个内核参数的影响
#tcp-backlog 511

# 一个客户端空闲多少秒后关闭连接(0代表禁用,永不关闭)
timeout 0

# 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK
tcp-keepalive 60

# 指定服务器调试等级
# 可能值:
# debug (大量信息,对开发/测试有用)
# verbose (很多精简的有用信息,但是不像debug等级那么多)
# notice (适量的信息,基本上是你生产环境中需要的)
# warning (只有很重要/严重的信息会记录下来)
loglevel notice

# 指明日志文件名
logfile "/data/redis/redis_7000/redis_slave.log"

# 设置数据库个数
databases 16

# 会在指定秒数和数据变化次数之后把数据库写到磁盘上
# 900秒(15分钟)之后,且至少1次变更
# 300秒(5分钟)之后,且至少10次变更
# 60秒之后,且至少10000次变更
save 900 1
save 300 10
save 60 10000


# 默认如果开启RDB快照(至少一条save指令)并且最新的后台保存失败,Redis将会停止接受写操作
# 这将使用户知道数据没有正确的持久化到硬盘,否则可能没人注意到并且造成一些灾难
stop-writes-on-bgsave-error yes

# 当导出到 .rdb 数据库时是否用LZF压缩字符串对象
rdbcompression yes

# 版本5的RDB有一个CRC64算法的校验和放在了文件的最后。这将使文件格式更加可靠。
rdbchecksum yes

# 持久化数据库的文件名
dbfilename dump-slave.rdb

# 工作目录
dir /data/redis/redis_7000/

# 当master服务设置了密码保护时,slav服务连接master的密码
masterauth testmaster123

# 当一个slave失去和master的连接,或者同步正在进行中,slave的行为可以有两种:
#
# 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,
# 可能是正常数据,或者是过时了的数据,也可能是还没获得值的空数据。
# 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步
# (SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。
slave-serve-stale-data yes

# 你可以配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据比较有用(因为写入salve
# 的数据在同master同步之后将很容易被删除
slave-read-only yes

# 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY?
# 如果你选择“yes”Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave
# 上有延迟,Linux内核的默认配置会达到40毫秒
# 如果你选择了 "no" 数据传输到salve的延迟将会减少但要使用更多的带宽
repl-disable-tcp-nodelay no

# slave的优先级是一个整数展示在Redis的Info输出中。如果master不再正常工作了,哨兵将用它来
# 选择一个slave提升=升为master。
# 优先级数字小的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,100,25,
# 哨兵将挑选优先级最小数字为10的slave。
# 0作为一个特殊的优先级,标识这个slave不能作为master,所以一个优先级为0的slave永远不会被
# 哨兵挑选提升为master
slave-priority 100


# 密码验证
# 警告:因为Redis太快了,所以外面的人可以尝试每秒150k的密码来试图破解密码。这意味着你需要
# 一个高强度的密码,否则破解太容易了
requirepass testmaster123

# redis实例最大占用内存,不要用比设置的上限更多的内存。一旦内存使用达到上限,Redis会根据选定的回收策略(参见:
# maxmemmory-policy)删除key
maxmemory 10gb

# 最大内存策略:如果达到内存限制了,Redis如何选择删除key。你可以在下面五个行为里选:
# volatile-lru -> 根据LRU算法删除带有过期时间的key。
# allkeys-lru -> 根据LRU算法删除任何key。
# volatile-random -> 根据过期设置来随机删除key, 具备过期时间的key。 
# allkeys->random -> 无差别随机删, 任何一个key。 
# volatile-ttl -> 根据最近过期时间来删除(辅以TTL), 这是对于有过期时间的key 
# noeviction -> 谁也不删,直接在写操作时返回错误。
maxmemory-policy volatile-lru

# 默认情况下,Redis是异步的把数据导出到磁盘上。这种模式在很多应用里已经足够好,但Redis进程
# 出问题或断电时可能造成一段时间的写操作丢失(这取决于配置的save指令)。
#
# AOF是一种提供了更可靠的替代持久化模式,例如使用默认的数据写入文件策略(参见后面的配置)
# 在遇到像服务器断电或单写情况下Redis自身进程出问题但操作系统仍正常运行等突发事件时,Redis
# 能只丢失1秒的写操作。
#
# AOF和RDB持久化能同时启动并且不会有问题。
# 如果AOF开启,那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性。
appendonly no

# aof文件名
appendfilename "appendonly.aof"

# fsync() 系统调用告诉操作系统把数据写到磁盘上,而不是等更多的数据进入输出缓冲区。
# 有些操作系统会真的把数据马上刷到磁盘上;有些则会尽快去尝试这么做。
#
# Redis支持三种不同的模式:
#
# no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。
# always:每次写操作都立刻写入到aof文件。慢,但是最安全。
# everysec:每秒写一次。折中方案。 
appendfsync everysec

# 如果AOF的同步策略设置成 "always" 或者 "everysec",并且后台的存储进程(后台存储或写入AOF
# 日志)会产生很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调用而阻塞很久。
# 注意,目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们同步的write(2)调用。
#
# 为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止主进程进行fsync()。
# 
# 这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。
# 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)
# 
# 如果你有延时问题把这个设置成"yes",否则就保持"no",这是保存持久数据的最安全的方式。
no-appendfsync-on-rewrite yes

# 自动重写AOF文件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# AOF文件可能在尾部是不完整的(这跟system关闭有问题,尤其是mount ext4文件系统时
# 没有加上data=ordered选项。只会发生在os死时,redis自己死不会不完整)。
# 那redis重启时load进内存的时候就有问题了。
# 发生的时候,可以选择redis启动报错,并且通知用户和写日志,或者load尽量多正常的数据。
# 如果aof-load-truncated是yes,会自动发布一个log给客户端然后load(默认)。
# 如果是no,用户必须手动redis-check-aof修复AOF文件才可以。
# 注意,如果在读取的过程中,发现这个aof是损坏的,服务器也是会退出的,
# 这个选项仅仅用于当服务器尝试读取更多的数据但又找不到相应的数据时。
aof-load-truncated yes

# Lua 脚本的最大执行时间,毫秒为单位
lua-time-limit 5000

# Redis慢查询日志可以记录超过指定时间的查询
slowlog-log-slower-than 10000

# 这个长度没有限制。只是要主要会消耗内存。你可以通过 SLOWLOG RESET 来回收内存。
slowlog-max-len 128

# redis延时监控系统在运行时会采样一些操作,以便收集可能导致延时的数据根源。
# 通过 LATENCY命令 可以打印一些图样和获取一些报告,方便监控
# 这个系统仅仅记录那个执行时间大于或等于预定时间(毫秒)的操作, 
# 这个预定时间是通过latency-monitor-threshold配置来指定的,
# 当设置为0时,这个监控系统处于停止状态
latency-monitor-threshold 0

# Redis能通知 Pub/Sub 客户端关于键空间发生的事件,默认关闭
notify-keyspace-events ""

# 当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省内存的
# 数据结构来编码。可以通过下面的指令来设定限制
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

# 与hash似,数据元素较少的list,可以用另一种方式来编码从而节省大量空间。
# 这种特殊的方式只有在符合下面限制时才可以用
list-max-ziplist-entries 512
list-max-ziplist-value 64

# set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。
# 下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度。
set-max-intset-entries 512

# 与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。
# 这种编码只适合长度和元素都小于下面限制的有序集合
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# HyperLogLog稀疏结构表示字节的限制。该限制包括
# 16个字节的头。当HyperLogLog使用稀疏结构表示
# 这些限制,它会被转换成密度表示。
# 值大于16000是完全没用的,因为在该点
# 密集的表示是更多的内存效率。
# 建议值是3000左右,以便具有的内存好处, 减少内存的消耗
hll-sparse-max-bytes 3000

# 启用哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)
activerehashing yes

# 客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# 默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个key
# 同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理
hz 10

# 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步
aof-rewrite-incremental-fsync yes

# 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof 10.209.17.10 6379

每个配置文件需要对应端口修改:

#pid file 修改pidfile指向路径

pidfile /data/redis/redis_7000/redis_slave.pid

#监听端口

port 7000

#指明日志文件名

logfile "/data/redis/redis_7000/redis_slave.log"

#设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

#slaveof 127.0.0.1 7001

slaveof 10.209.17.10 6379

#当master服务设置了密码保护时,slav服务连接master的密码

masterauth testmaster123

启动redis slave

#今天配置文件主目录
cd /data/redis

redis-server ./redis_7000/redis.conf
redis-server ./redis_7001/redis.conf
redis-server ./redis_7002/redis.conf
redis-server ./redis_7003/redis.conf
redis-server ./redis_7004/redis.conf
redis-server ./redis_7005/redis.conf
redis-server ./redis_7006/redis.conf
redis-server ./redis_7007/redis.conf
redis-server ./redis_7008/redis.conf
redis-server ./redis_7009/redis.conf
redis-server ./redis_7010/redis.conf
redis-server ./redis_7011/redis.conf
redis-server ./redis_7012/redis.conf
redis-server ./redis_7013/redis.conf
redis-server ./redis_7014/redis.conf
redis-server ./redis_7015/redis.conf
redis-server ./redis_7016/redis.conf
redis-server ./redis_7017/redis.conf
redis-server ./redis_7018/redis.conf
redis-server ./redis_7019/redis.conf
redis-server ./redis_7020/redis.conf
redis-server ./redis_7021/redis.conf
redis-server ./redis_7022/redis.conf
redis-server ./redis_7023/redis.conf
redis-server ./redis_7024/redis.conf
redis-server ./redis_7025/redis.conf
redis-server ./redis_7026/redis.conf
redis-server ./redis_7027/redis.conf
redis-server ./redis_7028/redis.conf
redis-server ./redis_7029/redis.conf
redis-server ./redis_7030/redis.conf
redis-server ./redis_7031/redis.conf
redis-server ./redis_7032/redis.conf
redis-server ./redis_7033/redis.conf
redis-server ./redis_7034/redis.conf
redis-server ./redis_7035/redis.conf
redis-server ./redis_7036/redis.conf
redis-server ./redis_7037/redis.conf
redis-server ./redis_7038/redis.conf
redis-server ./redis_7039/redis.conf
redis-server ./redis_7040/redis.conf
redis-server ./redis_7041/redis.conf
redis-server ./redis_7042/redis.conf
redis-server ./redis_7043/redis.conf
redis-server ./redis_7044/redis.conf
redis-server ./redis_7045/redis.conf
redis-server ./redis_7046/redis.conf
redis-server ./redis_7047/redis.conf
redis-server ./redis_7048/redis.conf
redis-server ./redis_7049/redis.conf
redis-server ./redis_7050/redis.conf
redis-server ./redis_7051/redis.conf
redis-server ./redis_7052/redis.conf
redis-server ./redis_7053/redis.conf
redis-server ./redis_7054/redis.conf
redis-server ./redis_7055/redis.conf
redis-server ./redis_7056/redis.conf
redis-server ./redis_7057/redis.conf
redis-server ./redis_7058/redis.conf
redis-server ./redis_7059/redis.conf
redis-server ./redis_7060/redis.conf
redis-server ./redis_7061/redis.conf
redis-server ./redis_7062/redis.conf
redis-server ./redis_7063/redis.conf
redis-server ./redis_7064/redis.conf
redis-server ./redis_7065/redis.conf
redis-server ./redis_7066/redis.conf
redis-server ./redis_7067/redis.conf
redis-server ./redis_7068/redis.conf

连接redis slave测试

redis-cli -p 7002 -a testmaster123

[root@pod3-highapp-c-28 redis]# redis-cli -p 7002 -a testmaster123
Warning: Using a password with '-a' option on the command line interface may not be safe.
127.0.0.1:7002> 
127.0.0.1:7002> get name
"hcxt"
127.0.0.1:7002> 

至此 master slave 的主从关系也建立了 master中设置的key-value已经成功同步过来

连接maser机器,输入 Info replication 命令可以查看具体情况

主从复制原理:
1.当从库和主库建立MS关系后,会向主数据库发送SYNC命令
2.主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来
3.当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis
4.从Redis接收到后,会载入快照文件并且执行收到的缓存的命令
5.之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致

5.Redis Sentinel (哨兵)部署--所有机器

创建redis sentinel 配置文件存放的文件夹

mkdir -p /data/redis/redis_sentinel

cd /data/redis/redis_sentinel

哨兵配置 sentinel.conf:

# Example sentinel.conf

# port <sentinel-port>
port 26379

# 守护进程模式
daemonize yes

# 指明日志文件名
logfile "/data/redis/redis_sentinel/sentinel.log"

# 工作路径,sentinel一般指定/tmp比较简单
dir "/data/redis/redis_sentinel"

# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
sentinel monitor MyMaster 10.209.17.10 6379 2

# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds MyMaster 1500

#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
#snetinel parallel-syncs MyMaster 1

# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel down-after-milliseconds MyMaster 3000

# 设置master和slaves验证密码
sentinel failover-timeout MyMaster 18000
sentinel auth-pass MyMaster testmaster123

启动哨兵:

redis-sentinel ./redis_sentinel/sentinel.conf

在sentinel中查看 所监控的master 和slave 连接哨兵:

redis-cli -p 26379

#查看master:  
SENTINEL masters

[root@pod3-highapp-c-28 redis_sentinel]# redis-cli -p 26379
127.0.0.1:26379> SENTINEL masters
1)  1) "name"
    2) "MyMaster"
    3) "ip"
    4) "10.209.17.10"
    5) "port"
    6) "6379"
    7) "runid"
    8) "3ddc55f75fa3ae62952b679bb150c8a135bf8035"
    9) "flags"
   10) "master"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
   16) "0"
   17) "last-ok-ping-reply"
   18) "348"
   19) "last-ping-reply"
   20) "348"
   21) "down-after-milliseconds"
   22) "3000"
   23) "info-refresh"
   24) "9256"
   25) "role-reported"
   26) "master"
   27) "role-reported-time"
   28) "198364518"
   29) "config-epoch"
   30) "15"
   31) "num-slaves"
   32) "1380"
   33) "num-other-sentinels"
   34) "0"
   35) "quorum"
   36) "2"
   37) "failover-timeout"
   38) "18000"
   39) "parallel-syncs"
   40) "1"
127.0.0.1:26379> 

Redis注意事项:
1.最大内存问题:要设置好最大内存,以防不停的申请内存,造成系统内存都被用完。
2.密码问题:需要设置复杂一些,防止暴力破解。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注