redis主从同步与读写分离

一、原理

Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。下面是关于redis主从复制的一些特点:

1.master可以有多个slave。

2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构。

3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。

4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求,比如sort操作可以使用slave来处理。也可以用来做简单的数据冗余。

5.可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

二、主从复制过程

当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连 接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件 后,master就发送文件给slave,slave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命 令转发给slave。而且后续master收到的写命令都会通过开始建立的连接发送给slave。从master到slave的同步数据的命令和从 client发送的命令使用相同的协议格式。当master和slave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave。

三、配置与应用

1)redis安装

(1)下载redis

# wget http://download.redis.io/releases/redis-3.0.7.tar.gz

(2)解压安装

# tar zxvf redis-3.0.7.tar.gz
# cd redis-3.0.7
# make PREFIX=/data/server/redis install

(3)配置redis

①:创建redis配置文件目录并拷贝配置文件至此目录

# mkdir -p /data/server/redis/etc
# cp redis.conf  /data/server/redis/etc

②:设置redis运行方式为后台运行

# sed -i ‘s/daemonize no/daemonize yes/g‘ /data/server/redis/etc/redis.conf

③:下载redis init 启动文件至 init.d 目录下,并赋予权限.

# wget -c http://soft.vpser.net/lnmp/ext/init.d.redis -O /etc/init.d/redis
# chmod 755 /etc/init.d/redis

④:创建redis日志目录及日志存放文件

# mkdir /data/server/redis/logs
# touch /data/server/redis/logs/redis.log

⑤:创建pid目录与数据存储目录

# mkdir /data/server/redis/run
# mkdir /data/server/redis/db

⑥:修改 vim /etc/init.d/redis 启动文件中文件path

2)redis主从同步配置

(1)Master服务器端:

# grep -v ‘^#‘ redis.conf |grep -v ‘^$‘                      
daemonize yes 
pidfile /data/server/redis/run/redis.pid
#定义端口
port 1234
#绑定IP
bind 10.10.10.2
timeout 300 
loglevel notice
#指定日志目录
logfile /data/server/redis/logs/redis.log
databases 16
#配置持久化(rdb模式)
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
#定义数据文件和目录
dbfilename master.rdb
dir /data/server/redis/db
slave-serve-stale-data yes
slave-read-only yes
slave-priority 100
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb60
client-output-buffer-limit pubsub 32mb 8mb 60

(2)slave服务器端

# grep -v ‘^#‘ redis.conf |grep -v ‘^$‘ 
daemonize yes 
pidfile /data/server/redis/run/redis.pid
port 1234 
bind 10.10.10.3
timeout 300 
loglevel notice
logfile /data/server/redis/logs/redis.log 
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename slave.rdb
dir /data/server/redis/db 
slaveof 10.10.10.2 1234         #指定master的地址
slave-serve-stale-data yes
slave-read-only yes
slave-priority 100
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb60
client-output-buffer-limit pubsub 32mb 8mb 60

(3)启动redis服务

Master:

# /data/server/redis/bin/redis-server /data/server/redis/etc/redis.conf
# tail -fn100 /data/server/redis/logs/redis.log  //检查日志是否有报错

Slave:

# /data/server/redis/bin/redis-server /data/server/redis/etc/redis.conf
# tail -fn100 /data/server/redis/logs/redis.log  //检查日志是否有报错

(4)检查redis主从同步

master:

redis-m > set data zhangsan
redis-m > get data

slave:

redis-s > get data

注:由于在配置文件中配置了slave-read-only yes,因此从节点处于只读状态,无法对数据库进行操作和更改.

时间: 2024-08-11 18:19:03

redis主从同步与读写分离的相关文章

MySQL主从同步、读写分离配置步骤

现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用. 为了避免不必要的麻烦,主从服务器MySQL版本尽量保持一致; 环境:192.168.0.1 (Master) 192.168.0.2 (Slave) MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i686) using readline 5.1 1.登录Master服务器,修改my.cnf,添加如下内容: server-id = 1 //数据库ID号,

mysql主从同步、读写分离

一:所需服务器 服务器名称 运行服务 服务端口 Ip地址 T1 Nginx 80 192.168.11.158 负载均衡 T2 Nginx/httpd 80,873 192.168.11.157 实际网站服务 T3 Nginx/httpd 80,873 192.168.11.161 实际网站服务 T4 Nginx/httpd 80,873 192.168.11.162 实际网站服务 T5 Mysql 8066 192.168.11.163 Mysql读写分离 T6 mysql 3306 192.

MySQL主从同步、读写分离配置步骤、问题解决笔记

根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记:       现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用.       为了避免不必要的麻烦,主从服务器MySQL版本尽量保持一致; 环境:192.168.0.1 (Master)           192.168.0.2 (Slave) MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i6

Linux—Centos7.4之搭建Mysql数据库主从同步、读写分离

MySQL主从同步与读写分离 目录第一部分 实验环境第二部分 配置主从同步第三部分 配置读写分离第四部分 测试验证 第一部分 实验环境 实验拓扑图: 服务器五台:1)客户端服务器一台:IP地址:192.168.80.10(client)需安装软件:mysql-boost-5.7.20.tar.gz 2)Amoeba调度服务器一台:IP地址:192.168.80.20(amoeba)需安装软件:jdk-8u144-linux-x64.tar.gzamoeba-mysql-3.0.5-RC-dist

【纯干货】Amoeba实现MySQL主从同步与读写分离

[纯干货]Amoeba实现MySQL主从同步与读写分离 一.简介 amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件.这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发.座落与 Client.DB Server(s)之间,对客户端透明.具有负载均衡.高可用性.SQL 过滤.读写分离.可路由相关的到目标数据库.可并发

mariadb的主从同步和读写分离

前言 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品.前提两台服务器,今天就要用它来搭建多服务器的主从同步和读写分离, 两台服务的环境是:192.168.47.128 centos7 mariadb10.3192.168.47.129 centos6.5 mariadb10.3下面开始搭建: mariadb安装 1.centos7下面的安装我以前有很多教程

CentOS 7上部署Amoeba实现MySQL主从同步,读写分离,负载均衡高可用群集

实验描述 本实验需要四台主机安装mysql,一台部署Amoeba,一台主数据库服务器,两台从数据库服务器,还需一台主机做客户端访问测试,本实验结束可实现主数据库服务器与从数据库服务器之间数据同步,读写分离(客户机读从服务器的数据,写入的数据存储在主服务器,主服务器再同步给从服务器),负载均衡. 实验拓扑 实验环境 实验步骤 一.Master同步时间 1.Master安装ntp yum install ntp -y 2.修改ntp配置文件 vim /etc/ntp.conf #空白处插入如下内容

windows mysql主 Linux mysql 从 主从同步,读写分离

Mysql 读写分离 YIi 配置 <?php return [     'class' => 'yii\db\Connection',     'masterConfig' => [                // 'dsn' => 'mysql:host=localhost;dbname=studyyii',                 'username' => 'root',                 'password' => 'caesar',

DBA成长之路---mysql主从同步,读写分离

主从同步 什么是主从同步: 让其他的数据库服务器自动同步正在提供服务的数据库服务器上 的数据. 1 添加授权用户 mysql> grant replication slave on *.* to [email protected]"192.168.4.4" identified by '123456'; 2启用binlog日志 [[email protected] ~]# vim /etc/my.cnf [mysqld] server_id=3 log-bin=master11