版权声明:本文为博主原创文章,未经博主允许不得转载
本文转自:http://www.cnblogs.com/lgeng/p/6623336.html
一,单机多实例:
Redis官网: https://redis.io/
1,安装:
yum -y install gcc gcc-c++ #安装编译工具
[iyunv@localhost data]#
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
[iyunv@localhost data]# tar xzf redis-3.2.8.tar.gz
[iyunv@localhost data]# cd redis-3.2.8
[iyunv@localhost data]# make
[iyunv@localhost data]# mv redis-3.2.8 /usr/local/redis
注意:可直接 yum install redis -y 安装
启动:(默认启动6379端口)
[iyunv@localhost redis]# /usr/local/redis/src/redis-server
2,验证:使用 redis-cli命令验证 (注意路径)
[iyunv@localhost src]# /usr/local/redis/src/redis-cli -p 6379
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379>
127.0.0.1:6379>
3,配置环境变量
输入redis-server和redis-cli命令,每次输入完整的路径
将路径添加到PATH变量中
echo 'PATH=${PATH}:/usr/local/redis/src/' >> /etc/profile
source
/etc/profile #<== 重新加载配置文件
二,单机多实例
创建不同实例的数据存放目录 分别创建6380,6381,6382 三个实例
每个实例目录中分别创建 conf,db,log目录,并拷贝配置文件到conf中
[iyunv@localhost /]# mkdir -p /data/redis/{6380,6381,6382}/{conf,db,log}
[iyunv@localhost
/]# cp /usr/local/redis/redis.conf /data/redis/6380/conf/
[iyunv@localhost
/]# cp /usr/local/redis/redis.conf /data/redis/6381/conf/
[iyunv@localhost
/]# cp /usr/local/redis/redis.conf /data/redis/6382/conf/
[iyunv@localhost
/]#
[iyunv@localhost
/]# cd /data/redis
[iyunv@localhost redis]#
ls
6380 6381 6382
[iyunv@localhost redis]# tree
.
├── 6380
│ ├── conf
│ │ └── redis.conf
│ ├── db
│ └── log
├── 6381
│ ├── conf
│ │ └── redis.conf
│ ├── db
│ └── log
└── 6382
├── conf
│ └── redis.conf
├── db
└── log
12 directories, 3 files
[iyunv@localhost redis]#
[iyunv@localhost redis]#
修改配置文件:
将redis.conf修改为对应的实例参数,修改部分如下
[iyunv@localhost redis]# grep "6380\|daemonize" 6380/conf/redis.conf
daemonize yes
<== daemon进程运行
pidfile
/data/redis/6380/redis.pid <== 进程id存放文件
port
6380 <== 端口
logfile
/data/redis/6380/log/redis.log <== 日志目录
dir /data/redis/6380/db/ <== db目录
[iyunv@localhost redis]#
[iyunv@localhost redis]#
grep "6381" 6381/conf/redis.conf
daemonize yes
pidfile
/data/redis/6381/redis.pid
port
6381
logfile
/data/redis/6381/log/redis.log
dir /data/redis/6381/db/
[iyunv@localhost redis]#
[iyunv@localhost redis]#
grep "6382" 6382/conf/redis.conf
daemonize yes
pidfile
/data/redis/6382/redis.pid
port
6382
logfile
/data/redis/6382/log/redis.log
dir /data/redis/6382/db/
[iyunv@localhost redis]#
[iyunv@localhost redis]#
启动实例:
[iyunv@localhost redis]# redis-server /data/redis/6380/conf/redis.conf
[iyunv@localhost redis]# redis
-server /data/redis/6381/conf/redis.conf
[iyunv@localhost redis]# redis
-server /data/redis/6382/conf/redis.conf
[iyunv@localhost redis]#
[iyunv@localhost redis]# netstat
-ntlp | grep -E ":6380|:6381|:6382"
tcp
0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 14301/redis-server
tcp
0 0 127.0.0.1:6381 0.0.0.0:* LISTEN 14305/redis-server
tcp
0 0 127.0.0.1:6382 0.0.0.0:* LISTEN 14309/redis-server
[iyunv@localhost redis]#
[iyunv@localhost redis]#
验证(略) redis-cli -p 6380 ; redi-cli -p 6381 ; redis-cli -p 6382
三,配置主从同步
修改从库配置,6380实例为主库, 从库为 6381,6382
[iyunv@localhost ~]# vim /data/redis/6381/conf/redis.conf
[iyunv@localhost
~]# vim /data/redis/6382/conf/redis.conf
################################# REPLICATION #################################
# Master
-Slave replication. Use slaveof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
#
1) Redis replication is asynchronous, but you can configure a master to
# stop accepting writes
if it appears to be not connected with at least
# a given number of slaves.
#
2) Redis slaves are able to perform a partial resynchronization with the
# master
if the replication link is lost for a>
# time. You may want to configure the replication backlog>
# sections of this file) with a sensible value depending on your needs.
#
3) Replication is automatic and does not need user intervention. After a
# network partition slaves automatically try to reconnect to masters
# and resynchronize with them.
#
# slaveof
<masterip> <masterport>
slaveof
127.0.0.1 6380
# If the master is password protected (using the
"requirepass" configuration
# directive below) it is possible to tell the slave to authenticate before
# starting the replication synchronization process, otherwise the master will
# refuse the slave request.
#
# masterauth
<master-password>
# When a slave loses its connection with the master, or when the replication
# is still
in progress, the slave can act in two different ways:
#
#
1) if slave-serve-stale-data is set to 'yes' (the default) the slave will
# still reply to client requests, possibly with out of
date data, or the
# data set may just be empty
if this is the first synchronization.
#
#
2) if slave-serve-stale-data is set to 'no' the slave will reply with
# an error
"SYNC with master in progress" to all the kind of commands
验证:
先在主库上info一下
[iyunv@localhost 6380]# redis-cli -p 6380 "info"
.
.此处略去n行
.
# Replication
role:master
<== 角色:master
connected_slaves:
2 <== slave链接数 2
slave0:ip
=127.0.0.1,port=6381,state=online,offset=141,lag=1 <== slave 的信息
slave1:ip
=127.0.0.1,port=6382,state=online,offset=141,lag=1
master_repl_offset:
141
repl_backlog_active:
1
repl_backlog_size:
1048576
repl_backlog_first_byte_offset:
2
repl_backlog_histlen:
140
看看从库
[iyunv@localhost 6381]# redis-cli -p 6381 "info"
...
.此处略去n行
....
# Replication
role:slave
<==角色 slave
master_host:
127.0.0.1 <==master主机
master_port:
6380 <== master端口
master_link_status:up
<== 链接状态 up
master_last_io_seconds_ago:
5
master_sync_in_progress:
0
slave_repl_offset:
673
slave_priority:
100
slave_read_only:
1
connected_slaves:
0
master_repl_offset:
0
repl_backlog_active:
0
repl_backlog_size:
1048576
repl_backlog_first_byte_offset:
0
repl_backlog_histlen:
0
[iyunv@localhost 6382]# redis-cli -p 6382 "info"
...
.此处略去n行
....
# Replication
role:slave
master_host:
127.0.0.1
master_port:
6380
master_link_status:up
master_last_io_seconds_ago:
4
master_sync_in_progress:
0
slave_repl_offset:
911
slave_priority:
100
slave_read_only:
1
connected_slaves:
0
master_repl_offset:
0
repl_backlog_active:
0
repl_backlog_size:
1048576
repl_backlog_first_byte_offset:
0
repl_backlog_histlen:
0
在主库上写入数据:
[iyunv@localhost 6380]# redis-cli -p 6380
127.0.0.1:6380> set k1 v1
OK
127.0.0.1:6380> keys *
1) "k1"
127.0.0.1:6380> get k1
"v1"
127.0.0.1:6380>
从库上查看是否已同步
[iyunv@localhost 6381]# redis-cli -p 6381
127.0.0.1:6381> keys *
1) "k1"
127.0.0.1:6381> get k1
"v1"
127.0.0.1:6381>
127.0.0.1:6381> exit
[iyunv@localhost 6381]# redis-cli -p 6382
127.0.0.1:6382> keys *
1) "k1"
127.0.0.1:6382> get k1
"v1"
127.0.0.1:6382>
主库删除数据:
[iyunv@localhost 6380]# redis-cli -p 6380
127.0.0.1:6380> keys *
1) "k1"
127.0.0.1:6380> del k1
(integer) 1
127.0.0.1:6380> keys *
(empty list or set)
127.0.0.1:6380>
从库查看
[iyunv@localhost 6381]# redis-cli -p 6381
127.0.0.1:6381> keys *
(empty list or set)
127.0.0.1:6381> exit
[iyunv@localhost 6381]# redis-cli -p 6382
127.0.0.1:6382> keys *
(empty list or set)
127.0.0.1:6382>
127.0.0.1:6382> exit
[iyunv@localhost 6381]#
END
本文转自:http://www.cnblogs.com/lgeng/p/6623336.html |