redis 高可用 主从复制
redis 高可用 主从复制
###redis 高可用 主从复制
###所有节点运行
wget http://download.redis.io/releases/redis-3.2.12.tar.gz
yum install -y gcc
tar xzf redis-3.2.12.tar.gz -C /usr/src/
cd /usr/src/redis-3.2.12
make && make install PREFIX=/usr/local/redis
\cp src/redis-trib.rb /usr/local/redis/bin/
\cp -f utils/redis_init_script /etc/init.d/redis
sed -i '/stop)/ i #\n\trestart)\n\t\t$0 stop\n\t\t$0 start\n\t;;' /etc/init.d/redis
mkdir -p /usr/local/redis/{conf,data,log}
ln -s /usr/local/redis/conf /etc/redis
ln -s /usr/local/redis/bin/redis-trib.rb /usr/local/bin/redis-trib.rb
grep -Ev '^#|^$' redis.conf >/etc/redis/6379.conf
sed -i 's/^daemonize.*/daemonize yes/g' /etc/redis/6379.conf
sed -i 's/^port .*/port 6379/g' /etc/redis/6379.conf
sed -i 's/^bind .*/bind 0.0.0.0/g' /etc/redis/6379.conf
/etc/init.d/redis restart
netstat -lntp |grep redis
####只在slave 从节点运行
echo 'slaveof 172.16.3.232 6379' >>/etc/redis/6379.conf
/etc/init.d/redis restart
netstat -lntp |grep redis
###########测试验证
##主节点运行
echo "
set name redis-master-test-by-$(hostname)
get name
" |redis-cli
####只在slave 从节点运行
echo "get name" |redis-cli
################redis-sentinel ############
mkdir -p /usr/local/redis/log
cd /usr/src/redis-3.2.12
grep -Ev '^#|^$' sentinel.conf >/etc/redis/sentinel.conf
cat /etc/redis/sentinel.conf
\cp /etc/redis/sentinel.conf{,.bak}
echo '
logfile "/usr/local/redis/log/sentinel.log"
daemonize yes
protected-mode no
dir /tmp
sentinel monitor mymaster 172.16.3.232 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 120000
rename-command SHUTDOWN REDIS_SHUTDOWN
sentinel auth-pass mymaster XYZ
' >/etc/redis/sentinel.conf
#sed -i 's/^sentinel monitor mymaster.*/sentinel monitor mymaster 172.16.3.232 6379 2/g' /etc/redis/sentinel.conf
redis-sentinel /etc/redis/sentinel.conf
echo info |redis-cli -p 26379
##master0:name=mymaster,status=ok,address=172.16.3.232:6379,slaves=2,sentinels=3
###########测试验证
##主节点运行
echo "
set name redis-master-test-by-$(hostname)
get name
" |redis-cli
####只在slave 从节点运行
echo "get name" |redis-cli
######主节点运行
/etc/init.d/redis stop
####在所有节点
echo info |redis-cli -p 26379
###master0:name=mymaster,status=ok,address=172.16.3.234:6379,slaves=2,sentinels=3
#查看主是不是已经切换
#####在切换后的主节点运行 172.16.3.234
echo "
set name redis-master-test-by-$(hostname)
get name
" |redis-cli
#[root@ops234 redis-3.2.12]# echo "
#> set name redis-master-test-by-$(hostname)
#> get name
#> " |redis-cli
#OK
#"redis-master-test-by-ops234"
####只在slave 从节点运行
echo "get name" |redis-cli
#[root@ops233 redis-3.2.12]# echo "get name" |redis-cli
#"redis-master-test-by-ops234"