文章目录
- 一、概述
- 二、测试环境准备
- 步骤一:查看主节点信息
- 步骤二:查看从节点01信息
- 步骤三:查看从节点02信息
- 三、节点基础配置
- 1.master节点基础配置
- 步骤一:下载redis安装包
- 步骤二:解压redis包
- 步骤三:编译redis(只需要执行make))
- 步骤四:创建redis目录,并且redis基本文件拷进去
- 步骤五:修改redis配置文件
- 步骤六:启动redis
- 步骤七:redis客户端连接测试
- 2.配置从节点(从节点与主节点的基础配置步骤一样)
- 步骤一:按照主节点的配置步骤配置(配置文件的不同之处如下)
- 步骤二:启动salve01
- 步骤三:启动从节点02
- 四、主从配置
- 1.主节点master信息
- 步骤一:修改配置文件信息,修改前。
- 步骤二:重启redis
- 2.配置从节点(以salve01为例)
- 步骤一:修改slave信息配置文件信息
- 步骤二:重启redis
- 五、验证主从复制
- 1.主节点信息查看
- 步骤一:查看主节点主从信息
- 步骤二:查看主节点的key
- 2.从节点01信息查看
- 步骤一:查看从节点主从信息
- 步骤二:查看从节点01的key
- 3.从节点02信息查看
- 步骤一:查看从节点主从信息
- 步骤二:查看从节点01的key
- 4.主节点添加字符串
- 步骤一:添加redis liang
- 步骤二:从节点01查看
- 步骤三:从节点02查看
- 六、redis管理脚本
一、概述
概述:为了分担读写压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步
二、测试环境准备
步骤一:查看主节点信息
系统 | IP | 主机名 | redis版本 |
centos-7.2 | 10.0.0.67 | redis-master | redis-4.0.9.tar.gz |
centos-7.2 | 10.0.0.68 | redis-slave01 | redis-4.0.9.tar.gz |
centos-7.2 | 10.0.0.69 | redis-slave02 | redis-4.0.9.tar.gz |
[root@redis ~]# ifconfig eno16777736|grep -w inet
inet 10.0.0.67 netmask 255.255.255.0 broadcast 10.0.0.255[root@redis ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)[root@redis ~]# uname -r
3.10.0-327.el7.x86_64
步骤二:查看从节点01信息
[root@redis-slave01 ~]# ifconfig eno16777736|grep -w inet
inet 10.0.0.68 netmask 255.255.255.0 broadcast 10.0.0.255[root@redis-slave01 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)[root@redis-slave01 ~]# uname -r
3.10.0-327.el7.x86_64
步骤三:查看从节点02信息
[root@redis-slave02 ~]# ifconfig eno16777736|grep -w inet
inet 10.0.0.69 netmask 255.255.255.0 broadcast 10.0.0.255[root@redis-slave02 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)[root@redis-slave02 ~]# uname -r
3.10.0-327.el7.x86_64
三、节点基础配置
1.master节点基础配置
步骤一:下载redis安装包
[root@redis ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz [root@redis ~]# ll redis-4.0.9.tar.gz
-rw-r–r--. 1 root root 1737022 Mar 26 2018 redis-4.0.9.tar.gz
步骤二:解压redis包
[root@redis ~]# tar zxf redis-4.0.9.tar.gz
[root@redis ~]# cd redis-4.0.9
[root@redis redis-4.0.9]# ls
00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils
BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests
步骤三:编译redis(只需要执行make))
[root@redis redis-4.0.9]# make
编译出错:zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
解决方法:make MALLOC=libc
[root@redis redis-4.0.9]#make MALLOC=libc
步骤四:创建redis目录,并且redis基本文件拷进去
[root@redis redis-4.0.9]# mkdir /usr/local/redis -p
[root@redis redis-4.0.9]# cp src/redis-server /usr/local/redis/
[root@redis redis-4.0.9]# cp src/redis-cli /usr/local/redis/
[root@redis redis-4.0.9]# cp redis.conf /usr/local/redis/
[root@redis redis-4.0.9]# mkdir /application
[root@redis redis-4.0.9]# ln -s /usr/local/redis/ /application/
步骤五:修改redis配置文件
[root@redis redis-4.0.9]# cd /application/redis/
[root@redis redis]# cp redis.conf redis.conf.backup
修改前
[root@redis redis]# egrep “^bind|^protected-mode|^\daemonize|# requirepass” redis.conf
bind 127.0.0.1
protected-mode yes
daemonize no
requirepass 000000
修改后
[root@redis redis]# egrep “^bind|^protected-mode|^daemonize|^requirepass” redis.conf
bind 10.0.0.67
protected-mode no
daemonize yes
requirepass 000000
步骤六:启动redis
[root@redis redis]# ./redis-server redis.conf
13064:C 04 Apr 20:32:15.767 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
13064:C 04 Apr 20:32:15.767 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=13064, just started
13064:C 04 Apr 20:32:15.767 # Configuration loaded[root@redis redis]# netstat -lntup|grep 6379
tcp 0 0 10.0.0.67:6379 0.0.0.0:* LISTEN 13065/./redis-serve
步骤七:redis客户端连接测试
[root@redis redis]# redis -h 10.0.0.67 -p 6379 -a 000000
10.0.0.67:6379> exit
2.配置从节点(从节点与主节点的基础配置步骤一样)
步骤一:按照主节点的配置步骤配置(配置文件的不同之处如下)
[root@redis-slave01 redis]# grep “^bind” redis.conf
bind 10.0.0.68
[root@redis-slave02 redis]# grep “^bind” redis.conf
bind 10.0.0.69
步骤二:启动salve01
[root@redis-slave01 redis]# ./redis-server ./redis.conf
3106:C 20 Apr 12:12:06.594 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3106:C 20 Apr 12:12:06.595 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=3106, just started
3106:C 20 Apr 12:12:06.595 # Configuration loaded
[root@redis-slave01 redis]# netstat -lntup|grep 6379
tcp 0 0 10.0.0.68:6379 0.0.0.0:* LISTEN 3107/./redis-server
步骤三:启动从节点02
[root@redis-slave02 redis]# ./redis-server ./redis.conf
3166:C 20 Apr 12:12:39.877 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3166:C 20 Apr 12:12:39.877 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=3166, just started
3166:C 20 Apr 12:12:39.877 # Configuration loaded
[root@redis-slave02 redis]# netstat -lntup|grep 6379
tcp 0 0 10.0.0.69:6379 0.0.0.0:* LISTEN 3167/./redis-server
四、主从配置
1.主节点master信息
步骤一:修改配置文件信息,修改前。
vi redis.conf
450 # min-slaves-to-write 3
451 # min-slaves-max-lag 10
修改后
450 min-slaves-to-write 2 ###有几个salve,如果salve的数量小于的话会报错“(error) NOREPLICAS Not enough good slaves to write.
”
451 min-slaves-max-lag 10 ###slave与master的超时时间
步骤二:重启redis
[root@redis redis]# ./redis-cli -p 6379 -h 10.0.0.67 -a 000000 shutdown
[root@redis redis]# ./redis-server ./redis.conf
2682:C 20 Apr 12:25:05.983 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2682:C 20 Apr 12:25:05.983 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=2682, just started
2682:C 20 Apr 12:25:05.983 # Configuration loaded
2.配置从节点(以salve01为例)
步骤一:修改slave信息配置文件信息
修改前
[root@redis-slave01 redis]# vi redis.conf
281 # slaveof
288 # masterauth
修改后
281 slaveof 10.0.0.67 6379
288 masterauth 000000
步骤二:重启redis
[root@redis-slave01 redis]# ./redis-cli -h 10.0.0.68 -a 000000 shutdown
[root@redis-slave01 redis]# ./redis-server ./redis.conf
3149:C 20 Apr 12:28:11.882 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3149:C 20 Apr 12:28:11.882 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=3149, just started
3149:C 20 Apr 12:28:11.882 # Configuration loaded
五、验证主从复制
1.主节点信息查看
步骤一:查看主节点主从信息
[root@redis redis]# ./redis-cli -h 10.0.0.67 -a 000000
10.0.0.67:6379> info replication
# Replication
role:master
connected_slaves:2
min_slaves_good_slaves:2
slave0:ip=10.0.0.68,port=6379,state=online,offset=240,lag=0
slave1:ip=10.0.0.69,port=6379,state=online,offset=240,lag=1
master_replid:6811d95c1e61ece1eaf8fdeb6edae1c1ce76a0f3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:240
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:240
步骤二:查看主节点的key
10.0.0.67:6379> KEYS *
(empty list or set)
2.从节点01信息查看
步骤一:查看从节点主从信息
[root@redis-slave01 redis]# ./redis-cli -h 10.0.0.68 -a 000000
10.0.0.68:6379> info replication
# Replication
role:slave
master_host:10.0.0.67
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:394
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:6811d95c1e61ece1eaf8fdeb6edae1c1ce76a0f3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:394
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:394
步骤二:查看从节点01的key
10.0.0.68:6379> KEYS *
(empty list or set)
3.从节点02信息查看
步骤一:查看从节点主从信息
[root@redis-slave02 redis]# ./redis-cli -h 10.0.0.69 -a 000000
10.0.0.69:6379> info replication
# Replication
role:slave
master_host:10.0.0.67
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:436
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:6811d95c1e61ece1eaf8fdeb6edae1c1ce76a0f3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:436
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:436
步骤二:查看从节点01的key
10.0.0.69:6379> KEYS *
(empty list or set)
4.主节点添加字符串
步骤一:添加redis liang
10.0.0.67:6379> set redis liang
OK
步骤二:从节点01查看
10.0.0.68:6379> KEYS *
1) “redis”
10.0.0.68:6379> get redis
“liang”
步骤三:从节点02查看
10.0.0.69:6379> KEYS *
1) “redis”
10.0.0.69:6379> get redis
“liang”
注:配置了主从,从节点无法直接添加数据。
10.0.0.68:6379> set redis01 test
(error) READONLY You can’t write against a read only slave.
六、redis管理脚本
[root@redis redis]# cat /scritp/redis.sh
#!/bin/bash
\# chkconfig: 3 3389 3390
. /etc/rc.d/init.d/functions
Redis_Port=6379
Redis_Host=10.0.0.67
Redis_Passwd=000000
Redis_Pid=/var/run/redis_${Redis_Port}.pid
Redis_Config=/application/redis/redis.conf
Redis_Cli=/application/redis/redis-cli
Redis_Server=/application/redis/redis-server
Redis_Num(){
if [ $# -ne 1 ];then
echo "Usage: /etc/init.d/redis {start|stop|status|restart|}"
exit 2
fi
}
Redis_start(){
if [ -f "$Redis_Pid" ];then
echo "redis .......running"
else
${Redis_Server} ${Redis_Config} >/dev/null 2>&1
action "redis .......start" /bin/true
fi
}
Redis_stop(){
if [ -f "$Redis_Pid" ];then
${Redis_Cli} -h ${Redis_Host} -p ${Redis_Port} -a ${Redis_Passwd} shutdown
action "redis .......stop" /bin/true
else
echo "redis .......shutdown"
fi
}
Redis_status(){
if [ -f "$Redis_Pid" ];then
echo "redis .......running"
else
echo "redis .......shutdown"
fi
}
Redis_restart(){
Redis_stop
Redis_start
}
Redis_Case(){
case $1 in
start|START)
Redis_start
;;
stop|STOP)
Redis_stop
;;
status|STATUS)
Redis_status
;;
restart)
Redis_restart
;;
*)
echo "Usage: /etc/init.d/redis {start|stop|status|restart|}"
;;
esac
}
Redis_Cmd(){
Redis_Num $1
Redis_Case $1
}
Redis_Cmd $1