redis作为一个高性能内存数据库,也常用于系统的缓存数据库,与memcache类似,再生产环境中,当然需要做高可用的结构,即主从复制,替换等功能,可以实现主数据库挂掉,从库自动补上,不影响正常使用。
redis的主从,哨兵配置也非常简单,一主N从,N哨兵都可以。具体的配置方法下面记录一下:
预设环境: 一主,2丛,3哨兵
此处以1台机器,3个redis,3哨兵举例
1.创建redis-ms目录,里面依次新建redis-7021目录,redis-7022目录,redis-7023目录。redis-7021为master节点,redis-7022和redis7023为slave节点。
2.主节点配置,进入redis-7021目录。
配置redis.conf
# 复制redis-4.0.10下的redis.conf到redis-7021下
cp /usr/local/java/redis-4.0.10/redis.conf /usr/local/java/redis-ms/redis-7021/
# 调整配置如下:
port 7021
# bind 127.0.0.1 (注释掉这个配置项,允许任意用户连接)
protected-mode no (关闭保护进程)
daemonize yes (开启守护进程)
timeout 300 (客户端限制300秒后关闭连接,0则为不启动此功能)
配置sentinel.conf 哨兵文件
# 复制redis-4.0.10下的sentinel.conf到redis-7021下
cp /usr/local/java/redis-4.0.10/sentinel.conf /usr/local/java/redis-ms/redis-7021/
# 调整配置如下:
### 哨兵配置 ###
#master节点
port 26381
#设定matser主机的IP和端口
#后面的2,表示有两台或以上哨兵认定master挂掉了
#则可认为master挂掉,进行master的切换,这里设置三台哨兵
sentinel monitor mymaster 192.168.2.2 7021 2
#master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds mymaster 30000
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout mymaster 900000
#选项指定了在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步
#这个数字越小,完成故障转移所需的时间就越长。
sentinel parallel-syncs mymaster 1
#指定master主机的密码,如果你的redis集群有密码
#sentinel auth-pass mymaster 123456
#新添加的配置,启用守护进程
daemonize yes
#关闭保护模式
protected-mode no
#新添加的,只当日志文件位置
logfile "/usr/local/java/redis-ms/redis-7021/sentinel_26381.log"
#设置pid文件路径
pidfile "/usr/local/java/redis-ms/redis-7021/sentinel_26381.pid"
#工作路径,不用改
dir /tmp
3.从节点配置
3.1进入redis-7022目录
配置redis.conf
# 复制redis-4.0.10下的redis.conf到redis-7022下
cp /usr/local/java/redis-4.0.10/redis.conf /usr/local/java/redis-ms/redis-7022/
# 调整配置如下:
port 7022
# bind 127.0.0.1 (注释掉这个配置项,允许任意用户连接)
protected-mode no (关闭保护进程)
daemonize yes (开启守护进程)
timeout 300 (客户端限制300秒后关闭连接,0则为不启动此功能)
slaveof 192.168.2.2 7021 (指定master节点)
配置sentinel.conf 哨兵文件
# 复制redis-4.0.10下的sentinel.conf到redis-7022下
cp /usr/local/java/redis-4.0.10/sentinel.conf /usr/local/java/redis-ms/redis-7022/
# 调整配置如下:
### 哨兵配置 ###
#master节点
port 26382
#设定matser主机的IP和端口
#后面的2,表示有两台或以上哨兵认定master挂掉了
#则可认为master挂掉,进行master的切换,这里设置三台哨兵
sentinel monitor mymaster 192.168.2.2 7021 2
#master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds mymaster 30000
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout mymaster 900000
#选项指定了在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步
#这个数字越小,完成故障转移所需的时间就越长。
sentinel parallel-syncs mymaster 1
#指定master主机的密码,如果你的redis集群有密码
#sentinel auth-pass mymaster 123456
#新添加的配置,启用守护进程
daemonize yes
#关闭保护模式
protected-mode no
#新添加的,只当日志文件位置
logfile "/usr/local/java/redis-ms/redis-7022/sentinel_26382.log"
#设置pid文件路径
pidfile "/usr/local/java/redis-ms/redis-7022/sentinel_26382.pid"
#工作路径,不用改
dir /tmp
3.2进入redis-7023目录
配置redis.conf
# 复制redis-4.0.10下的redis.conf到redis-7023下
cp /usr/local/java/redis-4.0.10/redis.conf /usr/local/java/redis-ms/redis-7023/
# 调整配置如下:
port 7023
# bind 127.0.0.1 (注释掉这个配置项,允许任意用户连接)
protected-mode no (关闭保护进程)
daemonize yes (开启守护进程)
timeout 300 (客户端限制300秒后关闭连接,0则为不启动此功能)
slaveof 192.168.2.2 7021 (指定master节点)
配置sentinel.conf 哨兵文件
# 复制redis-4.0.10下的sentinel.conf到redis-7023下
cp /usr/local/java/redis-4.0.10/sentinel.conf /usr/local/java/redis-ms/redis-7023/
# 调整配置如下:
### 哨兵配置 ###
#master节点
port 26383
#设定matser主机的IP和端口
#后面的2,表示有两台或以上哨兵认定master挂掉了
#则可认为master挂掉,进行master的切换,这里设置三台哨兵
sentinel monitor mymaster 192.168.2.2 7021 2
#master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds mymaster 30000
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout mymaster 900000
#选项指定了在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步
#这个数字越小,完成故障转移所需的时间就越长。
sentinel parallel-syncs mymaster 1
#指定master主机的密码,如果你的redis集群有密码
#sentinel auth-pass mymaster 123456
#新添加的配置,启用守护进程
daemonize yes
#关闭保护模式
protected-mode no
#新添加的,只当日志文件位置
logfile "/usr/local/java/redis-ms/redis-7023/sentinel_26383.log"
#设置pid文件路径
pidfile "/usr/local/java/redis-ms/redis-7023/sentinel_26383.pid"
#工作路径,不用改
dir /tmp
4.创建启动配置文件(一次性启动redis及哨兵)
touch redis-ms-start-all.sh
编辑内容如下:
cd /usr/local/java/redis-ms/redis-7021
/usr/local/java/redis-4.0.10/src/redis-server redis.conf
/usr/local/java/redis-4.0.10/src/redis-sentinel sentinel.conf
cd ..
cd /usr/local/java/redis-ms/redis-7022
/usr/local/java/redis-4.0.10/src/redis-server redis.conf
/usr/local/java/redis-4.0.10/src/redis-sentinel sentinel.conf
cd ..
cd /usr/local/java/redis-ms/redis-7023
/usr/local/java/redis-4.0.10/src/redis-server redis.conf
/usr/local/java/redis-4.0.10/src/redis-sentinel sentinel.conf
cd ..
启动redis服务及哨兵
/usr/local/java/redis-ms/redis-ms-start-all.sh
5.测试redis服务
## 查看master节点服务, 7021节点为主节点
[root@localhost src]# ./redis-cli -h 192.168.2.2 -p 7021
192.168.2.2:7021> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.2.2,port=7022,state=online,offset=26495,lag=1
slave1:ip=192.168.2.2,port=7023,state=online,offset=26509,lag=1
master_replid:418d4b1ad90eb2bc6ffd523ca88d03655716e804
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:26509
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:26509
192.168.2.2:7021> exit
## 查看slave节点服务,7022节点为从节点
[root@localhost src]# ./redis-cli -h 192.168.2.2 -p 7022
192.168.2.2:7022> info replication
# Replication
role:slave
master_host:192.168.2.2
master_port:7021
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:67889
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:418d4b1ad90eb2bc6ffd523ca88d03655716e804
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:67889
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:67889
192.168.2.2:7022> exit
## 查看slave节点服务,7023节点为从节点
[root@localhost src]# ./redis-cli -h 192.168.2.2 -p 7023
192.168.2.2:7023> info replication
# Replication
role:slave
master_host:192.168.2.2
master_port:7021
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:77398
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:418d4b1ad90eb2bc6ffd523ca88d03655716e804
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:77398
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:77398
192.168.2.2:7023> exit
6.查看sentinel的状态
## 查看哨兵节点:26381
[root@localhost src]# ./redis-cli -h 192.168.2.2 -p 26381
192.168.2.2:26381> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.2.2:7021,slaves=2,sentinels=3
192.168.2.2:26381> exit
## 查看哨兵节点:26382
[root@localhost src]# ./redis-cli -h 192.168.2.2 -p 26382
192.168.2.2:26382> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.2.2:7021,slaves=2,sentinels=3
192.168.2.2:26382> exit
## 查看哨兵节点:26383
[root@localhost src]# ./redis-cli -h 192.168.2.2 -p 26383
192.168.2.2:26383> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.2.2:7021,slaves=2,sentinels=3
192.168.2.2:26383> exit
7.配置防火墙端口
[root@localhost redis-7021]# firewall-cmd --permanent --zone=public --add-port=7021/tcp
success
[root@localhost redis-7021]# firewall-cmd --permanent --zone=public --add-port=7022/tcp
success
[root@localhost redis-7021]# firewall-cmd --permanent --zone=public --add-port=7023/tcp
success
[root@localhost redis-7021]# firewall-cmd --permanent --zone=public --add-port=26381/tcp
success
[root@localhost redis-7021]# firewall-cmd --permanent --zone=public --add-port=26382/tcp
success
[root@localhost redis-7021]# firewall-cmd --permanent --zone=public --add-port=26383/tcp
success
[root@localhost redis-7021]# firewall-cmd --reload
success
[root@localhost redis-7021]# firewall-cmd --permanent --zone=public --list-ports
8080/tcp 27017/tcp 6379/tcp 7001/tcp 7002/tcp 7003/tcp 7004/tcp 7005/tcp 7006/tcp 3306/tcp 11211/tcp 3690/tcp 80/tcp 2181/tcp 8081/tcp 8082/tcp 8083/tcp 7021/tcp 7022/tcp 7023/tcp 26381/tcp 26382/tcp 26383/tcp
至此,哨兵集群配置成功。