阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis 3.2主从复制与集群搭建

215次阅读
没有评论

共计 10635 个字符,预计需要花费 27 分钟才能阅读完成。

Redis 3.2 主从复制与集群搭建

一、Redis 主从搭建

1.下载并解压

yum install -y gcc gcc-c++ pcre zlib pcre-devel tcl 
wget  http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz
cd redis-3.2.4
make 
cd src && make test && make install
mkdir /etc/redis
cp ../redis.conf /etc/redis/redis.conf

2.优化参数

vim /etc/sysctl.conf
net.core.somaxconn = 20480  # 最大队列长度,应付突发的大并发连接请求,默认为 128
net.ipv4.tcp_max_syn_backlog = 20480  # 半连接队列长度,此值受限于内存大小,默认为 1024
vm.overcommit_memory = 1
0 表示检查是否有足够的内存可用,如果是,允许分配;如果内存不够,拒绝该请求,并返回一个错误给应用程序。
1 允许分配超出物理内存加上交换内存的请求
2 内核总是返回true
sysctl -p  # 使参数生效

3.配置文件说明

3.1后台运行

daemonize yes 

3.2bind地址监听

默认 bind 的填写的 127.0.0.1 这样配置是只允许本地访问
bind 0.0.0.0 

3.3 日志配置

logfile "/var/log/redis.log"

3.4 开机自启脚本

vim /etc/init.d/redis

# chkconfig: 2345 90 10
# description: service of redis for start and stop add by tomener
   
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
   
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis/redis.conf"
AUTH="Passwd"
BIND_IP='0.0.0.0'
case "$1" in
        start)
                if [-f $PIDFILE]
                then
                        echo "$PIDFILE exists, process is already running or crashed."
                else
                        echo "Starting Redis server..."
                        $EXEC $CONF
                fi
                if ["$?"="0" ]
                then
                        echo "Redis is running..."
                fi
                ;;
        stop)
                if [! -f $PIDFILE]
                then
                        echo "$PIDFILE exists, process is not running."
                else
                        PID=$(cat $PIDFILE)
                        echo "Stopping..."
                       $REDIS_CLI -h $BIND_IP -a $AUTH -p $REDISPORT  SHUTDOWN
                        sleep 2
                       while [-x $PIDFILE]
                       do
                                echo "Waiting for Redis to shutdown..."
                               sleep 1
                        done
                        echo "Redis stopped"
                fi
                ;;
               restart|force-reload)
                    ${0} stop
                    ${0} start
                    ;;
               *)
                    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
                    exit 1
esac
 
 
chkconfig redis on
service redis restart

4.Redis持久化

4.1 rdb方式

工作原理:

redis 生成 dump.rdb 文件时,工作过程如下:

redis主进程 fork 一个子进程 fork 出来的子进程将内存的数据集 dump 到临时的 RDB

当子进程对临时的 RDB 文件写入完毕,redis用新的 RDB 文件代替旧的 RDB 文件

默认配置如下:

save 900 1
save 300 10
save 60 10000 

其意义:

1key更新值时每 900 秒保存一次数据到硬盘

10key更新值时每 300 秒保存一次到硬盘

10000key更新值时每 60 秒保存一次到硬盘

4.2 aof方式

aof本质是 redis 操作(写操作)日志文件。aof默认是未开启的,需要在配置文件中进行设置,在配置文件中将这一行改为 appendonly yes 就可以了。

工作原理

AOF append only file

每当 Redis 执行一个改变数据集的命令时,这个命令都会被追加到 AOF 文件的末尾。

redis 重新启动时,程序可以通过 AOF 文件恢复数据。

三种 appedn 方式:

appendfsync always
appendfsync everysec
appendfsync no

appendfsync always每次有新命令追加到 AOF 文件时就执行一次 fsync :非常慢,也非常安全

appendfsync everysec每秒 fsync 一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据。

appendfsync no从不 fsync :将数据交给操作系统来处理。更快,也更不安全的选择。

推荐(并且也是默认)的措施为每秒 fsync 一次,这种 fsync 策略可以兼顾速度和安全性。

aof能够保证数据的安全,但是在重启时比较耗时,而且 aof 文件的体积比 rdb 文件大。

5. Redis主从复制

5.1 概述

Redisreplication 机制允许 slavemaster那里通过网络传输拷贝到完整的数据备份。具有以下特点:

  • 异步复制,从 2.8 版本开始,slave能不时地从 master 那里获取到数据。

  • 允许单个 master 配置多个slave

  • slave允许其它 slave 连接到自己。一个 slave 除了可以连接 master 外,它还可以连接其它的slave。形成一个图状的架构。

  • master在进行 replication 时是非阻塞的,这意味着在 replication 期间,master依然能够处理客户端的请求。

  • slavereplication 期间也是非阻塞的,也可以接受来自客户端的请求,但是它用的是之前的旧数据。可以通过配置来决定 slave 是否在进行 replication 时用旧数据响应客户端的请求,如果配置为否,那么 slave 将会返回一个错误消息给客户端。不过当新的数据接收完全后,必须将新数据与旧数据替换,即删除旧数据,在替换数据的这个时间窗口内,slave将会拒绝客户端的请求和连接。

  • 一般使用 replication 来可以实现扩展性,例如说,可以将多个 slave 配置为 只读,或者是纯粹的数据冗余备份。

  • 能够通过 replication 来避免 master 每次持久化时都将整个数据集持久化到硬盘中。只需把 master 配置为不进行持久化操作 ( 把配置文件中持久化相关的配置项注释掉即可 ),然后连接上一个slave,这个slave 则被配置持久化选项。不过需要注意的是,在这个方案中,必须确保 master 不会自动启动。

5.2 Master持久化功能关闭时 Replication 的安全性

当有需要使用到 replication 机制时,一般都会强烈建议把 master 的持久化开关打开。即使为了避免持久化带来的延迟影响,不把持久化开关打开,那么也应该把 master 配置为不会自动启动的。

5.3 replication工作原理

如果你为 master 配置了一个 slave,不管这个slave 是否是第一次连接上 Master,它都会发送一个SYNC 命令给 master 请求复制数据。

master收到 SYNC 命令后,会在后台进行数据持久化,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份数据集发送给 slaveslave 会把接收到的数据进行持久化,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave

masterslave之间的连接由于某些原因而断开时,slave能够自动重连 master,如果master 收到了多个 slave 并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave

masterslave断开重连后,一般都会对整份数据进行复制。但从 redis2.8 版本开始,支

5.4 主从配置

replication 相关的配置比较简单,只需要把下面一行加到 slave 的配置文件中:

slaveof  masterIPaddress  6379

如果 master 通过 requirepass 配置项设置了密码,slave每次同步操作都需要验证密码,可以通过在 slave 的配置文件中添加以下配置项:

masterauth <password>

6常用命令

启动redis

redis-server /etc/redis/redis.conf

客户端命令工具

/usr/local/bin/redis-cli -h 192.168.1.1

192.168.1.1:6379> auth PasswdOK

登录 , 密码验证192.168.1.1:6379>info

查看数据库状态192.168.1.1:6379>info replication

查看 slave 的复制状态192.168.1.1:6379>set key 123

插入数据192.168.1.1:6379>keys *

列出数据

flushdb

清空当前数据

flushall

清除所有数据库

7.测试主从及切换

7.1 主从测试

Redis 3.2 主从复制与集群搭建

Redis 3.2 主从复制与集群搭建

 

7.2主从切换

停止主

Redis 3.2 主从复制与集群搭建

 

切换从为主

redis-cli -h localhost slaveof NO ONE

Redis 3.2 主从复制与集群搭建

恢复原来主数据库

将现在的主 redis 根目录下 dump.rdb 文件拷贝覆盖到原来主 redis 的根目录

启动原来的主redis

Redis 3.2 主从复制与集群搭建

 

在从数据库切换主数据库redis-cli -h localhost -p 6379 slaveof 172.17.10.193 6379

测试从已经切换回来

Redis 3.2 主从复制与集群搭建

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-03/142148p2.htm

二、Redis 集群搭建

 

Redis高版本使用 ruby 实现了集群,所以需要 ruby 环境,安装 ruby 环境和 redisgem接口后,就可以使用 redisredis-trib.rb脚本创建集群。

Redis安装成功后,创建单独目录

mkdir /usr/local/redis/cluster -p

再在其下创建目录 7000700170027003

mkdir /usr/local/redis/cluster/7000 -p
cp redis.conf /usr/local/redis/cluster/7000/

redis.conf 分别拷贝到这几个目录下面,并分别修改 redis.conf 中的端口号 port 和目录名一致

分别修改配置文

 

daemonize    yes                          //redis后台运行
pidfile  /var/run/redis_7000.pid              //pidfile文件对应 7000,7002,7003
port  7000                                //端口 7000,7002,7003
cluster-enabled  yes                        //开启集群  把注释# 去掉
cluster-config-file  nodes_7000.conf          //集群的配置  配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  5000                  //请求超时  设置 5 秒够了
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志

 

Redis 3.2 主从复制与集群搭建

查看服务是否已经起来

Redis 3.2 主从复制与集群搭建

2.安装相关软件包

yum -y install ruby ruby-devel rubygems rpm-build

再用 gem 这个命令来安装 redis接口     gemruby的一个工具包

gem install redis

如果安装失败,可手动安装

wget https://rubygems.global.ssl.fastly.NET/gems/redis-3.2.1.gem
sudo gem install -l ./redis-3.2.1.gem

3.redis-trib.rb脚本创建集群

cd /root/redis-3.2.4/src
./redis-trib.rb create --replicas 1 172.17.10.191:7000 172.17.10.191:7001 172.17.10
7005 172.17.10.191:7006

–replicas  1  表示 自动为每一个 master 节点分配一个 slave 节点 

Redis 3.2 主从复制与集群搭建

Redis 3.2 主从复制与集群搭建

./redis-trib.rb check 172.17.10.191:7000

Redis 3.2 主从复制与集群搭建

4.测试

redis-cli -c -p 7000

设置数据,然后停止 7000 端口监听的redis

登录其他,查看获取数据。

Redis 3.2 主从复制与集群搭建

Redis 3.2 主从复制与集群搭建

Redis 3.2 主从复制与集群搭建

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142148.htm

Redis 3.2 主从复制与集群搭建

一、Redis 主从搭建

1.下载并解压

yum install -y gcc gcc-c++ pcre zlib pcre-devel tcl 
wget  http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz
cd redis-3.2.4
make 
cd src && make test && make install
mkdir /etc/redis
cp ../redis.conf /etc/redis/redis.conf

2.优化参数

vim /etc/sysctl.conf
net.core.somaxconn = 20480  # 最大队列长度,应付突发的大并发连接请求,默认为 128
net.ipv4.tcp_max_syn_backlog = 20480  # 半连接队列长度,此值受限于内存大小,默认为 1024
vm.overcommit_memory = 1
0 表示检查是否有足够的内存可用,如果是,允许分配;如果内存不够,拒绝该请求,并返回一个错误给应用程序。
1 允许分配超出物理内存加上交换内存的请求
2 内核总是返回true
sysctl -p  # 使参数生效

3.配置文件说明

3.1后台运行

daemonize yes 

3.2bind地址监听

默认 bind 的填写的 127.0.0.1 这样配置是只允许本地访问
bind 0.0.0.0 

3.3 日志配置

logfile "/var/log/redis.log"

3.4 开机自启脚本

vim /etc/init.d/redis

# chkconfig: 2345 90 10
# description: service of redis for start and stop add by tomener
   
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
   
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis/redis.conf"
AUTH="Passwd"
BIND_IP='0.0.0.0'
case "$1" in
        start)
                if [-f $PIDFILE]
                then
                        echo "$PIDFILE exists, process is already running or crashed."
                else
                        echo "Starting Redis server..."
                        $EXEC $CONF
                fi
                if ["$?"="0" ]
                then
                        echo "Redis is running..."
                fi
                ;;
        stop)
                if [! -f $PIDFILE]
                then
                        echo "$PIDFILE exists, process is not running."
                else
                        PID=$(cat $PIDFILE)
                        echo "Stopping..."
                       $REDIS_CLI -h $BIND_IP -a $AUTH -p $REDISPORT  SHUTDOWN
                        sleep 2
                       while [-x $PIDFILE]
                       do
                                echo "Waiting for Redis to shutdown..."
                               sleep 1
                        done
                        echo "Redis stopped"
                fi
                ;;
               restart|force-reload)
                    ${0} stop
                    ${0} start
                    ;;
               *)
                    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
                    exit 1
esac
 
 
chkconfig redis on
service redis restart

4.Redis持久化

4.1 rdb方式

工作原理:

redis 生成 dump.rdb 文件时,工作过程如下:

redis主进程 fork 一个子进程 fork 出来的子进程将内存的数据集 dump 到临时的 RDB

当子进程对临时的 RDB 文件写入完毕,redis用新的 RDB 文件代替旧的 RDB 文件

默认配置如下:

save 900 1
save 300 10
save 60 10000 

其意义:

1key更新值时每 900 秒保存一次数据到硬盘

10key更新值时每 300 秒保存一次到硬盘

10000key更新值时每 60 秒保存一次到硬盘

4.2 aof方式

aof本质是 redis 操作(写操作)日志文件。aof默认是未开启的,需要在配置文件中进行设置,在配置文件中将这一行改为 appendonly yes 就可以了。

工作原理

AOF append only file

每当 Redis 执行一个改变数据集的命令时,这个命令都会被追加到 AOF 文件的末尾。

redis 重新启动时,程序可以通过 AOF 文件恢复数据。

三种 appedn 方式:

appendfsync always
appendfsync everysec
appendfsync no

appendfsync always每次有新命令追加到 AOF 文件时就执行一次 fsync :非常慢,也非常安全

appendfsync everysec每秒 fsync 一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据。

appendfsync no从不 fsync :将数据交给操作系统来处理。更快,也更不安全的选择。

推荐(并且也是默认)的措施为每秒 fsync 一次,这种 fsync 策略可以兼顾速度和安全性。

aof能够保证数据的安全,但是在重启时比较耗时,而且 aof 文件的体积比 rdb 文件大。

5. Redis主从复制

5.1 概述

Redisreplication 机制允许 slavemaster那里通过网络传输拷贝到完整的数据备份。具有以下特点:

  • 异步复制,从 2.8 版本开始,slave能不时地从 master 那里获取到数据。

  • 允许单个 master 配置多个slave

  • slave允许其它 slave 连接到自己。一个 slave 除了可以连接 master 外,它还可以连接其它的slave。形成一个图状的架构。

  • master在进行 replication 时是非阻塞的,这意味着在 replication 期间,master依然能够处理客户端的请求。

  • slavereplication 期间也是非阻塞的,也可以接受来自客户端的请求,但是它用的是之前的旧数据。可以通过配置来决定 slave 是否在进行 replication 时用旧数据响应客户端的请求,如果配置为否,那么 slave 将会返回一个错误消息给客户端。不过当新的数据接收完全后,必须将新数据与旧数据替换,即删除旧数据,在替换数据的这个时间窗口内,slave将会拒绝客户端的请求和连接。

  • 一般使用 replication 来可以实现扩展性,例如说,可以将多个 slave 配置为 只读,或者是纯粹的数据冗余备份。

  • 能够通过 replication 来避免 master 每次持久化时都将整个数据集持久化到硬盘中。只需把 master 配置为不进行持久化操作 ( 把配置文件中持久化相关的配置项注释掉即可 ),然后连接上一个slave,这个slave 则被配置持久化选项。不过需要注意的是,在这个方案中,必须确保 master 不会自动启动。

5.2 Master持久化功能关闭时 Replication 的安全性

当有需要使用到 replication 机制时,一般都会强烈建议把 master 的持久化开关打开。即使为了避免持久化带来的延迟影响,不把持久化开关打开,那么也应该把 master 配置为不会自动启动的。

5.3 replication工作原理

如果你为 master 配置了一个 slave,不管这个slave 是否是第一次连接上 Master,它都会发送一个SYNC 命令给 master 请求复制数据。

master收到 SYNC 命令后,会在后台进行数据持久化,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份数据集发送给 slaveslave 会把接收到的数据进行持久化,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave

masterslave之间的连接由于某些原因而断开时,slave能够自动重连 master,如果master 收到了多个 slave 并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave

masterslave断开重连后,一般都会对整份数据进行复制。但从 redis2.8 版本开始,支

5.4 主从配置

replication 相关的配置比较简单,只需要把下面一行加到 slave 的配置文件中:

slaveof  masterIPaddress  6379

如果 master 通过 requirepass 配置项设置了密码,slave每次同步操作都需要验证密码,可以通过在 slave 的配置文件中添加以下配置项:

masterauth <password>

6常用命令

启动redis

redis-server /etc/redis/redis.conf

客户端命令工具

/usr/local/bin/redis-cli -h 192.168.1.1

192.168.1.1:6379> auth PasswdOK

登录 , 密码验证192.168.1.1:6379>info

查看数据库状态192.168.1.1:6379>info replication

查看 slave 的复制状态192.168.1.1:6379>set key 123

插入数据192.168.1.1:6379>keys *

列出数据

flushdb

清空当前数据

flushall

清除所有数据库

7.测试主从及切换

7.1 主从测试

Redis 3.2 主从复制与集群搭建

Redis 3.2 主从复制与集群搭建

 

7.2主从切换

停止主

Redis 3.2 主从复制与集群搭建

 

切换从为主

redis-cli -h localhost slaveof NO ONE

Redis 3.2 主从复制与集群搭建

恢复原来主数据库

将现在的主 redis 根目录下 dump.rdb 文件拷贝覆盖到原来主 redis 的根目录

启动原来的主redis

Redis 3.2 主从复制与集群搭建

 

在从数据库切换主数据库redis-cli -h localhost -p 6379 slaveof 172.17.10.193 6379

测试从已经切换回来

Redis 3.2 主从复制与集群搭建

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-03/142148p2.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计10635字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中