在redis的主目录下面建立三个文件夹
[root@xxxxx redis-4.0.11]# pwd
/root/redis/redis-4.0.11
[root@xxxxx redis-4.0.11]# mkdir 6379
[root@xxxxx redis-4.0.11]# mkdir 6380
[root@xxxxx redis-4.0.11]# mkdir 6381
拷贝redis.conf分别到这三个文件夹下面:
[root@xxxxx redis-4.0.11]# cp redis.conf 6379/redis_6379.conf
[root@xxxxx redis-4.0.11]# cp redis.conf 6379/redis_6380.conf
[root@xxxxx redis-4.0.11]# cp redis.conf 6379/redis_6381.conf
分别修改三个配置文件
bind 0.0.0.0
Protected-mode no
port 6379
daemonize yes
logfile "6379.log"
pidfile "/var/run/redis_6379.pid"
dbfilename dump_6379.rdb
slave-priority 100
其中将6379作为主数据库,6380和6381作为从数据库需要多修改如下一处:
slaveof 127.0.0.1 6379
分别启动三个数据库
[root@xxxxx redis-4.0.11]# cd 6379
[root@xxxxx 6379]# redis-server redis_6379.conf
[root@xxxxx redis-4.0.11]# cd 6380
[root@xxxxx 6379]# redis-server redis_6380.conf
[root@xxxxx redis-4.0.11]# cd 6381
[root@xxxxx 6379]# redis-server redis_6381.conf
测试数据库
127.0.0.1:6379> set reptest hello
OK
127.0.0.1:6380> get reptest
"hello"
主从复制的原理
当一个从数据库接到命令后,会向主数据库发起sync命令。此时,主数据库会在后台进行快照保存,同时将进行快照的这段时间内收到的命令缓存起来,等快照结束后一并传输给从数据库。从数据库接到主数据库的数据后,首先会将主数据库的快照文件载入,随后将缓存的命令逐个执行。以上过程称为复制初始化。
复制初始化结束后,主数据库一旦接受到新的命令,会给从数据库发送,从而保证主从一致性。
从数据库在同步的过程中不会阻塞,可以继续响应客户端命令。可以配置一个参数slave-serve-stable-data no 使得从数据库在未完成同步的时候反馈错误信息给调用的客户端。
redis支持增量复制和无硬盘复制。
通过主从数据库的配置,可以实现数据库的读写分离。
当主数据库宕机后,可以设置其中一个从数据库,使其升级为主数据库:
slaveof no one
其从从数据库改变主数据库信息:
slaveof 127.0.0.1 8379
比较麻烦,哨兵可以解决这个问题,下一节,介绍哨兵。