Redis主从搭建 7.2.5
文章目录
- 一. 同主机搭建Redis主从
-
- 1. 环境介绍
- 2. 环境前准备工作
- 3. 安装 Redis 7.2.5
- 4. redis 配置修改并且启动
-
- 5. 开启主从
-
- 5.1 开启
- 5.2 主库实例查看主从信息
- 5.3 从库实例查看主从信息
- 5.4 验证主从配置是否生效
- 6. 解除 192.168.1.100:16372 实例主从
- 二. 跨节点部署Redis主从
-
- 1. 环境介绍
- 2. 修改配置文件
-
- 2.1 master
- 2.2 slave 1
- 2.3 slave 2
- 3.启动Redis
-
- 3.1 master
- 3.2 slave 1
- 3.3 slave 2
- 4. 开启主从
-
- 4.1 slave 1
- 4.2 slave 2
- 4.3 master
- 5. 验证主从配置是否生效
一. 同主机搭建Redis主从
1. 环境介绍
同机器 一主两从
操作系统 |
Centos 7 |
内核版本 |
Linux 3.10.0-957.el7.x86_64 |
主机名称 |
master-salve |
IP地址 |
192.168.1.100 |
端口 |
master: 16370 slave1: 16371 slave2: 16372 |
Redis |
7.2.5 |
2. 环境前准备工作
systemctl stop firewalld
systemctl disable firewalld
hostnamectl set-hostname xxxx
date -R
timedatectl set-timezone Asia/Shanghai
yum -y install ntp
ntpdate ntp1.aliyun.com
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
3. 安装 Redis 7.2.5
http://download.redis.io/releases/
wget http://download.redis.io/releases/redis-7.2.5.tar.gz
tar -xf redis-7.2.5.tar.gz -C /opt/redis
make MALLOC=libc
make install PREFIX=/usr/local/redis
vi /etc/profile.d/redis.sh
export REDIS_HOME=/usr/local/redis
export PATH=$PATH:$REDIS_HOME/bin
source /etc/profile.d/redis.sh
4. redis 配置修改并且启动
4.1 修改配置文件
mkdir -p /usr/local/redis/data/1637{0..2}
mkdir -p /usr/local/redis/conf/1637{0..2}
mkdir -p /usr/local/redis/log/1637{0..2}
mkdir /usr/local/redis/run
protected-mode yes
bind 192.168.1.100
port 16370
pidfile /usr/local/redis/run/redis_16370.pid
logfile /usr/local/redis/log/16370/redis_16370.log
dir /usr/local/redis/data/16370
requirepass dongdong
masterauth dongdong
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
daemonize yes
protected-mode yes
bind 192.168.1.100
port 16371
pidfile /usr/local/redis/run/redis_16371.pid
logfile /usr/local/redis/log/16370/redis_16371.log
dir /usr/local/redis/data/16371
requirepass dongdong
masterauth dongdong
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
daemonize yes
protected-mode yes
bind 192.168.1.100
port 16372
pidfile /usr/local/redis/run/redis_16372.pid
logfile /usr/local/redis/log/16370/redis_16372.log
dir /usr/local/redis/data/16372
requirepass dongdong
masterauth dongdong
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
daemonize yes
cat > /usr/local/redis/conf/redis_16370.conf <<EOF
# 开启保护模式
protected-mode yes
# 添加本机的ip
bind 192.168.1.100
# 端口
port 16370
# pid存储目录
pidfile /usr/local/redis/run/redis_16370.pid
# 日志存储目录
logfile /usr/local/redis/log/16370/redis_16370.log
# 数据存储目录,目录要提前创建好
dir /usr/local/redis/data/16370
# 设置实例的验证口令
requirepass dongdong
# 以认证的方式连接到master。 如果master中使用了“密码保护”,slave必须交付正确的授权密码,才能连接成功。
# 此配置项中值需要和master机器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守护进程
daemonize yes
EOF
cat > /usr/local/redis/conf/redis_16371.conf <<EOF
# 开启保护模式
protected-mode yes
# 添加本机的ip
bind 192.168.1.100
# 端口
port 16371
# pid存储目录
pidfile /usr/local/redis/run/redis_16371.pid
# 日志存储目录
logfile /usr/local/redis/log/16370/redis_16371.log
# 数据存储目录,目录要提前创建好
dir /usr/local/redis/data/16371
# 设置实例的验证口令
requirepass dongdong
# 以认证的方式连接到master。 如果master中使用了“密码保护”,slave必须交付正确的授权密码,才能连接成功。
# 此配置项中值需要和master机器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守护进程
daemonize yes
EOF
cat > /usr/local/redis/conf/redis_16372.conf <<EOF
# 开启保护模式
protected-mode yes
# 添加本机的ip
bind 192.168.1.100
# 端口
port 16372
# pid存储目录
pidfile /usr/local/redis/run/redis_16372.pid
# 日志存储目录
logfile /usr/local/redis/log/16370/redis_16372.log
# 数据存储目录,目录要提前创建好
dir /usr/local/redis/data/16372
# 设置实例的验证口令
requirepass dongdong
# 以认证的方式连接到master。 如果master中使用了“密码保护”,slave必须交付正确的授权密码,才能连接成功。
# 此配置项中值需要和master机器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守护进程
daemonize yes
EOF
4.2 编写启动脚本
cat > /usr/local/redis/bin/master-slave_start.sh << EOF
#!/bin/bash
redis-server /usr/local/redis/conf/redis_16370.conf
redis-server /usr/local/redis/conf/redis_16371.conf
redis-server /usr/local/redis/conf/redis_16372.conf
EOF
chmod +x /usr/local/redis/bin/master-slave_start.sh
vi /usr/local/redis/bin/master-slave_shutdown.sh
kill -9 $(ps -ef | grep 1637 | grep -v grep | awk '{print $2}')
chmod +x /usr/local/redis/bin/master-slave_shutdown.sh
5. 开启主从
5.1 开启
redis-cli -h 192.168.1.100 -p 16371 -a dongdong slaveof 192.168.1.100 16370
redis-cli -h 192.168.1.100 -p 16372 -a dongdong slaveof 192.168.1.100 16370
5.2 主库实例查看主从信息
redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
role:master
connected_slaves:2
slave0:ip=192.168.1.100,port=16371,state=online,offset=8428,lag=0
slave1:ip=192.168.1.100,port=16372,state=online,offset=8428,lag=1
master_failover_state:no-failover
master_replid:a292603e2c96a6f451055e6d84a60795f81f2928
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:8428
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:8428
5.3 从库实例查看主从信息
redis-cli -h 192.168.1.100 -p 16371 -a dongdong info replication
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
role:slave
master_host:192.168.1.100
master_port:16370
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:8680
slave_repl_offset:8680
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:a292603e2c96a6f451055e6d84a60795f81f2928
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:8680
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:8666
5.4 验证主从配置是否生效
redis-cli -h 192.168.1.100 -p 16370 -a dongdong -n 11
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.100:16370[11]> keys *
(empty array)
192.168.1.100:16370[11]> set name dongdong
OK
192.168.1.100:16370[11]> set age 18
OK
192.168.1.100:16370[11]> keys *
1) "age"
2) "name"
redis-cli -h 192.168.1.100 -p 16371 -a dongdong -n 11
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.100:16371[11]> keys *
1) "name"
2) "age"
192.168.1.100:16371[11]> get name
"dongdong"
192.168.1.100:16371[11]> get age
"18"
192.168.1.100:16371[11]>
redis-cli -h 192.168.1.100 -p 16372 -a dongdong -n 11
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.100:16372[11]> keys *
1) "age"
2) "name"
192.168.1.100:16372[11]> get name
"dongdong"
192.168.1.100:16372[11]> get age
"18"
192.168.1.100:16372[11]>
6. 解除 192.168.1.100:16372 实例主从
redis-cli -h 192.168.1.100 -p 16372 -a dongdong info replication
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
role:slave
master_host:192.168.1.100
master_port:16370
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_read_repl_offset:10003
slave_repl_offset:10003
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:a292603e2c96a6f451055e6d84a60795f81f2928
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:10003
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:155
repl_backlog_histlen:9849
redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
role:master
connected_slaves:2
slave0:ip=192.168.1.100,port=16371,state=online,offset=10157,lag=0
slave1:ip=192.168.1.100,port=16372,state=online,offset=10157,lag=0
master_failover_state:no-failover
master_replid:a292603e2c96a6f451055e6d84a60795f81f2928
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:10157
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:10157
redis-cli -h 192.168.1.100 -p 16372 -a dongdong slaveof no one
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OK
redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
role:master
connected_slaves:1
slave0:ip=192.168.1.100,port=16371,state=online,offset=10731,lag=0
master_failover_state:no-failover
master_replid:a292603e2c96a6f451055e6d84a60795f81f2928
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:10731
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:10731
redis-cli -h 192.168.1.100 -p 16372 -a dongdong slaveof 192.168.1.100 16370
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OK
redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication
[root@master-slave ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
role:master
connected_slaves:2
slave0:ip=192.168.1.100,port=16371,state=online,offset=10941,lag=0
slave1:ip=192.168.1.100,port=16372,state=online,offset=10941,lag=0
master_failover_state:no-failover
master_replid:a292603e2c96a6f451055e6d84a60795f81f2928
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:10941
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:10941
二. 跨节点部署Redis主从
1. 环境介绍
操作系统 |
Centos 7 |
Centos 7 |
Centos 7 |
内核版本 |
Linux 3.10.0-957.el7.x86_64 |
Linux 3.10.0-957.el7.x86_64 |
Linux 3.10.0-957.el7.x86_64 |
主机名称 |
master |
slave1 |
slave2 |
IP |
192.168.1.100 |
192.168.1.200 |
192.168.1.250 |
端口 |
16380 |
16381 |
16382 |
2. 修改配置文件
2.1 master
mkdir -p /usr/local/redis/data/16380
mkdir -p /usr/local/redis/conf/16380
mkdir -p /usr/local/redis/log/16380
mkdir /usr/local/redis/run
cat > /usr/local/redis/conf/redis_16380.conf<<EOF
# 开启保护模式
protected-mode yes
# 添加本机的ip
bind 192.168.1.100
# 端口
port 16380
# pid存储目录
pidfile /usr/local/redis/run/redis_16380.pid
# 日志存储目录
logfile /usr/local/redis/log/redis_16380.log
# 数据存储目录,目录要提前创建好
dir /usr/local/redis/data/16380
# 设置实例的验证口令
requirepass dongdong
# 以认证的方式连接到master。 如果master中使用了“密码保护”,slave必须交付正确的授权密码,才能连接成功。
# 此配置项中值需要和master机器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守护进程
daemonize yes
EOF
2.2 slave 1
mkdir -p /usr/local/redis/data/16381
mkdir -p /usr/local/redis/conf/16381
mkdir -p /usr/local/redis/log/16381
mkdir /usr/local/redis/run
cat > /usr/local/redis/conf/redis_16381.conf <<EOF
# 开启保护模式
protected-mode yes
# 添加本机的ip
bind 192.168.1.200
# 端口
port 16381
# pid存储目录
pidfile /usr/local/redis/run/redis_16381.pid
# 日志存储目录
logfile /usr/local/redis/log/redis_16381.log
# 数据存储目录,目录要提前创建好
dir /usr/local/redis/data/16381
# 设置实例的验证口令
requirepass dongdong
# 以认证的方式连接到master。 如果master中使用了“密码保护”,slave必须交付正确的授权密码,才能连接成功。
# 此配置项中值需要和master机器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守护进程
daemonize yes
EOF
2.3 slave 2
mkdir -p /usr/local/redis/data/16382
mkdir -p /usr/local/redis/conf/16382
mkdir -p /usr/local/redis/log/16382
mkdir /usr/local/redis/run
cat > /usr/local/redis/conf/redis_16382.conf <<EOF
# 开启保护模式
protected-mode yes
# 添加本机的ip
bind 192.168.1.250
# 端口
port 16382
# pid存储目录
pidfile /usr/local/redis/run/redis_16382.pid
# 日志存储目录
logfile /usr/local/redis/log/redis_16382.log
# 数据存储目录,目录要提前创建好
dir /usr/local/redis/data/16382
# 设置实例的验证口令
requirepass dongdong
# 以认证的方式连接到master。 如果master中使用了“密码保护”,slave必须交付正确的授权密码,才能连接成功。
# 此配置项中值需要和master机器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守护进程
daemonize yes
EOF
3.启动Redis
3.1 master
redis-server /usr/local/redis/conf/redis_16380.conf
3.2 slave 1
redis-server /usr/local/redis/conf/redis_16381.conf
3.3 slave 2
redis-server /usr/local/redis/conf/redis_16382.conf
4. 开启主从
4.1 slave 1
redis-cli -h 192.168.1.200 -p 16381 -a dongdong slaveof 192.168.1.100 16380
[root@slave1 ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OK
redis-cli -h 192.168.1.200 -p 16381 -a dongdong info replication
[root@slave1 ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
role:slave
master_host:192.168.1.100
master_port:16380
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_read_repl_offset:532
slave_repl_offset:532
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:7330881025ee2709ee6c9c32ea3fcc9b6649893d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:532
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:518
4.2 slave 2
redis-cli -h 192.168.1.250 -p 16382 -a dongdong slaveof 192.168.1.100 16380
[root@slave2 ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OK
redis-cli -h 192.168.1.250 -p 16382 -a dongdong info replication
[root@slave2 ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
role:slave
master_host:192.168.1.100
master_port:16380
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_read_repl_offset:560
slave_repl_offset:560
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:7330881025ee2709ee6c9c32ea3fcc9b6649893d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:560
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:211
repl_backlog_histlen:350
4.3 master
redis-cli -h 192.168.1.100 -p 16380 -a dongdong info replication
[root@master ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
role:master
connected_slaves:2
slave0:ip=192.168.1.200,port=16381,state=online,offset=336,lag=0
slave1:ip=192.168.1.250,port=16382,state=online,offset=336,lag=1
master_failover_state:no-failover
master_replid:7330881025ee2709ee6c9c32ea3fcc9b6649893d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:336
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:336
5. 验证主从配置是否生效
redis-cli -h 192.168.1.100 -p 16380 -a dongdong -n 11
[root@master ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.100:16380[11]> keys *
(empty array)
192.168.1.100:16380[11]> set name dongdong
OK
192.168.1.100:16380[11]> set age 18
OK
192.168.1.100:16380[11]> keys *
1) "name"
2) "age"
192.168.1.100:16380[11]>
redis-cli -h 192.168.1.200 -p 16381 -a dongdong -n 11
[root@slave1 ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.200:16381[11]> get name
"dongdong"
192.168.1.200:16381[11]> get age
"18"
192.168.1.200:16381[11]> key *
(error) ERR unknown command 'key', with args beginning with: '*'
192.168.1.200:16381[11]> keys *
1) "age"
2) "name"
192.168.1.200:16381[11]>
redis-cli -h 192.168.1.250 -p 16382 -a dongdong -n 11
[root@slave2 ~]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.250:16382[11]> get name
"dongdong"
192.168.1.250:16382[11]> get age
"18"
192.168.1.250:16382[11]> keys *
1) "age"
2) "name"
192.168.1.250:16382[11]>
(error) READONLY You can't write against a read only replica.