美文网首页
Redis的安装到主从与哨兵配置

Redis的安装到主从与哨兵配置

作者: 早_wsm | 来源:发表于2020-07-09 11:03 被阅读0次

前言

redis的安装、主从配置与哨兵模式搭建实验

准备环境

临时搭建实验环境,使用随便俩台centos7的虚拟机做测试

主机 IP 身份
nginx 192.168.40.180 redis主
tomcat 192.168.40.181 redis从

基本架构,一主一从,分别配置哨兵

安装

redis官方下载地址:http://redis.io/download
选择合适的版本下载,我这里选择redis-2.8.17
进入目录下载安装,执行以下步骤:

cd  /home
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzf redis-2.8.17.tar.gz
mv redis-2.8.17 redis
cd redis
make

俩台机器配置相同版本redis
使用命令scp -r /home/redis 192.168.40.181:/home传送至另一台机器

启动

编译安装完成后进入目录执行启动脚本启动服务

  • 第一种
cd /home/redis/utils/
./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] 默认选择回车(修改redis使用端口)
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]默认选择回车(修改redis配置文件名称与路径)
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]默认选择回车(修改redis日志文件名称与路径)
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 默认选择回车(修改redis数据存放目录)
Selected default - /var/lib/redis/6379
Please select the redis executable path []/home/redis/src/redis-server(查找你的redis-server位置,一般在你的安装路径下src目录下)
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /home/redis/src/redis-server
Cli Executable : /home/redis/src/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.(回车完成操作)
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful! #看到 successful表示成功

此时可使用/etc/init.d/redis_6379 分别配合start/stop/restart执行启动、停止、重启操作

  • 第二种
    直接进入目录执行启动命令
cd /home/redis/src
./redis-server /etc/redis/6379.conf #最好指定你的配置文件,后面如果有修改配置文件但不执行配置文件内容的坑

使用命令redis-server -v查看当前使用版本,如果报错,需要到redis-server命令所在目录执行(redis安装目录src下./redis-server -v)

[root@nginx src]# ./redis-server -v
Redis server v=2.8.17 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=eb1a57b849b493de

启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

[root@nginx src]# ./redis-cli 
127.0.0.1:6379> ping 
PONG
127.0.0.1:6379> set name wsm
OK
127.0.0.1:6379> get name
"wsm"
127.0.0.1:6379> 

俩台机器相同操作,务必完成可交互状态,保证服务正常运行

主从配置

主要修改配置文件中俩项参数,主机与从机修改内容不同

vim /etc/redis/6379.conf
....
#为避免不必要的麻烦把主与从bind地址均定义为0.0.0.0(主机设置完成)
bind 0.0.0.0

#从机设置
slaveof 192.168.40.180 6379
#添加从属于主机的地址

分别重启主与从,使用配置文件重启
进入客户端进行验证
主机操作

cd /home/redis/src

[root@nginx src]# ./redis-cli 
127.0.0.1:6379> info replication
# Replication
role:master #显示角色为主
connected_slaves:1
slave0:ip=192.168.40.181,port=6379,state=online,offset=2464,lag=0
master_repl_offset:2464
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:2463
127.0.0.1:6379> set name 123
OK
127.0.0.1:6379> get name
"123"

从机操作

cd /home/redis/src
[root@tomcat1 src]# ./redis-cli 

127.0.0.1:6379> info replication
# Replication
role:slave #显示角色为从
master_host:192.168.40.180
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:2650
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> get name
"123"

此时主从已配置完毕
redis配置文件中有许多参数可供修改来实现更多功能,详情请参见更多优秀文章,此处为转载文章

哨兵模式配置

使用哨兵模式可以保证redis实现高可用,需要修改sentinel.conf配置文件实现。sentinel可监控运行中的redis运行状态,如果存在宕机,sentinel可通过选票投举出新的master来继续运行。

  • 配置操作
vim /home/redis/sentinel.conf
....
bind 0.0.0.0
sentinel monitor mymaster 192.168.40.180 6379 2 
# Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的IP 地址为 192.168.40.180,端口号为 6379 ,而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)

把修改好的sentinel.conf分别传送至各从机并覆盖
分别启动sentinel,以配置文件的方式

cd /home/redis/src
[root@nginx src]# ./redis-sentinel /home/redis/redis-2.8.17/sentinel.conf 
#观察日志启动情况与服务启动情况(当前为前台启动,不要停止服务)
  • 测试
    重新开启新窗口执行测试
#分别查看info信息
[root@nginx ~]# cd /home/redis/redis-2.8.17/src/
[root@nginx src]# ./redis-cli info replication
....
#模拟主机宕机,关闭主机redis,注意观察从机哨兵日志与redis日志信息
##哨兵日志
[6123] 09 Jul 10:56:16.680 # +promoted-slave slave 192.168.40.181:6379 192.168.40.181 6379 @ mymaster 192.168.40.180 6379
[6123] 09 Jul 10:56:16.680 # +failover-state-reconf-slaves master mymaster 192.168.40.180 6379
[6123] 09 Jul 10:56:16.796 # +failover-end master mymaster 192.168.40.180 6379
[6123] 09 Jul 10:56:16.797 # +switch-master mymaster 192.168.40.180 6379 192.168.40.181 6379
[6123] 09 Jul 10:56:16.797 * +slave slave 192.168.40.180:6379 192.168.40.180 6379 @ mymaster 192.168.40.181 6379
[6123] 09 Jul 10:56:46.815 # +sdown slave 192.168.40.180:6379 192.168.40.180 6379 @ mymaster 192.168.40.181 6379
#redis从机运行日志
[root@tomcat1 ~]# tail -f /var/log/redis_6379.log 
[5978] 09 Jul 10:56:15.731 * MASTER <-> SLAVE sync started
[5978] 09 Jul 10:56:15.732 # Error condition on socket for SYNC: Connection refused
[5978] 09 Jul 10:56:16.673 * Discarding previously cached master state.
[5978] 09 Jul 10:56:16.673 * MASTER MODE enabled (user request)
[5978] 09 Jul 10:56:16.675 # CONFIG REWRITE executed with success.
[5978] 09 Jul 10:56:16.743 * 1 changes in 900 seconds. Saving...
[5978] 09 Jul 10:56:17.179 * Background saving started by pid 6165
[6165] 09 Jul 10:56:17.277 * DB saved on disk
[6165] 09 Jul 10:56:17.277 * RDB: 6 MB of memory used by copy-on-write
[5978] 09 Jul 10:56:17.299 * Background saving terminated with success
再次查看从机info replication信息
[root@tomcat1 src]# ./redis-cli 
127.0.0.1:6379> INFO replication
# Replication
role:master #从机角色已从slave转换为master,哨兵重新投举出新master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> 

至此,哨兵模式正常运行,已完成故障转移实现高可用!
sentinel主要配置文件内容如下

# 端口
port 26379
# 是否后台启动
daemonize yes
# pid文件路径
pidfile /var/run/redis-sentinel.pid
# 日志文件路径
logfile "/var/log/sentinel.log"
# 定义工作目录
dir /tmp
# 定义Redis主的别名, IP, 端口,这里的2指的是需要至少2个Sentinel认为主Redis挂了才最终会采取下一步行为
sentinel monitor mymaster 127.0.0.1 6379 2
# 如果mymaster 30秒内没有响应,则认为其主观失效
sentinel down-after-milliseconds mymaster 30000
# 如果master重新选出来后,其它slave节点能同时并行从新master同步数据的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保守的设置为1,同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel parallel-syncs mymaster 1
# 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒
sentinel failover-timeout mymaster 180000
# 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes

相关文章

网友评论

      本文标题:Redis的安装到主从与哨兵配置

      本文链接:https://www.haomeiwen.com/subject/iwkhcktx.html