注:此篇搭建的仅仅是主从复制集群环境(
非分布式
),并不能够实现高可用,这也是redis 2.6版本之前支持的,和2.6版本产生,2.8版本成熟的哨兵模式一样,不能够实现水平扩容
(均没有实现分布式处理,性能一定程度上取决于master节点的硬件配置
(内存与CPU等))。
1.主从复制(读写分离)
假设一家公司将用户的所有数据都存放在一个MySQL数据库,当该数据库宕机(挂了),那么他们的公司的网站是不是就不能访问或者用户数据全部丢失呢,这就是单点故障,为了避免这种故障,现在可以通过主从复制加集群的方案来解决此问题。
为了避免单点故障和效率问题,设置一个主数据库,n个从数据库,所有的写操作都在主数据库执行,所有的读操作都在从数据库执行
(读写分离)(master节点也可以执行读操作)
为了保持着更数据的一致性,master将数据复制到slave(主从复制),复制时不会阻塞主数据库对连接处理,采用多线程处理,主从复制采用优化的二进制协议,效率非常高
现在一般的公司都会做主从复制,例如MySQL的,Redis的等,包括关系型的和非关系型的数据库,都有提供此方案。
2.搭建Redis主从复制
需要至少两个redis数据库(
master:6379和slave:6380
)
1) 配置主从数据库
注:
因为没有试验用的服务器环境,因此改为单台虚拟机,并使用端口区分主从节点
① 首先需要新建两个文件夹分别为master和slave(redis是我的安装目录不是源码目录)mkdir -p /opt/redis/master
mkdir -p /opt/redis/slave
② 然后在源码根目录中将redis.conf文件分别拷贝到刚创建的两个目录中
cp redis.conf /opt/redis/master
扫描二维码关注公众号,回复: 5598155 查看本文章cp redis.conf /opt/redis/slave
[root@mycat master_slave]# pwd
/opt/redis/master_slave
[root@mycat master_slave]# ll
total 8
drwxr-xr-x. 2 root root 4096 Feb 28 06:36 master_6379
drwxr-xr-x. 2 root root 4096 Feb 28 06:51 slave_6380
[root@mycat master_slave]#
③ 分别修改两个节点的redis.conf文件:
daemonize yes # 两个节点的配置文件都设置为后台启动(守护进程)
port 6379 # master节点的redis.conf端口设置为6379,slave的设置为6380,不要一样,不然会端口占用
bind IP地址 # 主节点的配置文件各自的IP对应好
从节点redis.conf中加上:(也可以不加)
slaveof 主节点IP 6379
④ 启动master和slave:
redis-server /opt/redis/master_slave/master_6379/redis.conf
redis-server /opt/redis/master_slave/slave_6380/redis.conf
⑤ 查看进程:
[root@mycat master_6379]# ps -aux|grep -i redis
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 48502 0.2 0.9 161132 9952 ? Ssl 05:21 0:00 redis-server 192.168.183.81:6379
root 48507 0.1 0.7 154984 7860 ? Ssl 05:21 0:00 redis-server 192.168.183.81:6380
root 48516 0.0 0.0 103324 924 pts/0 S+ 05:27 0:00 grep -i redis
看到 占用6379和 6380的两个端口即表好似启动成功
⑥ 使用redis-cli 进入从节点的客户端:
redis -h 从节点IP -p 6380
连接上后,如果前面步骤中你没有在从节点的redis.conf配置文件中配置
slaveof 主节点IP 6379
,那么请在命令行输入:slaveof 主节点IP 6379
2) 查看主从节点信息
分别通过
redis -h 节点IP -p 节点端口
进入客户端两边都是输入:
info replication
例如我的主节点:
[root@mycat master_6379]# redis-cli -h 192.168.183.81 -p 6379 192.168.183.81:6379> info replication # Replication role:master connected_slaves:1 slave0:ip=192.168.183.81,port=6380,state=online,offset=1330,lag=0 master_replid:b01ff9cb594c13233a528e0bfae0e0133a403cec master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1330 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1330
上面显示了对应的master角色信息等
我的slave:
[root@mycat master_6379]# redis-cli -h 192.168.183.81 -p 6380 192.168.183.81:6380> info replication # Replication role:slave master_host:192.168.183.81 master_port:6379 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:1484 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:b01ff9cb594c13233a528e0bfae0e0133a403cec master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1484 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1484
显示Role为slave,即从节点。
到此,Redis主从复制搭建完毕。