环境准备
- 准备三台系统为CentOS7的主机
- master:192.168.152.71
- slave1:192.168.152.72
- slave2:192.168.152.73
一、安装
-
安装开发工具包
yum groupinstall "Development Tools" -y
-
获取 redis 源码包
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
-
解压
tar xf ./redis-4.0.9.tar.gz -C /opt/
-
进入源码包进行
cd /opt/redis-4.0.9
编译安装,执行下面命令make && make install
二、创建服务
创建redis服务以便用system命令管理
-
复制
redis_init_script
文件,到/etc/init.d/
下面,并改名为rediscp /opt/redis-4.0.9/utils/redis_init_script /etc/init.d/redis
-
编辑
/etc/init.d/redis
文件再文件第 5 行添加下面内容,以便 system 命令识别
##NEW### # chkconfig: 2345 10 90 # description: Start and Stop redis ##NEW###
查看下面几行信息
EXEC=/usr/local/bin/redis-server # 按照第 7 行指定的目录,查看文件是否存在,一般是存在的 CLIEXEC=/usr/local/bin/redis-cli # 按照第 8 行指定的目录,查看文件是否存在,一般是存在的 CONF="/etc/redis/${REDISPORT}.conf" # 按照第 11行指定的目录,查看文件是否存在,一般是没有的,${REDISPORT} 的值为 6379,再文件第 6 行 或者 9、10行显示,这也是服务的端口号 $EXEC $CONF $ # 更改第 20 行,再行尾加上 & 符号
如果 7、8 行指定的路径不存在,更改路径
EXEC=/opt/redis-4.0.9/src/redis-server CLIEXEC=/opt/redis-4.0.9/src/redis-cli
第 11 行指定的路径一般不存在,执行下面两个命令,该文件为主配置文件
mkdir /etc/redis cp /opt/redis-4.0.9/redis.conf /etc/redis/6379.conf
-
重新加载
systemd
配置systemctl daemon-reload
-
启动redis
systemctl start redis
-
进入 redis 客户端进行测试
redis-cli
三、开启 redis 持久化
- 开启持久化功能后,重启redis后,数据会自动通过持久化文件恢复!!
- 两种方式
- RDB(Redis DataBase)
- AOF(Append Only File)
因RDB数据不实时,但同时使用两者时服务器只会找AOF文件,所以RDB留作万一的手段。
RDB 开启状态,RDB 默认已经开启
vim /etc/redis/6379.conf
#dbfilename:持久化数据存储在本地的文件
dbfilename dump.rdb
#dir:持久化数据存储在本地的路径,如果是在/redis/redis-3.0.6/src下启动的redis-cli,则数据会存储在当前src目录下
dir ./
##snapshot触发的时机,save <seconds> <changes>
##如下为900秒后,至少有一个变更操作,才会snapshot
##对于此值的设置,需要谨慎,评估系统的变更操作密集程度
##可以通过“save “””来关闭snapshot功能
#save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个key60s进行存储。
save 900 1
save 300 10
save 60 10000
##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等
stop-writes-on-bgsave-error yes
##是否启用rdb文件压缩,默认为“yes”,压缩往 往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间
rdbcompression yes
开启AOF,配置文件
vim /etc/redis/6379.conf
#此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能
##只有在“yes”下,aof重写/文件同步等特性才会生效
appendonly yes
#指定aof文件名称
appendfilename appendonly.aof
#指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec
appendfsync everysec
#在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示“不暂缓”,“yes”表示“暂缓”,默认为“no”
no-appendfsync-on-rewrite no
#触发aof rewrite的最小文件尺寸
auto-aof-rewrite-min-size 64mb
#当Aof log增长超过指定比例时,重写log file, 设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。
auto-aof-rewrite-percentage 100
将appendonly no改为appendonly yes 即可
- 重启
systemctl restart redis
四、开启主从配置
修改 master 的主配置文件
vim /etc/redis/6379.conf
改第 69 行 bind 127.0.0.1
为,监听所有地址。
bind 0.0.0.0
如果只监听特定的可以这样写
bind 127.0.0.1 192.168.1.100
将同时监听127.0.0.1
和192.168.1.100
这两个 IP 地址。你也可以根据需要添加更多的 IP 地址。
改第 88 行 protected-mode yes
为,关闭保护模式。
protected-mode no
重启服务 systemctl restart redis
修改 slave1 和 slave2 的主配置文件
vim /etc/redis/6379.conf
改第 69 行 bind 127.0.0.1
为,监听所有地址。
bind 0.0.0.0
如果只监听特定的可以这样写
bind 127.0.0.1 192.168.1.100
将同时监听127.0.0.1
和192.168.1.100
这两个 IP 地址。你也可以根据需要添加更多的 IP 地址。
改第 88 行 protected-mode yes
为,关闭保护模式。
protected-mode no
改第 281 行 # slaveof <masterip> <masterport>
为,解除注释,并指定master主机IP地址和端口号
slaveof 192.168.152.71 6379 # 端口号再没有修改的情况下,默认 6379
重启服务 systemctl restart redis
五、测试
输入 redis-cli
进入redis 的客户端输入 info replication
查看主从状态
master 显示的状态
# Replication
role:master # 当前节点是主节点
connected_slaves:2 # 连接的从节点数量
slave0:ip=192.168.152.73,port=6379,state=online,offset=42,lag=1 # 从节点 1 信息
slave1:ip=192.168.152.72,port=6379,state=online,offset=42,lag=1 # 从节点 2 信息
master_replid:cb46ab0a79974e3f32ceb1e25a79c3578f6a3ee4 # 主节点复制 ID
master_replid2:0000000000000000000000000000000000000000 # 第二个主节点复制 ID (全零表示未用)
master_repl_offset:42 # 主节点复制偏移量
second_repl_offset:-1 # 第二主节点复制偏移量 (未用)
repl_backlog_active:1 # 复制积压缓冲区启用状态
repl_backlog_size:1048576 # 复制积压缓冲区大小 (1 MB)
repl_backlog_first_byte_offset:1 # 缓冲区第一个字节偏移量
repl_backlog_histlen:42 # 缓冲区有效数据长度
slave 显示的状态
# Replication
role:slave # 当前节点是从节点
master_host:192.168.152.71 # 主节点 IP 地址
master_port:6379 # 主节点端口
master_link_status:up # 主节点连接状态 (up 表示连接正常)
master_last_io_seconds_ago:1 # 距离上次 IO 操作的秒数
master_sync_in_progress:0 # 主节点同步是否正在进行 (0 表示未进行)
slave_repl_offset:42 # 从节点复制偏移量
slave_priority:100 # 从节点优先级 (数字越小优先级越高)
slave_read_only:1 # 从节点是否只读 (1 表示只读)
connected_slaves:0 # 当前从节点连接的从节点数量
master_replid:cb46ab0a79974e3f32ceb1e25a79c3578f6a3ee4 # 主节点复制 ID
master_replid2:0000000000000000000000000000000000000000 # 第二个主节点复制 ID (全零表示未用)
master_repl_offset:42 # 主节点复制偏移量
second_repl_offset:-1 # 第二主节点复制偏移量 (未用)
repl_backlog_active:1 # 复制积压缓冲区启用状态
repl_backlog_size:1048576 # 复制积压缓冲区大小 (1 MB)
repl_backlog_first_byte_offset:1 # 缓冲区第一个字节偏移量
repl_backlog_histlen:42 # 缓冲区有效数据长度
可以使用 set
添加数据,get
获取数据来进行测试,如:
set name lty # name 为索引,lty为值
gte name # get 获取该索引的值