共计 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
其意义:
当 1 个key更新值时每 900 秒保存一次数据到硬盘
当 10 个key更新值时每 300 秒保存一次到硬盘
当 10000 个key更新值时每 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 概述
Redis的 replication 机制允许 slave 从master那里通过网络传输拷贝到完整的数据备份。具有以下特点:
异步复制,从 2.8 版本开始,slave能不时地从 master 那里获取到数据。
允许单个 master 配置多个slave
slave允许其它 slave 连接到自己。一个 slave 除了可以连接 master 外,它还可以连接其它的slave。形成一个图状的架构。
master在进行 replication 时是非阻塞的,这意味着在 replication 期间,master依然能够处理客户端的请求。
slave在 replication 期间也是非阻塞的,也可以接受来自客户端的请求,但是它用的是之前的旧数据。可以通过配置来决定 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会把这份数据集发送给 slave,slave 会把接收到的数据进行持久化,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。
当 master 与slave之间的连接由于某些原因而断开时,slave能够自动重连 master,如果master 收到了多个 slave 并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave。
当 master 和slave断开重连后,一般都会对整份数据进行复制。但从 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 主从测试
7.2主从切换
停止主
切换从为主
redis-cli -h localhost slaveof NO ONE
恢复原来主数据库
将现在的主 redis 根目录下 dump.rdb 文件拷贝覆盖到原来主 redis 的根目录
启动原来的主redis
在从数据库切换主数据库redis-cli -h localhost -p 6379 slaveof 172.17.10.193 6379
测试从已经切换回来
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-03/142148p2.htm
二、Redis 集群搭建
Redis高版本使用 ruby 实现了集群,所以需要 ruby 环境,安装 ruby 环境和 redis 的gem接口后,就可以使用 redis 的redis-trib.rb脚本创建集群。
Redis安装成功后,创建单独目录
mkdir
/usr/local/redis/cluster
-p
再在其下创建目录 7000、7001、7002、7003
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
日志开启 有需要就开启,它会每次写操作都记录一条日志
查看服务是否已经起来
2.安装相关软件包
yum -y
install
ruby ruby-devel rubygems rpm-build
再用 gem 这个命令来安装 redis接口 gem 是ruby的一个工具包
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-trib.rb check 172.17.10.191:7000
4.测试
redis-cli -c -p 7000
设置数据,然后停止 7000 端口监听的redis
登录其他,查看获取数据。
本文永久更新链接地址: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
其意义:
当 1 个key更新值时每 900 秒保存一次数据到硬盘
当 10 个key更新值时每 300 秒保存一次到硬盘
当 10000 个key更新值时每 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 概述
Redis的 replication 机制允许 slave 从master那里通过网络传输拷贝到完整的数据备份。具有以下特点:
异步复制,从 2.8 版本开始,slave能不时地从 master 那里获取到数据。
允许单个 master 配置多个slave
slave允许其它 slave 连接到自己。一个 slave 除了可以连接 master 外,它还可以连接其它的slave。形成一个图状的架构。
master在进行 replication 时是非阻塞的,这意味着在 replication 期间,master依然能够处理客户端的请求。
slave在 replication 期间也是非阻塞的,也可以接受来自客户端的请求,但是它用的是之前的旧数据。可以通过配置来决定 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会把这份数据集发送给 slave,slave 会把接收到的数据进行持久化,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。
当 master 与slave之间的连接由于某些原因而断开时,slave能够自动重连 master,如果master 收到了多个 slave 并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave。
当 master 和slave断开重连后,一般都会对整份数据进行复制。但从 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 主从测试
7.2主从切换
停止主
切换从为主
redis-cli -h localhost slaveof NO ONE
恢复原来主数据库
将现在的主 redis 根目录下 dump.rdb 文件拷贝覆盖到原来主 redis 的根目录
启动原来的主redis
在从数据库切换主数据库redis-cli -h localhost -p 6379 slaveof 172.17.10.193 6379
测试从已经切换回来
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-03/142148p2.htm