centos6.8 安装redis 4.0 搭建主从
环境:
master:172.17.165.245
slave :172.17.165.230
redis 版本:redis 4.0
1.下载并进行安装包
- [root@iZ2zejbqrpwrmr4mjy0u9fZ ~]#wget http://download.redis.io/releases/redis-4.0.8.tar.gz
- [root@iZ2zejbqrpwrmr4mjy0u9fZ ~]#tar zxvf redis-4.0.8.tar.gz -C /usr/local/
- [root@iZ2zejbqrpwrmr4mjy0u9fZ ~]# cd !$
- [root@iZ2zejbqrpwrmr4mjy0u9fZ redis-4.0.8]# ls
- 00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils
- BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests
- [root@iZ2zejbqrpwrmr4mjy0u9fZ redis-4.0.8]#make
- [root@iZ2zegc312qxcxs61cotxlZ redis-4.0.8]# cp redis.conf /etc/redis/
- [root@iZ2zegc312qxcxs61cotxlZ redis-4.0.8]# cp utils/redis_init_script /etc/init.d/redis
- [root@iZ2zejbqrpwrmr4mjy0u9fZ redis]# mv redis.conf 6379.conf
- [root@iZ2zegc312qxcxs61cotxlZ ~]# vim /etc/redis/6379.conf
- 修改守护进程
- #daemonize no
- #修改为yes
- daemonize yes #Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
- 绑定的主机地址
- bind 127.0.0.1 172.17.165.245 #bind后面再添加主机的ip,后面主从复制 从Redis需要通过IP连接。
- 端口号
- port 6379
- 开启AOF
- appendonly yes
- REDISPORT=6379
- #EXEC=/usr/local/bin/redis-server
- EXEC=/usr/local/redis-4.0.8/src/redis-server #服务端绝对地址
- #CLIEXEC=/usr/local/bin/redis-cli
- CLIEXEC=/usr/local/redis-4.0.8/src/redis-cli #客户端端绝对地址
- PIDFILE=/var/run/redis_${REDISPORT}.pid
- CONF="/etc/redis/${REDISPORT}.conf" #配置文件
- #CONF="/etc/redis/redis-master.conf"
- 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
- ;;
- stop)
- if [ ! -f $PIDFILE ]
- then
- echo "$PIDFILE does not exist,process is not running"
- else
- PID=$(cat $PIDFILE)
- echo "Stopping ..."
- $CLIEXEC -p $REDISPORT shutdown
- while [ -x /proc/${PID} ]
- do
- echo "Waiting for Redis to shutdown ..."
- sleep 1
- done
- echo "Redis stopped"
- fi
- ;;
- restart) #自己添加的重启动选择
- if [ -f $PIDFILE ]
- then
- $CLIEXEC -p $REDISPORT shutdown
- $EXEC $CONF
- echo "Waiting for Reids is restart ..."
- else
- $EXEC $CONF
- #echo "Please use start or stop as first argument"
- echo "Waiting for Reids is restart ..."
- fi
- ;;
- esac
4.配置主从
- [root@iZ2zejbqrpwrmr4mjy0u9fZ ~]# vim /etc/redis/6379.conf
- # slaveof <masterip> <masterport>
- slaveof 172.17.165.245 6379
5.主master 上进行查看状态
- [root@iZ2zegc312qxcxs61cotxlZ ~]# redis-cli
- 127.0.0.1:6379>info
- ...
- # Replication
- role:master #节点状态master
- connected_slaves:1 #链接slave数为1
- slave0:ip=172.17.165.230,port=6379,state=online,offset=588,lag=0 #slave节点
- master_replid:f7a4830f3b523187d959b4929dcb79f6cfca7c37
- master_replid2:0000000000000000000000000000000000000000
- master_repl_offset:588
- second_repl_offset:-1
- repl_backlog_active:1
- repl_backlog_size:1048576
- repl_backlog_first_byte_offset:1
- repl_backlog_histlen:588
- ...
6.从slave 上进行查看状态
- [root@iZ2zejbqrpwrmr4mjy0u9fZ ~]# redis-cli
- 127.0.0.1:6379> info
- ...
- # Replication
- role:slave #节点状态slave
- master_host:172.17.165.245 #链接到master 地址为172.17.165.245
- master_port:6379
- master_link_status:up
- master_last_io_seconds_ago:1
- master_sync_in_progress:0
- slave_repl_offset:140
- slave_priority:100
- slave_read_only:1
- connected_slaves:0 #链接slave的数目为0
- master_replid:f7a4830f3b523187d959b4929dcb79f6cfca7c37
- master_replid2:0000000000000000000000000000000000000000
- master_repl_offset:140
- second_repl_offset:-1
- repl_backlog_active:1
- repl_backlog_size:1048576
- repl_backlog_first_byte_offset:1
- repl_backlog_histlen:140
- ...
7.主从同步进行测试
主master 进行设置一个键值:
- [root@iZ2zegc312qxcxs61cotxlZ redis-4.0.8]# redis-cli
- 127.0.0.1:6379> SET test-sync wiwiiwi20180217
- OK
从slave 检查是否已经自动同步到了从库:
- 127.0.0.1:6379> get test-sync
- "wiwiiwi20180217"
可以看到,数据确实是从主库同步到了从库。
注意:主库用来写数据,从库用来读取数据
因为从库中修改的数据不会被同步到任何其他数据库,并且一旦主库修改了数据,从库的数据就会因为自动同步被覆盖,所以一般情况下,不建议将从库设置为可写
主从同步的原理: