Redis多机主从
准备工作
开启三台虚拟主机Redis-1、Redis-2、Redis-3,分别安装redis;
# 关闭主机防火墙
systemctl status firewalld #查看防火墙状态
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #关闭防火墙配置主机和从机
Redis-1为主机,修改配置文件redis.conf
# 编辑配置文件
vim /usr/local/redis/etc/redis.conf
# 主机配置修改
bind 127.0.0.1 192.168.7.61 # 将bind注释掉 或 bind 0.0.0.0
daemonize yes # 修改服务为后台运行
pidfile /var/run/redis_6379.pid # 指定不同的pid文件,注意三份配置文件不同。
logfile "/usr/local/redis/logs/redis.log" # 指定log日志路径,自己配,要求不同。
dir /usr/local/redis/data # 这个指定rdb文件和aof文件的路径配置,要求改成不同。
# 主服务如果存在就注释(这个配置需要在从服务器设置)
replicaof 192.168.7.61 6379
# 如需设置密码可添加(测试环境可不添加)
masterauth 123456 # 都配上吧,从服务到主服务的认证密码。
requirepass 123456 # 三份文件都配置,客户端访问需要密码验证。Redis-2为从机、Redis-3,为从机修改配置文件redis.conf
# 编辑配置文件
vim /usr/local/redis/etc/redis.conf
# 从机配置
bind 127.0.0.1 192.168.7.62 # Redis-3 写(bind 127.0.0.1 192.168.7.63)
protected-mode yes
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/usr/local/redis/logs/redis.log"
dir /usr/local/redis/data
replicaof 192.168.7.61 6379 # 主节点真实IP和端口
# 如需设置密码可添加(测试环境可不添加)
masterauth 123456 # 都配上吧,从服务到主服务的认证密码。
requirepass 123456 # 三份文件都配置,客户端访问需要密码验证。设置开机自启
# 编辑配置文件
vim /etc/systemd/system/redis.service
# 添加以下内容
[Unit]
Description=Redis 6379 - Production Server
After=network.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/redis_6379.pid
# 启动 Redis
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
# 启动后检查 PID 文件是否生成(最多等待 2 秒)
ExecStartPost=/bin/bash -c 'for i in {1..20}; do [ -f /run/redis_6379.pid ] && exit 0; sleep 0.1; done; exit 1'
# 优雅关闭 Redis(假设无密码,如有密码需加 -a)
ExecStop=/usr/local/redis/bin/redis-cli shutdown
# 重载配置(将运行时配置持久化到文件)
ExecReload=/usr/local/redis/bin/redis-cli CONFIG REWRITE
# 重启策略:非正常退出时重启,等待 5 秒防止频繁重启
Restart=on-failure
RestartSec=5s
# 资源限制:防止 OOM 或 FD 耗尽
LimitNOFILE=65536
LimitNPROC=65536
# 超时控制:避免卡死时无限等待
TimeoutStartSec=10s
TimeoutStopSec=30s
[Install]
WantedBy=multi-user.target设置刷新配置和启动服务
# 重新加载 systemd
systemctl daemon-reload
# 停掉当前手动运行的 Redis
pkill redis-server
# 用 systemctl 启动
systemctl start redis
# 设置开机自启
systemctl enable redis
# 检查状态
systemctl status redis启动服务
分别启动三台主机的redis服务器端服务
# 启动服务
redis-server /usr/local/redis/etc/redis.conf
# 查询是否成功
ps -ef|grep redis分别启动三台主机客户端服务
# 启动客户端
redis-cli -h 127.0.0.1 -p 6379
# 如果设置密码需要添加 -a 密码
redis-cli -h 127.0.0.1 -p 6379 -a 123456
# 或进入客户端后在验证密码
redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:7000> AUTH 123456查看主从信息info replication
# 执行命令查看主从信息
info replication信息提示
# 主信息显示
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.7.62,port=6379,state=online,offset=518,lag=0
slave1:ip=192.168.7.63,port=6379,state=online,offset=518,lag=0
master_failover_state:no-failover
master_replid:d11575ecef74664b7242de53c710020c5402b471
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:518
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:518
# 从1信息显示
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.7.61
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_read_repl_offset:518
slave_repl_offset:518
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:d11575ecef74664b7242de53c710020c5402b471
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:518
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:518
# 从2信息显示
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.7.61
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_read_repl_offset:518
slave_repl_offset:518
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:d11575ecef74664b7242de53c710020c5402b471
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:518
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:518读写分离测试
Redis-1为Master,Redis-2、Redis-3为Slave
Master为写
127.0.0.1:6379> set str helloworld
OKSlave为读
127.0.0.1:6379> get str
"helloworld"
127.0.0.1:6379> set ss fdfd
(error) READONLY You can't write against a read only replica.手动设置主从
当Redis-1虚拟机死机后,如何去手动设置我们的主从,Redis-2为主,Redis-3为从
Redis-2执行slaveof no one
执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
127.0.0.1:6379> slaveof no one
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:169110a988897f74bea06927edd2419526af24b6
master_replid2:77997787def8422f9c759d966bd42fdabd8c28ff
master_repl_offset:9176
second_repl_offset:9177
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:9176Redis-3执行slaveof host port
执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
127.0.0.1:6379> slaveof 192.168.7.62 6379
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.7.62
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_read_repl_offset:9176
slave_repl_offset:9176
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:169110a988897f74bea06927edd2419526af24b6
master_replid2:77997787def8422f9c759d966bd42fdabd8c28ff
master_repl_offset:9176
second_repl_offset:9177
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:9176
原创
Redis多机主从配置
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法