设为首页 收藏本站
查看: 1249|回复: 0

[经验分享] Redis-3.2主从复制与集群搭建

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-3-22 10:02:13 | 显示全部楼层 |阅读模式
Redis-3.2主从复制与集群搭建
一、Redis 主从搭建
1.下载并解压
1
2
3
4
5
6
7
8
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.优化参数
1
2
3
4
5
6
7
8
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后台运行
1
daemonize yes



3.2bind地址监听
1
2
默认bind的填写的127.0.0.1这样配置是只允许本地访问
bind 0.0.0.0



3.3 日志配置
1
logfile "/var/log/redis.log"



3.4 开机自启脚本
vim /etc/init.d/redis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 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



1
2
chkconfig redis on
service redis restart



4.Redis持久化
4.1 rdb方式
工作原理:
当redis生成dump.rdb文件时,工作过程如下:
redis主进程fork一个子进程fork出来的子进程将内存的数据集dump到临时的RDB中
当子进程对临时的RDB文件写入完毕,redis用新的RDB文件代替旧的RDB文件
默认配置如下:
1
2
3
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方式:
1
2
3
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 主从测试
iyunv.com-2017-3-2241.png
iyunv.com-2017-3-2242.png
7.2主从切换
停止主
iyunv.com-2017-3-2243.png
切换从为主
redis-cli -h localhost slaveof NO ONE
iyunv.com-2017-3-2244.png
恢复原来主数据库
将现在的主redis根目录下dump.rdb文件拷贝覆盖到原来主redis的根目录
启动原来的主redis
iyunv.com-2017-3-2245.png
在从数据库切换主数据库redis-cli -h localhost -p 6379 slaveof 172.17.10.193 6379
测试从已经切换回来
iyunv.com-2017-3-2246.png

二、Redis 集群搭建
Redis高版本使用ruby实现了集群,所以需要ruby环境,安装ruby环境和redis的gem接口后,就可以使用redis的redis-trib.rb脚本创建集群。
Redis安装成功后,创建单独目录
1
mkdir /usr/local/redis/cluster -p



再在其下创建目录 7000、7001、7002、7003
1
2
mkdir /usr/local/redis/cluster/7000 -p
cp redis.conf /usr/local/redis/cluster/7000/



将redis.conf分别拷贝到这几个目录下面,并分别修改redis.conf 中的端口号port和目录名一致
分别修改配置文件
1
2
3
4
5
6
7
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日志开启  有需要就开启,它会每次写操作都记录一条日志



iyunv.com-2017-3-2247.png
查看服务是否已经起来
iyunv.com-2017-3-2248.png
2.安装相关软件包
1
yum -y install ruby ruby-devel rubygems rpm-build



再用 gem 这个命令来安装 redis接口    gem是ruby的一个工具包
1
gem install redis



如果安装失败,可手动安装
1
2
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脚本创建集群
1
2
3
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节点
iyunv.com-2017-3-2250.png
iyunv.com-2017-3-2251.png
./redis-trib.rb check 172.17.10.191:7000
iyunv.com-2017-3-2252.png
4.测试
redis-cli -c -p 7000
设置数据,然后停止7000端口监听的redis
登录其他,查看获取数据。
iyunv.com-2017-3-2253.png
iyunv.com-2017-3-2254.png
iyunv.com-2017-3-2255.png


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-353440-1-1.html 上篇帖子: "libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低 下篇帖子: redis数据库快速部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表