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

[经验分享] redis+keepalived高可用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-30 09:27:52 | 显示全部楼层 |阅读模式
一、环境

系统        CentOS 6.4x64最小化安装
redis-m       192.168.3.61
redis-s       192.168.3.62
vip         192.168.3.63
二、安装redis-m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#下载软件
[iyunv@redis-m ~]# wget http://download.redis.io/releases/redis-2.8.9.tar.gz
[iyunv@redis-m ~]# tar xf redis-2.8.9.tar.gz
[iyunv@redis-m ~]# cd redis-2.8.9
[iyunv@redis-m redis-2.8.9]# make
[iyunv@redis-m redis-2.8.9]# make PREFIX=/usr/local/redis-2.8.9 install
[iyunv@redis-m redis-2.8.9]# ln -s /usr/local/redis-2.8.9/ /usr/local/redis
[iyunv@redis-m redis-2.8.9]# echo 'PATH=$PATH:/usr/local/redis/bin' >>/etc/profile
[iyunv@redis-m redis-2.8.9]# source /etc/profile

#复制配置文件
[iyunv@redis-m ~]# mkdir /usr/local/redis/conf
[iyunv@redis-m ~]# cp /root/redis-2.8.9/redis.conf /usr/local/redis/conf/

#修改redis启动产生的警告
[iyunv@redis-m ~]# sysctl vm.overcommit_memory=1
vm.overcommit_memory = 1
[iyunv@redis-m ~]# echo "vm.overcommit_memory = 1" >>/etc/sysctl.conf
[iyunv@redis-m ~]# sysctl -p



创建启动脚本
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
[iyunv@redis-m ~]# vim /etc/init.d/redis
#!/bin/bash
# chkconfig: 2345 50 30
#
# description: Redis service
#
#Script:Redis command

Redisserver=/usr/local/redis/bin/redis-server
Rediscli=/usr/local/redis/bin/redis-cli
Redisconf=/usr/local/redis/conf/redis.conf

function_start()
{
    printf "start redis-server..."
    $Redisserver $Redisconf &>/dev/null  &
    if [ $? -eq 0 ];then
        echo "runing"
    fi
}

function_stop()
{
    printf "stop redis-server..."
    $Rediscli -p 6379 shutdown
    if [ $? -eq 0 ];then
        echo "stop"
    fi
}

function_restart()
{
    function_start
    function_stop
}

function_kill()
{
    killall redis-server
}

function_status()
{
    a=`ps -A|grep "redis-server\>" -c`
    if [ $a -ge 1 ];then
        echo -e "The Redis is [\e[0;32;5m runing \e[0m]"
    else
        echo -e "The Redis is [\e[0;31;5m not run \e[0m]"
    fi
}

case "$1" in
        start)
                function_start
                ;;
        stop)
                function_stop
                ;;
        restart)
                function_stop
                function_start
                ;;
        kill)
                function_kill
                ;;
        status)
                function_status
                ;;
              *)
              echo "Usage: /etc/init.d/redis {start|stop|restart|kill|status}"

esac

exit

#将redis服务添加到开机自启动
[iyunv@redis-m ~]# chmod +x /etc/init.d/redis
[iyunv@redis-m ~]# chkconfig --add redis
[iyunv@redis-m ~]# chkconfig redis on
[iyunv@redis-m ~]# service redis start        #启动redis服务
start redis-server...runing
[iyunv@redis-m ~]# netstat -tunlp |grep redis
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      3277/redis-server *
tcp        0      0 :::6379                     :::*                        LISTEN      3277/redis-server *



修改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
[iyunv@redis-m ~]# egrep -v "^$|^#" /usr/local/redis/conf/redis.conf
daemonize no
pidfile /var/run/redis.pid
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile ""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /usr/local/redis
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes                        #需要打开aof持久化
appendfilename "appendonly.aof"
appendfsync everysec                  #选择everysec方式
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes



重启redis服务
1
2
3
4
5
6
[iyunv@redis-m ~]# service redis restart
stop redis-server...stop
start redis-server...runing
[iyunv@redis-m ~]# netstat -tunlp |grep redis
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      3324/redis-server *
tcp        0      0 :::6379                     :::*                        LISTEN      3324/redis-server *



三、安装redis-s
安装过程和redis-m基本上是一样的
1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@redis-s ~]# tar xf redis-2.8.9.tar.gz
[iyunv@redis-s ~]# cd redis-2.8.9
[iyunv@redis-s redis-2.8.9]# make
[iyunv@redis-s redis-2.8.9]# make PREFIX=/usr/local/redis-2.8.9 install
[iyunv@redis-s redis-2.8.9]# ln -s /usr/local/redis-2.8.9/ /usr/local/redis
[iyunv@redis-s ~]# echo 'PATH=$PATH:/usr/local/redis/bin' >>/etc/profile
[iyunv@redis-s ~]# source /etc/profile
[iyunv@redis-s ~]# mkdir /usr/local/redis/conf
[iyunv@redis-s ~]# cp /root/redis-2.8.9/redis.conf /usr/local/redis/conf/
[iyunv@redis-s ~]# sysctl vm.overcommit_memory=1
vm.overcommit_memory = 1
[iyunv@redis-s ~]# echo "vm.overcommit_memory = 1" >>/etc/sysctl.conf
[iyunv@redis-s ~]# sysctl -p



修改后的redis.conf文件内容如下
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
[iyunv@redis-s ~]# egrep -v "^$|^#" /usr/local/redis/conf/redis.conf
daemonize no
pidfile /var/run/redis.pid
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile ""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /usr/local/redis
slaveof 192.168.3.61   6379            #主从同步的信息
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes                        #从服务器也需要打开aof持久化
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes



从redis-m上复制启动脚本,并添加到开机自启动
1
2
3
4
5
6
7
[iyunv@redis-m ~]# scp /etc/init.d/redis 192.168.3.62:/etc/init.d/
[iyunv@redis-s ~]# chkconfig --add redis
[iyunv@redis-s ~]# chkconfig redis on
[iyunv@redis-s ~]# service redis start
[iyunv@redis-s ~]# netstat -tunlp |grep redis
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      3336/redis-server *
tcp        0      0 :::6379                     :::*                        LISTEN      3336/redis-server *



四、测试主从同步
在redis-m上查看主从同步信息
1
2
3
4
5
6
7
8
9
10
[iyunv@redis-m ~]# redis-cli info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.3.62,port=6379,state=online,offset=113,lag=1
master_repl_offset:113
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:112



在redis-s上查看主从同步信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[iyunv@redis-s ~]# redis-cli info replication
# Replication
role:slave
master_host:192.168.3.61
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:99
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0



在redis-m上写入一个数据
1
2
3
4
[iyunv@redis-m ~]# redis-cli set k1 v1
OK
[iyunv@redis-m ~]# redis-cli get k1
"v1"



在redis-s上查看数据k1
1
2
3
4
[iyunv@redis-s ~]# hostname
redis-s
[iyunv@redis-s ~]# redis-cli get k1
"v1"



从上面结果能看出主从同步时正常的
五、在redis-m上安装keepalived

1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@redis-m ~]# yum install openssl openssl-devel -y
[iyunv@redis-m ~]# wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
[iyunv@redis-m ~]# tar xf keepalived-1.2.13.tar.gz
[iyunv@redis-m ~]# cd keepalived-1.2.13
[iyunv@redis-m keepalived-1.2.13]# ./configure
[iyunv@redis-m keepalived-1.2.13]# make && make install
[iyunv@redis-m keepalived-1.2.13]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
[iyunv@redis-m keepalived-1.2.13]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
[iyunv@redis-m keepalived-1.2.13]# mkdir  /etc/keepalived
[iyunv@redis-m keepalived-1.2.13]# ln -s /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
[iyunv@redis-m keepalived-1.2.13]# ln -s /usr/local/sbin/keepalived  /usr/sbin/
[iyunv@redis-m keepalived-1.2.13]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak



编辑后的keepalived配置文件内容如下
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
[iyunv@redis-m keepalived-1.2.13]# cat /etc/keepalived/keepalived.conf
vrrp_script chk_redis {
                script "/etc/keepalived/scripts/redis_check.sh"   ###监控脚本
                interval 2                                        ###监控时间
}
vrrp_instance VI_1 {
        state MASTER                            ###设置为MASTER
        interface eth0                          ###监控网卡   
        virtual_router_id 51
        priority 101                            ###权重值
        authentication {
                     auth_type PASS             ###加密
                     auth_pass redis            ###密码
        }
        track_script {
                chk_redis                       ###执行上面定义的chk_redis
        }
        virtual_ipaddress {
             192.168.3.63                         ###VIP
        }
        notify_master /etc/keepalived/scripts/redis_master.sh
        notify_backup /etc/keepalived/scripts/redis_backup.sh
        notify_fault  /etc/keepalived/scripts/redis_fault.sh
        notify_stop   /etc/keepalived/scripts/redis_stop.sh
}



创建监控redis的脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@redis-m ~]# mkdir /etc/keepalived/scripts

#编写监控脚本
[iyunv@redis-m ~]# cat /etc/keepalived/scripts/redis_check.sh
#!/bin/bash

ALIVE=`/usr/local/redis/bin/redis-cli PING`
if [ "$ALIVE" == "PONG" ]; then
  echo $ALIVE
  exit 0
else
  echo $ALIVE
  exit 1
fi



创建进入master状态的脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[iyunv@redis-m ~]# cat /etc/keepalived/scripts/redis_master.sh
#!/bin/bash

REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"

echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.3.62 6379 >> $LOGFILE  2>&1
sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态

echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1



创建进入backup状态的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@redis-m ~]# cat /etc/keepalived/scripts/redis_backup.sh
#!/bin/bash

REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"

echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1

sleep 15 #延迟15秒待数据被对方同步完成之后再切换主从角色
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.3.62 6379 >> $LOGFILE  2>&1



创建脚本/etc/keepalived/scripts/redis_fault.sh
1
2
3
4
5
6
7
[iyunv@redis-m ~]# cat /etc/keepalived/scripts/redis_fault.sh
#!/bin/bash

LOGFILE=/var/log/keepalived-redis-state.log

echo "[fault]" >> $LOGFILE
date >> $LOGFILE



创建脚本/etc/keepalived/scripts/redis_stop.sh
1
2
3
4
5
6
7
[iyunv@redis-m ~]# cat /etc/keepalived/scripts/redis_stop.sh
#!/bin/bash

LOGFILE=/var/log/keepalived-redis-state.log

echo "[stop]" >> $LOGFILE
date >> $LOGFILE



赋予脚本执行权限

1
[iyunv@redis-m ~]# chmod +x /etc/keepalived/scripts/*.sh



六、在redis-s上安装keepalived
安装过程和redis-m上的是一样
1
2
3
4
5
6
7
8
9
10
11
[iyunv@redis-s ~]# yum install openssl openssl-devel -y
[iyunv@redis-s ~]# tar xf keepalived-1.2.13.tar.gz
[iyunv@redis-s ~]# cd keepalived-1.2.13
[iyunv@redis-s keepalived-1.2.13]# ./configure
[iyunv@redis-s keepalived-1.2.13]# make && make install
[iyunv@redis-s keepalived-1.2.13]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
[iyunv@redis-s keepalived-1.2.13]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
[iyunv@redis-s keepalived-1.2.13]# mkdir  /etc/keepalived
[iyunv@redis-s keepalived-1.2.13]# ln -s /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
[iyunv@redis-s keepalived-1.2.13]# ln -s /usr/local/sbin/keepalived  /usr/sbin/
[iyunv@redis-s keepalived-1.2.13]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak



修改后的keepalived.conf配置文件内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[iyunv@redis-s ~]# cat /etc/keepalived/keepalived.conf
vrrp_script chk_redis {
                script "/etc/keepalived/scripts/redis_check.sh"   ###监控脚本
                interval 2                                        ###监控时间
}
vrrp_instance VI_1 {
        state BACKUP                                ###设置为BACKUP
        interface eth0                              ###监控网卡
        virtual_router_id 51
        priority 100                                ###比MASTRE权重值低
        authentication {
                     auth_type PASS
                     auth_pass redis                ###密码与MASTRE相同
        }
        track_script {
                chk_redis                       ###执行上面定义的chk_redis
        }
        virtual_ipaddress {
             192.168.3.63                         ###VIP
        }
        notify_master /etc/keepalived/scripts/redis_master.sh
        notify_backup /etc/keepalived/scripts/redis_backup.sh
        notify_fault  /etc/keepalived/scripts/redis_fault.sh
        notify_stop   /etc/keepalived/scripts/redis_stop.sh



创建监控redis的脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@redis-s ~]# mkdir /etc/keepalived/scripts

#脚本内容如下
[iyunv@redis-s ~]# cat /etc/keepalived/scripts/redis_check.sh
#!/bin/bash

ALIVE=`/usr/local/redis/bin/redis-cli PING`
if [ "$ALIVE" == "PONG" ]; then
  echo $ALIVE
  exit 0
else
  echo $ALIVE
  exit 1
fi



创建进入master状态的脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[iyunv@redis-s ~]# cat /etc/keepalived/scripts/redis_master.sh
#!/bin/bash

REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"

echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.3.61 6379 >> $LOGFILE  2>&1
sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态

echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1



创建进入backup的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@redis-s ~]# cat /etc/keepalived/scripts/redis_backup.sh
#!/bin/bash

REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"

echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1

sleep 15 #延迟15秒待数据被对方同步完成之后再切换主从角色
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.3.61 6379 >> $LOGFILE  2>&1



创建fault状态的脚本
1
2
3
4
5
6
7
[iyunv@redis-s ~]# cat /etc/keepalived/scripts/redis_fault.sh
#!/bin/bash

LOGFILE=/var/log/keepalived-redis-state.log

echo "[fault]" >> $LOGFILE
date >> $LOGFILE



创建stop状态的脚本
1
2
3
4
5
6
7
[iyunv@redis-s ~]# cat /etc/keepalived/scripts/redis_stop.sh
#!/bin/bash

LOGFILE=/var/log/keepalived-redis-state.log

echo "[stop]" >> $LOGFILE
date >> $LOGFILE



赋予脚本执行权限
1
[iyunv@redis-s ~]# chmod +x /etc/keepalived/scripts/*.sh



七、测试
依次启动redis-m,redis-s上的keepalived服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#启动redis-m的keepalived服务
[iyunv@redis-m ~]# /etc/init.d/keepalived start
Starting keepalived:                                       [  OK  ]

#启动redis-s上的keepalived服务
[iyunv@redis-s ~]# /etc/init.d/keepalived start
Starting keepalived:                                       [  OK  ]

[iyunv@redis-m ~]# ip a |grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.3.61/24 brd 192.168.3.255 scope global eth0
    inet 192.168.3.63/32 scope global eth0            #结果正常

[iyunv@redis-s ~]# ip a |grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.3.62/24 brd 192.168.3.255 scope global eth0



尝试通过vip连接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
#查看master的信息
[iyunv@redis-s ~]# redis-cli -h 192.168.3.63 info Replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.3.62,port=6379,state=online,offset=85,lag=0
master_repl_offset:85
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:84

#写入一个数据k3,v3
[iyunv@redis-s ~]# redis-cli -h 192.168.3.63 set k3 v3
OK
[iyunv@redis-s ~]# redis-cli -h 192.168.3.63 get k3
"v3"

#连接到redis-m:192.168.3.61上查询结果
[iyunv@redis-s ~]# redis-cli -h 192.168.3.61 get k3
"v3"

#连接到redis-s:192.168.3.62上查询结果
[iyunv@redis-s ~]# redis-cli -h 192.168.3.62 get k3
"v3"



模拟故障,将redis-m上的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
52
53
54
55
56
57
58
59
[iyunv@redis-m ~]# killall -9 redis-server

#查看redis-m上的keepalived日志
[iyunv@redis-m ~]# tail /var/log/keepalived-redis-state.log
Wed Jul 29 11:51:39 CST 2015
[master]
Wed Jul 29 11:51:42 CST 2015
Being master....
Run SLAVEOF cmd ...
OK
Run SLAVEOF NO ONE cmd ...
OK
[fault]
Wed Jul 29 11:56:12 CST 2015

#查看redis-s上的keepalived日志
[iyunv@redis-s ~]# tail /var/log/keepalived-redis-state.log
Being slave....
Run SLAVEOF cmd ...
OK Already connected to specified master
[master]
Wed Jul 29 11:56:14 CST 2015
Being master....
Run SLAVEOF cmd ...
OK Already connected to specified master
Run SLAVEOF NO ONE cmd ...
OK

#查看redis状态信息
[iyunv@redis-m ~]# redis-cli -h 192.168.3.63 info Replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
[iyunv@redis-m ~]# redis-cli -h 192.168.3.62 info Replication
# Replication
role:master                    #从这里我们能看到redis-s已经切换到master角色了
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0        

#查询之前key
[iyunv@redis-m ~]# redis-cli -h 192.168.3.63 get k3
"v3"
[iyunv@redis-m ~]# redis-cli -h 192.168.3.63 set k4 v4
OK                            #从这里我们能看出redis-s切换成master角色后是可以写数据的
[iyunv@redis-m ~]# redis-cli -h 192.168.3.63 get k4
"v4"

#连接到redis-s:192.168.3.62查看结果
[iyunv@redis-m ~]# redis-cli -h 192.168.3.62 get k4
"v4"



恢复redis-m的redis服务器和keepalived服务
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#先恢复redis服务
[iyunv@redis-m ~]# service redis start
start redis-server...runing
[iyunv@redis-m ~]# netstat -tunlp |grep redis
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      34382/redis-server  
tcp        0      0 :::6379                     :::*                        LISTEN      34382/redis-server  

#再恢复keepalived服务
[iyunv@redis-m ~]# /etc/init.d/keepalived start
[iyunv@redis-m ~]# ip a |grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.3.61/24 brd 192.168.3.255 scope global eth0
    inet 192.168.3.63/32 scope global eth0

#查看redis-m的redis状态信息
[iyunv@redis-m ~]# redis-cli -h 192.168.3.61 info Replication
# Replication
role:master
connected_slaves:1
#从这里我们能看到现在redis-s吃slave的状态
slave0:ip=192.168.3.62,port=6379,state=online,offset=170,lag=1
master_repl_offset:170
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:17
repl_backlog_histlen:154

#查看redis-s的redis状态信息
[iyunv@redis-m ~]# redis-cli -h 192.168.3.62 info Replication
# Replication
role:slave
master_host:192.168.3.61
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:254
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:28

#连接到vip上查看之前的数据k3,k4是否还存在
[iyunv@redis-m ~]# redis-cli -h 192.168.3.63 get k3
"v3"
[iyunv@redis-m ~]# redis-cli -h 192.168.3.63 get k4
"v4"

#添加一个新的数据k5:v5
[iyunv@redis-m ~]# redis-cli -h 192.168.3.63 set k5 v5
OK
[iyunv@redis-m ~]# redis-cli -h 192.168.3.63 get k5
"v5"

#连接到redis-m:192.168.3.61上查看结果
[iyunv@redis-m ~]# redis-cli -h 192.168.3.61 get k5
"v5"

#连接到redis-s:192.168.3.62上查看结果
[iyunv@redis-m ~]# redis-cli -h 192.168.3.62 get k5
"v5"



到此redis+keepalived的高可用切换配置成功。


运维网声明 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-92092-1-1.html 上篇帖子: supervisor 启动redis服务 下篇帖子: 生产环境下Redis主备配置(持久化)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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