环境:
master:172.17.165.245
slave :172.17.165.230
redis 版本:redis 4.0
1.下载并进行安装包
[[email protected] ~]#wget http://download.redis.io/releases/redis-4.0.8.tar.gz
[[email protected] ~]#tar zxvf redis-4.0.8.tar.gz -C /usr/local/
[[email protected] ~]# cd !$
[[email protected] 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
[[email protected] redis-4.0.8]#make
2.修改配置文件
[[email protected] redis-4.0.8]# cp redis.conf /etc/redis/
[[email protected] redis-4.0.8]# cp utils/redis_init_script /etc/init.d/redis
[[email protected] redis]# mv redis.conf 6379.conf
[[email protected] ~]# 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
3.修改启动文件
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.配置主从
从slave上修改配置文件
[[email protected] ~]# vim /etc/redis/6379.conf
# slaveof <masterip> <masterport>
slaveof 172.17.165.245 6379
5.主master 上进行查看状态
[[email protected] ~]# 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 上进行查看状态
[[email protected] ~]# 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 进行设置一个键值:
[[email protected] 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"
可以看到,数据确实是从主库同步到了从库。
注意:主库用来写数据,从库用来读取数据
因为从库中修改的数据不会被同步到任何其他数据库,并且一旦主库修改了数据,从库的数据就会因为自动同步被覆盖,所以一般情况下,不建议将从库设置为可写
主从同步的原理:
当一个从数据库启动时,会向主数据库发送SYNC命令,主数据库收到命令后会开始在后台保存快照(即RDB持久化过程),并将保存快照期间接收到的命令缓存起来。当快照完成后,Redis会将快照文件和缓存的命令发给从数据库,从数据库收到数据后,会载入快照文件并执行缓存的命令。以上过程称为复制初始化。复制初始化之结束后,主数据库每收到写命令时就会将命令同步给从数据库,从而保证主从数据库数据一致,这一过程称为复制同步阶段。
原文地址:http://blog.51cto.com/innocence/2071044
时间: 2024-09-30 06:37:35