【Linux基础服务教程】Redis多实例和主从复制
一、Redis多实例
环境准备:
redis实例:/opt/6380
数据目录:/opt/6380/data
日志:/var/log/redis_6380.log
redis实例:/opt/6381
数据目录:/opt/6381/data
日志:/var/log/redis_6381.log
1.规划实例目录
如果没有
tree
命令,可以使用yum install -y tree
安装
[root@master ~]# mkdir -p /opt/638{0,1}/{data,conf}
[root@master ~]# tree /opt
/opt
├── 6380
│ ├── conf
│ └── data
└── 6381
├── conf
└── data
2.修改配置文件
[root@master ~]# cp /usr/local/redis/conf/redis.conf /opt/6380/conf/ #复制一份原配置文件
[root@master ~]# vim /opt/6380/conf/redis.conf
bind 10.10.10.128 #按照规划,更改为本机IP
port 6380 #按照规划,更改端口
daemonize yes #开启后台运行
pidfile /var/run/redis_6380.pid #修改pid文件
loglevel warning #避免空间利用问题,修改日志等级为最高
logfile "/var/log/redis_6380.log" #按照规划,指定日志文件存放路径
dbfilename dump_6380.rdb #修改数据文件命名规则,方便区分其他
dir /opt/6380/data #按照规划,指定数据文件存放路径
appendonly yes #启用aof日志
appendfilename "appendonly_6380.aof" #为了方便区分其他,更改命名规则
[root@master ~]# cp /opt/6380/conf/redis.conf /opt/6381/conf/ #拷贝配置文件给第二个实例
[root@master ~]# sed -ri 's|6380|6381|g' /opt/6381/conf/redis.conf #快速修改里面的端口和配置文件命名规则
3.启动实例
[root@master ~]# redis-server /opt/6380/conf/redis.conf
[root@master ~]# redis-server /opt/6381/conf/redis.conf
4.检查实例是否成功启动
如果提示没有
netstat
命令,可以使用yum install -y net-tools
安装
[root@master ~]# netstat -tunlp | grep redis
tcp 0 0 10.10.10.128:6380 0.0.0.0:* LISTEN 6308/redis-server 1
tcp 0 0 10.10.10.128:6381 0.0.0.0:* LISTEN 6313/redis-server 1
5.测试数据读写
[root@master ~]# redis-cli -h 10.10.10.128 -p 6380
10.10.10.128:6380> set uid 1001
OK
10.10.10.128:6380> get uid
"1001"
[root@master ~]# redis-cli -h 10.10.10.128 -p 6381
10.10.10.128:6381> set uid 1002
OK
10.10.10.128:6381> get uid
"1002"
二、主从复制
作用: 避免
单点
故障、提高可用性
1.主从复制核心要素
- 基于异步进行数据复制
- 支持一主多从
- 复制数据时不影响前端业务, 非阻塞
- redis 2.6版本开始,从服务器为只读模式
2.修改配置文件
基于上面的
多实例
修改
10.10.10.128 6380
作从节点
10.10.10.128 6381
作主节点
[root@master ~]# vim /opt/6380/conf/redis.conf
replicaof 10.10.10.128 6381 #后面跟上主节点的IP和端口
# masterauth <master-password> #后面跟上主节点的密码,因为我们没有配置密码,故不做修改
3.重启实例
[root@master ~]# redis-cli -h 10.10.10.128 -p 6380 shutdown
[root@master ~]# redis-server /opt/6380/conf/redis.conf
4.检查主从
[root@master ~]# redis-cli -h 10.10.10.128 -p 6381 #登录主库
10.10.10.128:6381> info Replication #查看主从信息
# Replication
role:master
connected_slaves:1
slave0:ip=10.10.10.128,port=6380,state=online,offset=224,lag=1
master_replid:77eb31bbfbe2f21f6a8f3f19a3b5e58df5fd0ede
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:224
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:224
[root@master ~]# redis-cli -h 10.10.10.128 -p 6380 #登录从库
10.10.10.128:6380> info Replication #查看从库信息
# Replication
role:slave
master_host:10.10.10.128
master_port:6381
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:378
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:77eb31bbfbe2f21f6a8f3f19a3b5e58df5fd0ede
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:378
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:378
5.主从切换
A.模拟主库故障
[root@master ~]# redis-cli -h 10.10.10.128 -p 6381 shutdown
B.将原来的从提升到新主
[root@master ~]# redis-cli -h 10.10.10.128 -p 6380
10.10.10.128:6380> slaveof no one
OK
10.10.10.128:6380> info Replication
# Replication
role:master
connected_slaves:0 #此时从节点为0
master_replid:1cafa25aebcd5a8943818f151f66e6ccb97a3de6
master_replid2:77eb31bbfbe2f21f6a8f3f19a3b5e58df5fd0ede
master_repl_offset:574
second_repl_offset:575
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:574
C.注释掉原来的配置信息
[root@master ~]# vim /opt/6380/conf/redis.conf
# replicaof 10.10.10.128 6381
D.修改配置文件,配置新从库
[root@master ~]# vim /opt/6381/conf/redis.conf
replicaof 10.10.10.128 6380
E.模拟数据库恢复
[root@master ~]# redis-server /opt/6381/conf/redis.conf
F.登录数据库查看新的主从关系
[root@master ~]# redis-cli -h 10.10.10.128 -p 6381
10.10.10.128:6381> info replication
# Replication
role:slave
master_host:10.10.10.128
master_port:6380
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:616
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:1cafa25aebcd5a8943818f151f66e6ccb97a3de6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:616
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:575
repl_backlog_histlen:42
[root@master ~]# redis-cli -h 10.10.10.128 -p 6380
10.10.10.128:6380> info Replication
# Replication
role:master
connected_slaves:1 #有1个从库
slave0:ip=10.10.10.128,port=6381,state=online,offset=756,lag=0
master_replid:1cafa25aebcd5a8943818f151f66e6ccb97a3de6
master_replid2:77eb31bbfbe2f21f6a8f3f19a3b5e58df5fd0ede
master_repl_offset:756
second_repl_offset:575
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:756