您的位置:首页 > 数据库 > Redis

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主从