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 0.0.0.0 # 将bind注释掉 或 bind 0.0.0.0
port 6379 # 改变其服务端口
daemonize yes # 修改服务为后台运行
pidfile /var/run/redis_6379.pid # 指定不同的pid文件,注意三份配置文件不同。
logfile "/usr/local/redis/logs/redis.log" # 指定log日志路径,自己配,要求不同。
dir /usr/local/redis/data # 这个指定rdb文件和aof文件的路径配置,要求改成不同。
masterauth 123456 # 都配上吧,从服务到主服务的认证密码。
requirepass 123456 # 三份文件都配置,客户端访问需要密码验证。
从机配置
replicaof 192.168.7.61 6379 #主服务这句话注释,从服务配置的两台需要开启。配置主服务的ip的port。Redis-2为从机、Redis-3,为从机修改配置文件redis.conf
# 编辑配置文件
vim /usr/local/redis/etc/redis.conf
# 从机配置
bind 0.0.0.0 # 或 bind本机IP
protected-mode no
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/usr/local/redis/logs/redis.log"
dir /usr/local/redis/data
requirepass 123456
masterauth 123456
replicaof 192.168.7.61 6379 # 主节点真实IP设置开机自启
# 编辑配置文件
vim /etc/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target
[Service]
Type=forking
PIDFile=/run/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecStartPost=/bin/bash -c 'for i in {1..20}; do [ -f /var/run/redis_6379.pid ] && exit 0; sleep 0.1; done; exit 1'
ExecStop=/usr/local/redis/bin/redis-cli -p 6379 -a 123456 shutdown
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
PrivateTmp=true
[Install]
WantedBy=multi-user.target设置刷新配置和启动服务
# 重新加载 systemd
systemctl daemon-reload
# 停掉当前手动运行的 Redis
pkill redis-server
# 用 systemctl 启动
systemctl start redis
# 设置开机自启
systemctl enable redis
# 检查状态
systemctl status redis设置环境变量永久生效
# 编辑文件
vim /etc/profile
# 在末尾添加
export PATH=$PATH:/usr/local/redis/bin
# 重新加载系统环境变量配置文件,立即生效
source /etc/profile启动服务
分别启动三台主机的redis服务器端服务
# 启动服务
redis-server /usr/local/redis/etc/redis.conf
# 查询是否成功
ps -ef|grep redis分别启动三台主机客户端服务
# 启动客户端
redis-cli -p 6379 -a 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 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法