Redis 主从搭建的实现(同主机和跨节点)
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一. 同主机搭建Redis主从</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">1. 环境介绍</a></li><li><a href="#_lab2_0_1">2. 环境前准备工作</a></li><li><a href="#_lab2_0_2">3. 安装 Redis 7.2.5</a></li><li><a href="#_lab2_0_3">4. redis 配置修改并且启动</a></li><ul class="third_class_ul"><li><a href="#_label3_0_3_0">4.1 修改配置文件</a></li><li><a href="#_label3_0_3_1">4.2 编写启动脚本</a></li></ul><li><a href="#_lab2_0_4">5. 开启主从</a></li><ul class="third_class_ul"><li><a href="#_label3_0_4_2">5.1 开启</a></li><li><a href="#_label3_0_4_3">5.2 主库实例查看主从信息</a></li><li><a href="#_label3_0_4_4">5.3 从库实例查看主从信息</a></li><li><a href="#_label3_0_4_5">5.4 验证主从配置是否生效</a></li></ul><li><a href="#_lab2_0_5">6. 解除 192.168.1.100:16372 实例主从</a></li><ul class="third_class_ul"></ul></ul><li><a href="#_label1">二. 跨节点部署Redis主从</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_6">1. 环境介绍</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_7">2. 修改配置文件</a></li><ul class="third_class_ul"><li><a href="#_label3_1_7_6">2.1 master</a></li><li><a href="#_label3_1_7_7">2.2 slave 1</a></li><li><a href="#_label3_1_7_8">2.3 slave 2</a></li></ul><li><a href="#_lab2_1_8">3.启动Redis</a></li><ul class="third_class_ul"><li><a href="#_label3_1_8_9">3.1 master</a></li><li><a href="#_label3_1_8_10">3.2 slave 1</a></li><li><a href="#_label3_1_8_11">3.3 slave 2</a></li></ul><li><a href="#_lab2_1_9">4. 开启主从</a></li><ul class="third_class_ul"><li><a href="#_label3_1_9_12">4.1 slave 1</a></li><li><a href="#_label3_1_9_13">4.2 slave 2</a></li><li><a href="#_label3_1_9_14">4.3 master</a></li></ul><li><a href="#_lab2_1_10">5. 验证主从配置是否生效</a></li><ul class="third_class_ul"></ul></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一. 同主机搭建Redis主从</h2><p class="maodian"><a name="_lab2_0_0"></a></p><p class="maodian"><a name="_lab2_1_6"></a></p><h3>1. 环境介绍</h3>
<blockquote><p><strong>同机器 一主两从</strong></p></blockquote>
<table><thead><tr><th>操作系统</th><th>Centos 7</th></tr></thead><tbody><tr><td>内核版本</td><td>Linux 3.10.0-957.el7.x86_64</td></tr><tr><td>主机名称</td><td>master-salve</td></tr><tr><td>IP地址</td><td>192.168.1.100</td></tr><tr><td>端口</td><td>master: 16370 slave1: 16371 slave2: 16372</td></tr><tr><td>Redis</td><td>7.2.5</td></tr></tbody></table>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>2. 环境前准备工作</h3>
<div class="jb51code"><pre class="brush:bash;"># 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 修改 hostname
hostnamectl set-hostname xxxx# 修改后退出当前终端重新连接即可
# 更新下软件源
# 地址 https://developer.aliyun.com/mirror/
# 时区调整,时间校准
date -R
timedatectl set-timezone Asia/Shanghai
yum -y install ntp
ntpdate ntp1.aliyun.com
# 关闭 selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
</pre></div>
<p class="maodian"><a name="_lab2_0_2"></a></p><h3>3. 安装 Redis 7.2.5</h3>
<div class="jb51code"><pre class="brush:bash;"># 下载地址
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
# 安装 注意如果安装提示python3不存在 执行 yum install -y python3
make install PREFIX=/usr/local/redis
# 配置环境变量
vi /etc/profile.d/redis.sh
#!/bin/bash
export REDIS_HOME=/usr/local/redis
export PATH=$PATH:$REDIS_HOME/bin
# 使其配置生效
source /etc/profile.d/redis.sh
</pre></div>
<p class="maodian"><a name="_lab2_0_3"></a></p><h3>4. redis 配置修改并且启动</h3>
<p class="maodian"><a name="_label3_0_3_0"></a></p><h4>4.1 修改配置文件</h4>
<div class="jb51code"><pre class="brush:bash;"># 创建redis数据存储目录
mkdir -p /usr/local/redis/data/1637{0..2}
# 创建redis配置文件存储目录
mkdir -p /usr/local/redis/conf/1637{0..2}
# 创建redis日志存储目录
mkdir -p /usr/local/redis/log/1637{0..2}
# 创建redis pid存储目录
mkdir /usr/local/redis/run
# redis配置文件 16370
# 开启保护模式
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
# redis配置文件 16371
# 开启保护模式
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
# redis配置文件 16372
# 开启保护模式
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
# 复制下面命令即可
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
</pre></div>
<p class="maodian"><a name="_label3_0_3_1"></a></p><h4>4.2 编写启动脚本</h4>
<div class="jb51code"><pre class="brush:bash;"># 启动脚本
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
#!/bin/bash
kill -9 $(ps -ef | grep 1637 | grep -v grep | awk '{print $2}')
# 赋予可执行权限
chmod +x /usr/local/redis/bin/master-slave_shutdown.sh
</pre></div>
<p class="maodian"><a name="_lab2_0_4"></a></p><h3>5. 开启主从</h3>
<p class="maodian"><a name="_label3_0_4_2"></a></p><h4>5.1 开启</h4>
<div class="jb51code"><pre class="brush:sql;"># 以"192.168.1.100:16370"实例为主库,以"192.168.1.100:16371"实例和"192.168.1.100:16372"实例为从库。
# -a 参数指定密码
# 从库实例开启主从
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
# Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# 警告:在命令行界面上使用带有“-a”或“-u”选项的密码可能不安全。可以忽略
# 解决方式
# redis-cli -h 192.168.1.100 -p 16371 -a dongdong --no-auth-warningslaveof 192.168.1.100 16370
</pre></div>
<p class="maodian"><a name="_label3_0_4_3"></a></p><h4>5.2 主库实例查看主从信息</h4>
<div class="jb51code"><pre class="brush:sql;"> redis-cli -h 192.168.1.100 -p 16370 -a dongdonginfo replication
# redis-cli -h 192.168.1.100 -p 16370 -a dongdonginfo replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
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
</pre></div>
<p class="maodian"><a name="_label3_0_4_4"></a></p><h4>5.3 从库实例查看主从信息</h4>
<div class="jb51code"><pre class="brush:sql;"># 192.168.1.100:16371 查看主从信息
redis-cli -h 192.168.1.100 -p 16371 -a dongdonginfo replication
# redis-cli -h 192.168.1.100 -p 16371 -a dongdonginfo replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
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
</pre></div>
<p class="maodian"><a name="_label3_0_4_5"></a></p><h4>5.4 验证主从配置是否生效</h4>
<div class="jb51code"><pre class="brush:sql;"># "192.168.1.100:16370"实例主库的11号数据库创建测试数据
redis-cli -h 192.168.1.100 -p 16370 -a dongdong -n 11
# redis-cli -h 192.168.1.100 -p 16370 -a dongdong -n 11
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.100:16370> keys *
(empty array)
192.168.1.100:16370> set name dongdong
OK
192.168.1.100:16370> set age 18
OK
192.168.1.100:16370> keys *
1) "age"
2) "name"
# "192.168.1.100:16371"实例从库的11号数据库查看是否同步主库的11号数据库
redis-cli -h 192.168.1.100 -p 16371 -a dongdong -n 11
# redis-cli -h 192.168.1.100 -p 16371 -a dongdong -n 11
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.100:16371> keys *
1) "name"
2) "age"
192.168.1.100:16371> get name
"dongdong"
192.168.1.100:16371> get age
"18"
192.168.1.100:16371>
# "192.168.1.100:16372"实例从库的11号数据库查看是否同步主库的11号数据库
redis-cli -h 192.168.1.100 -p 16372 -a dongdong -n 11
# redis-cli -h 192.168.1.100 -p 16372 -a dongdong -n 11
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.100:16372> keys *
1) "age"
2) "name"
192.168.1.100:16372> get name
"dongdong"
192.168.1.100:16372> get age
"18"
192.168.1.100:16372>
</pre></div>
<p class="maodian"><a name="_lab2_0_5"></a></p><h3>6. 解除 192.168.1.100:16372 实例主从</h3>
<div class="jb51code"><pre class="brush:sql;"># 192.168.1.100:16372 查看主从信息
redis-cli -h 192.168.1.100 -p 16372 -a dongdonginfo replication
# redis-cli -h 192.168.1.100 -p 16372 -a dongdonginfo replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
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
#192.168.1.100:16370 查看主从信息
redis-cli -h 192.168.1.100 -p 16370 -a dongdonginfo replication
#redis-cli -h 192.168.1.100 -p 16370 -a dongdonginfo replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
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
# 解除 192.168.1.100:16372 主从信息
redis-cli -h 192.168.1.100 -p 16372 -a dongdong slaveof no one
# redis-cli -h 192.168.1.100 -p 16372 -a dongdong slaveof no one
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OK
# 再次查看 192.168.1.100:16370 查看主从信息
redis-cli -h 192.168.1.100 -p 16370 -a dongdonginfo replication
# redis-cli -h 192.168.1.100 -p 16370 -a dongdonginfo replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
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
# 只剩下一个 从节点了
# 把192.168.1.100:16372 添加回来
redis-cli -h 192.168.1.100 -p 16372 -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
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OK
# 此时再看192.168.1.100:16370 查看主从信息
redis-cli -h 192.168.1.100 -p 16370 -a dongdonginfo replication
# redis-cli -h 192.168.1.100 -p 16370 -a dongdonginfo replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
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
# slaves 变成2了
</pre></div>
<p class="maodian"><a name="_label1"></a></p><h2>二. 跨节点部署Redis主从</h2>
<h3>1. 环境介绍</h3>
<table><thead><tr><th>操作系统</th><th>Centos 7</th><th>Centos 7</th><th>Centos 7</th></tr></thead><tbody><tr><td>内核版本</td><td>Linux 3.10.0-957.el7.x86_64</td><td>Linux 3.10.0-957.el7.x86_64</td><td>Linux 3.10.0-957.el7.x86_64</td></tr><tr><td>主机名称</td><td>master</td><td>slave1</td><td>slave2</td></tr><tr><td>IP</td><td>192.168.1.100</td><td>192.168.1.200</td><td>192.168.1.250</td></tr><tr><td>端口</td><td>16380</td><td>16381</td><td>16382</td></tr></tbody></table>
<p class="maodian"><a name="_lab2_1_7"></a></p><h3>2. 修改配置文件</h3>
<p class="maodian"><a name="_label3_1_7_6"></a></p><h4>2.1 master</h4>
<div class="jb51code"><pre class="brush:bash;"># 创建redis数据存储目录
mkdir -p /usr/local/redis/data/16380
# 创建redis配置文件存储目录
mkdir -p /usr/local/redis/conf/16380
# 创建redis日志存储目录
mkdir -p /usr/local/redis/log/16380
# 创建redis pid存储目录
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
</pre></div>
<p class="maodian"><a name="_label3_1_7_7"></a></p><h4>2.2 slave 1</h4>
<div class="jb51code"><pre class="brush:bash;"># 创建redis数据存储目录
mkdir -p /usr/local/redis/data/16381
# 创建redis配置文件存储目录
mkdir -p /usr/local/redis/conf/16381
# 创建redis日志存储目录
mkdir -p /usr/local/redis/log/16381
# 创建redis pid存储目录
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
</pre></div>
<p class="maodian"><a name="_label3_1_7_8"></a></p><h4>2.3 slave 2</h4>
<div class="jb51code"><pre class="brush:bash;"># 创建redis数据存储目录
mkdir -p /usr/local/redis/data/16382
# 创建redis配置文件存储目录
mkdir -p /usr/local/redis/conf/16382
# 创建redis日志存储目录
mkdir -p /usr/local/redis/log/16382
# 创建redis pid存储目录
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
</pre></div>
<p class="maodian"><a name="_lab2_1_8"></a></p><h3>3.启动Redis</h3>
<p class="maodian"><a name="_label3_1_8_9"></a></p><h4>3.1 master</h4>
<div class="jb51code"><pre class="brush:sql;">redis-server/usr/local/redis/conf/redis_16380.conf
</pre></div>
<p class="maodian"><a name="_label3_1_8_10"></a></p><h4>3.2 slave 1</h4>
<div class="jb51code"><pre class="brush:sql;">redis-server/usr/local/redis/conf/redis_16381.conf
</pre></div>
<p class="maodian"><a name="_label3_1_8_11"></a></p><h4>3.3 slave 2</h4>
<div class="jb51code"><pre class="brush:sql;">redis-server/usr/local/redis/conf/redis_16382.conf
</pre></div>
<p class="maodian"><a name="_lab2_1_9"></a></p><h3>4. 开启主从</h3>
<p class="maodian"><a name="_label3_1_9_12"></a></p><h4>4.1 slave 1</h4>
<div class="jb51code"><pre class="brush:sql;"># 从库开启主从
redis-cli -h 192.168.1.200 -p 16381 -a dongdong slaveof 192.168.1.100 16380
#redis-cli -h 192.168.1.200 -p 16381 -a dongdong slaveof 192.168.1.100 16380
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 dongdonginfo replication
# redis-cli -h 192.168.1.200 -p 16381 -a dongdonginfo replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
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
</pre></div>
<p class="maodian"><a name="_label3_1_9_13"></a></p><h4>4.2 slave 2</h4>
<div class="jb51code"><pre class="brush:sql;"># 从库开启主从
redis-cli -h 192.168.1.250 -p 16382 -a dongdong slaveof 192.168.1.100 16380
# redis-cli -h 192.168.1.250 -p 16382 -a dongdong slaveof 192.168.1.100 16380
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 dongdonginfo replication
# redis-cli -h 192.168.1.250 -p 16382 -a dongdonginfo replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
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
</pre></div>
<p class="maodian"><a name="_label3_1_9_14"></a></p><h4>4.3 master</h4>
<div class="jb51code"><pre class="brush:sql;"># 查看 主从信息
redis-cli -h 192.168.1.100 -p 16380 -a dongdonginfo replication
# redis-cli -h 192.168.1.100 -p 16380 -a dongdonginfo replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
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
</pre></div>
<p class="maodian"><a name="_lab2_1_10"></a></p><h3>5. 验证主从配置是否生效</h3>
<div class="jb51code"><pre class="brush:sql;"># "master主机名"实例主库的11号数据库创建测试数据
redis-cli -h 192.168.1.100 -p 16380 -a dongdong -n 11
# redis-cli -h 192.168.1.100 -p 16380 -a dongdong -n 11
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.100:16380> keys *
(empty array)
192.168.1.100:16380> set name dongdong
OK
192.168.1.100:16380> set age 18
OK
192.168.1.100:16380> keys *
1) "name"
2) "age"
192.168.1.100:16380>
# "slave1主机名"实例从库的11号数据库查看是否同步主库的11号数据库
redis-cli -h 192.168.1.200 -p 16381 -a dongdong -n 11
# redis-cli -h 192.168.1.200 -p 16381 -a dongdong -n 11
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.200:16381> get name
"dongdong"
192.168.1.200:16381> get age
"18"
192.168.1.200:16381> key *
(error) ERR unknown command 'key', with args beginning with: '*'
192.168.1.200:16381> keys *
1) "age"
2) "name"
192.168.1.200:16381>
# "slave2主机名"实例从库的11号数据库查看是否同步主库的11号数据库
redis-cli -h 192.168.1.250 -p 16382 -a dongdong -n 11
# redis-cli -h 192.168.1.250 -p 16382 -a dongdong -n 11
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.1.250:16382> get name
"dongdong"
192.168.1.250:16382> get age
"18"
192.168.1.250:16382> keys *
1) "age"
2) "name"
192.168.1.250:16382>
# 如果针对 slave1 或者 slave2 进行写入操作 则会报错 错误信息只能在master操作哦
(error) READONLY You can't write against a read only replica.
</pre></div>
頁:
[1]