redis主从模式
2019-01-10 21:37
1076 查看
一、环境说明
192.168.5.65 master
192.168.5.66 slave
#hosts文件配置
cat >> /etc/hosts << EOF 192.168.5.65 redis65 192.168.5.66 redis65 EOF
二、修改系统参数
#修改最大可打开文件数
cat >> /etc/security/limits.conf << EOF * soft nofile 102400 * hard nofile 102400 EOF
#TCP监听队列大小
echo "net.core.somaxconn = 32767" >> /etc/sysctl.conf sysctl -p
#OOM相关:vm.overcommit_memory
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf sysctl -p
#开启内核的“Transparent Huge Pages (THP)”特性
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >>/etc/rc.local chmod +x /etc/rc.local
三、安装redis
[root@redis65 /]# cd /opt [root@redis65 opt]# wget http://download.redis.io/releases/redis-5.0.0.tar.gz [root@redis65 opt]# tar -zxvf redis-5.0.0.tar.gz [root@redis65 opt]# cd redis-5.0.0/ [root@redis65 redis-5.0.0]# make [root@redis65 redis-5.0.0]# mak 5b4 e install PREFIX=/usr/local/redis
#创建实例目录
[root@redis65 /]# mkdir -p /data/redis/redis_7001
##redis65 7001配置文件(master)
cat >> /data/redis/redis_7001/redis_7001.conf <<EOF bind 0.0.0.0 protected-mode no port 7001 daemonize yes loglevel notice requirepass zxc789 #rdb持久化 dir /data/redis/redis_7001 dbfilename dump.rdb save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes #AOF持久化 appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 1024mb aof-load-truncated yes pidfile /data/redis/redis_7001/redis_7001.pid logfile /data/redis/redis_7001/redis_7001.log EOF
##redis66 7001配置文件(slave)
cat >> /data/redis/redis_7001/redis_7001.conf <<EOF bind 0.0.0.0 protected-mode no port 7001 daemonize yes loglevel notice requirepass zxc789 #连接redis master slaveof 192.168.5.65 7001 masterauth zxc789 slave-read-only yes client-output-buffer-limi 5b4 t normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 #rdb持久化 dir /data/redis/redis_7001 dbfilename dump.rdb save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes #AOF持久化 appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 1024mb aof-load-truncated yes pidfile /data/redis/redis_7001/redis_7001.pid logfile /data/redis/redis_7001/redis_7001.log EOF
##redis启动文件
cat >> /etc/init.d/redis_7001 <<EOF # chkconfig: 2345 10 90 # description: Start and Stop redis PATH=/usr/local/bin:/sbin:/usr/bin:/bin REDISPORT=7001 EXEC=/usr/local/redis-cluster/bin/redis-server REDIS_CLI=/usr/local/redis-cluster/bin/redis-cli PIDFILE=/data/redis/redis_7001/redis_7001.pid CONF="/data/redis/redis_7001/redis_7001.conf" #AUTH="1234" case "$1" in start)   5ac ; if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed." else echo "Starting Redis server..." $EXEC $CONF fi if [ "$?"="0" ] then &nbs 2230 p; 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 -p $REDISPORT -a 'zxc789' SHUTDOWN 2>/dev/null 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_7001 {start|stop|restart|force-reload}" >&2 exit 1 esac EOF
chmod +x /etc/init.d/redis_7001 /etc/init.d/redis_7001 start chkconfig redis_7001 on
# 在redis-cli -h 127.0.0.1 -a 'password'这里会有一个问题,当在shell中输入以上命令时,控制台总会输出一串“Warning: Using a password with '-a' option on the command line interface may not be safe.”
#解决办法将标准错误去除即可,加了2>/dev/null,将标准错误丢弃即可,如:redis-cli -h 192.168.5.65 -p 7001 -c -a 'zxc789' 2>/dev/null
# 同步确认
[root@redis65 /]# redis-cli -h 192.168.5.65 -p 7001 -c -a 'zxc789' 2>/dev/null
192.168.5.65:7001> INFO replication # Replication role:master connected_slaves:1 slave0:ip=192.168.5.66,port=7001,state=online,offset=70,lag=1 master_replid:c8cbd4ae635da25193060cacaaebf8a696227476 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:70 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:70
[root@redis66 /]# redis-cli -h 192.168.5.66 -p 7001 -c -a 'zxc789' 2>/dev/null
192.168.5.66:7001> INFO replication # Replication role:slave master_host:192.168.5.65 master_port:7001 master_link_status:up master_last_io_seconds_ago:9 master_sync_in_progress:0 slave_repl_offset:112 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:c8cbd4ae635da25193060cacaaebf8a696227476 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:112 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:112
同期正常时:
master_link_status:up
master_repl_offset #和slave_repl_offset相等,
master_last_io_seconds_ago #在10秒内。
#shell脚本随机插入数据测试
cat >> /data/11.sh <<EOF #!/bin/bash for ((i=0;i<100;i++)) do echo -en "cldjiowehjijcvjsopdjfjpjj" | redis-cli -p 7001 -a 'zxc789' -x set name$i 2>/dev/null done EOF
chmod +x /data/11.sh time sh /data/11.sh
# slave只读不允许写
192.168.5.66:7001> set yaya 465464654 (error) READONLY You can't write against a read only replica.
#停止slave后往master里写数据
cat >> /data/11.sh <<EOF #!/bin/bash for ((i=101;i<150;i++)) do echo -en "64we64f54f4qwe464cvw6e4" | redis-cli -p 7001 -a 'zxc789' -x set name$i 2>/dev/null done EOF
#master写完数据再开启slave,看slave是否有同步数据
192.168.5.65:7001> info keyspace # Keyspace db0:keys=149,expires=0,avg_ttl=0 192.168.5.65:7001> DBSIZE (integer) 149 192.168.5.65:7001> get name112 "64we64f54f4qwe464cvw6e4" 192.168.5.65:7001> INFO replication # Replication role:master connected_slaves:0 master_replid:c8cbd4ae635da25193060cacaaebf8a696227476 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14549 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:14549 192.168.5.65:7001> INFO replication # Replication role:master connected_slaves:1 slave0:ip=192.168.5.66,port=7001,state=online,offset=14563,lag=1 master_replid:c8cbd4ae635da25193060cacaaebf8a696227476 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14563 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:14563 192.168.5.66:7001> info keys 111c pace # Keyspace db0:keys=149,expires=0,avg_ttl=0 192.168.5.66:7001> DBSIZE (integer) 149 192.168.5.66:7001> get name112 "64we64f54f4qwe464cvw6e4" 192.168.5.66:7001> INFO replication # Replication role:slave master_host:192.168.5.65 master_port:7001 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:14633 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:c8cbd4ae635da25193060cacaaebf8a696227476 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14633 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:14550 repl_backlog_histlen:84
# 从上面可以看到数据已同步
相关文章推荐
- Redis进阶实践之十 Redis主从复制的集群模式
- redis在Windows下以后台服务一键搭建哨兵(主从复制)模式(多机)
- 配置redis主从复制和sentinel模式
- centos6.5 redis主从模式配置
- redis演练(6) redis主从模式搭建
- Redis进阶实践之十 Redis主从复制的集群模式
- redis哨兵模式和主从复制
- Redis主从复制和哨兵模式
- Redis集群redis主从自动切换Sentinel(哨兵模式)
- linux安装redis及主从复制、读写分离、哨兵模式
- redis主从模式
- redis之key、string、list、set、sort set、hash、精细持久化、snapshotting快照保存、主从模式
- Linux下Redis安装使用,主从模式,哨兵模式与PHP扩展(PHP7适用)
- redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比
- CentOS系统redis主从模式实现
- redis在Windows下以后台服务一键搭建哨兵(主从复制)模式(单机)
- Redis集群的安装测试(伪分布模式 - 主从复制)
- redis主从配置+哨兵模式
- redis学习三,Redis主从复制和哨兵模式
- redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比