解决高并发方案之一:主从复制
主从复制:一个redis可以有多个该服务的复制品,这个redis服务称为master,其他服业称为slaves
master负责写,slaves负责读,一主对多从
redis通过命令行实现主从同步
1.设置master的配置文件
[root@localhost ~]# vim /app/redis/etc/redis.conf bind 127.0.0.0.1 192.168.1.9 #绑定监听地址 port 6379 #默认开启的端口号 daemonize yes #以守护进程开启
supervised systemd #由systemd管理服务的启动、停止. pidfile /app/redis/run/redis_6379.pid #进程的pid保存路径 logfile "/app/redis/log/redis_6379.log" #日志文件保存路径 save 2 1 #每隔2秒进行一次快照保存 stop-writes-on-bgsave-error yes #当快照保存失败会禁止写入redis,默认为yes,一般改为no不开启 dbfilename dump.rdb #保存快照的文件名 dir /app/redis/data/ #保存快照的路径 requirepass 123456 #设置redis登录的连接密码
2.开启redis主服务并查看内存中的数据
[root@localhost ~]# redis-server /app/redis/etc/redis.conf [root@localhost ~]# redis-cli 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> keys * 1) "wang" 2) "dfd" 3) "lady" 4) "ddsds" 5) "name" 6) "zhang" 127.0.0.1:6379>
3.查看slave从服务状态,在未设置时,从服务默认也为master主服务
127.0.0.1:6379> info replication #Replication role:master connected_slaves:0 master_replid:177a7792d02eb8e89c07b5441825a0f50d8ae8b8 master_replid2:37938cb9db73839bfc72e3fc805d42c56dc6352d master_repl_offset:2240 second_repl_offset:2241 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:57 repl_backlog_histlen:2184
4.设置slave从服务的配置文件
[root@localhost ~]# vim /app/redis/etc/redis.conf bind 127.0.0.0.1 192.168.1.106 #绑定监听地址 port 6379 #默认开启的端口号 daemonize yes #以守护进程开启 dir /app/redis/data/ #保存快照的路径 requirepass 123456 #设置redis登录的连接密码
5.slave从服务命令行操作实现主从连接
[root@localhost ~]# redis-server /app/redis/etc/redis.conf [root@localhost ~]# redis-cli 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> slaveof 192.168.1.9 6379 #设置为另一台服务的从服务 127.0.0.1:6379>config set masterauth 123456 #配置与主服务匹配的连接密码 127.0.0.1:6379> info replication #查看主从连接是够成功 #Replication role:slave #已经切换为从服务 master_host:192.168.1.9 #主服服主机的ip master_port:6379 master_link_status:up #主从连接建立成功
......
127.0.0.1:6379> keys * #查看从主服器同步到的数据
1) "wang"
2) "name"
3) "dfd"
4) "zhang"
5) "ddsds"
6) "lady"
6.也可在命令行取消主从同步
127.0.0.1:6379> slaveof no one #取消主从同步的命令 OK 127.0.0.1:6379> info replication #查看是否取消成功 #Replication role:master #已切换到master connected_slaves:0 master_replid:77eab93a7015b0d338d1c44040d632e698d0159b master_replid2:37938cb9db73839bfc72e3fc805d42c56dc6352d master_repl_offset:4004 second_repl_offset:4005 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2241 repl_backlog_histlen:1764
redis通过配置文件实现主从同步
1.只需配置从服务配置文件 [root@localhost ~]# vim /app/redis/etc/redis.conf slaveof 192.168.1.9 6379 #添加属于某台主机的从 服务 masterauth 123456 #从服务连接主服的密码 slave-read-only yes #从服务只读,不可在命令行写入数据 2.重新启动从服务即实现主从连接 [root@localhost ~]# redis-server /app/redis/etc/redis.conf [root@localhost ~]# redis-cli 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> info replication #Replication role:slave master_host:192.168.1.9 master_port:6379 master_link_status:up
登陆从服务器客户端
./bin/redis-cli -p 6380 -a name
变回主:slaveof no one
变回从:slaveof ip port
参考文章:https://www.linuxidc.com/Linux/2019-08/159728.htm