您的位置:首页 > 数据库 > Redis

NoSQL 主从复制简介与Redis主从复制环境搭建

qq_33713328 2019-02-28 21:55 61 查看

注:此篇搭建的仅仅是主从复制集群环境(

非分布式
),
并不能够实现高可用,这也是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

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主从复制搭建完毕。

标签: