文章目录

  • 一、概述
  • 二、测试环境准备
  • 步骤一:查看主节点信息
  • 步骤二:查看从节点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