一、Redis主从
Redis主从有什么用:
1.备份数据:使用slave节点来备份master节点中的数据,这样避免master节点宕机都导致数据丢失。
2.读写分离:master节点只负责写,而slave节点只负责读。读写比例例如是10:1,这样可以提高执行效率。
如下图所示:
一个Master可以有多个Slave,而每个Slave也可以有多个Slave,这样就可以形成强大的服务器集群结构。
二、Redis主节点配置
1.Redis源码编译安装
在CentOS7下:
# 安装gcc编译器 yum install gcc -y # 下载redis wget http://download.redis.io/releases/redis-5.0.7.tar.gz # 解压缩 tar xzf redis-5.0.7.tar.gz # 移动文件夹到/usr/local中 mv redis-5.0.7 /usr/local/ # 进入redis目录 cd /usr/local/redis-5.0.7 # 编译 make all
# 安装tcl yum install tcl -y # 运行redis测试 make test
# 安装到/usr/local/bin下 make install
进入/usr/local/bin下查看安装好的redis命令:
[root@centos-base bin]# ll total 32772 -rwxr-xr-x. 1 root root 4366808 Jan 5 14:20 redis-benchmark -rwxr-xr-x. 1 root root 8125200 Jan 5 14:20 redis-check-aof -rwxr-xr-x. 1 root root 8125200 Jan 5 14:20 redis-check-rdb -rwxr-xr-x. 1 root root 4807880 Jan 5 14:20 redis-cli lrwxrwxrwx. 1 root root 12 Jan 5 14:20 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 8125200 Jan 5 14:20 redis-server
2.Redis配置
拷贝redis.conf:
cd /etc mkdir redis cd /usr/local/redis-5.0.7 cp redis.conf /etc/redis/redis.conf
修改配置:
vi /etc/redis/redis.conf
bind 192.168.1.181 127.0.0.1 # 服务IP地址 port 6379 # 服务端口 daemonize yes # 是否以守护进程形式运行 dbfilename dump.rdb # 持久化数据文件名称 dir /var/lib/redis # 持久化数据文件存放位置 logfile /var/log/redis/redis-server.log # 日志文件存放位置 database 16 # 一共16个数据库,编号1~15 slaveof # 设置主从复制(用于分布式)
注意:持久化数据文件和日志文件的存放地址,要事先创建存放文件目录。
cd /var/lib mkdir redis cd /var/log mkdir redis
配置文件参考:
(转自https://blog.csdn.net/ljphilp/article/details/52934933)
View Code
3.设置Redis服务
配置systemctl管理Redis服务:
# 编辑文件 vim /usr/lib/systemd/system/redis.service # 在redis.service文件中加入以下内容 并保存 ########################## [Unit] Description=Redis-5.0.7-6379 After=network.target [Service] Type=forking PIDfile=/var/run/redis-6379.pid ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target ########################### # 加载服务 systemctl daemon-reload
reids服务操作:
systemctl start redis # 启动 systemctl stop redis # 停止 systemctl restart redis # 重启 systemctl status redis # 查看状态 systemctl enable redis # 开机启动 systemctl disable redis # 取消开机启动
4.运行Redis
[root@centos-base system]# systemctl start redis [root@centos-base system]# systemctl status redis 鈼[0m redis.service - Redis-5.0.7-6379 Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-01-05 15:19:46 CST; 4s ago Process: 27232 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS) Process: 27243 ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS) Main PID: 27244 (redis-server) CGroup: /system.slice/redis.service 鈹斺攢27244 /usr/local/bin/redis-server 127.0.0.1:6379 Jan 05 15:19:46 centos-base systemd[1]: Starting Redis-5.0.7-6379... Jan 05 15:19:46 centos-base systemd[1]: Started Redis-5.0.7-6379.
查看进程:
[root@centos-base system]# ps -ef | grep redis root 27244 1 0 15:19 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6379 root 27251 17132 0 15:22 pts/0 00:00:00 grep --color=auto redis
三、Redis从节点配置
1.安装从节点Redis
参照主节点的安装过程,部署一台从节点。
2.配置从节点
修改redis.conf配置文件:
# 修改replicaof配置项,填写主节点IP和端口 replicaof 192.168.1.181 6379
3.重启主从节点Redis服务
四、主从操作
1.查看主节点状态
执行命令:
[root@centos-base system]# redis-cli -h 192.168.1.181 info Replication # Replication role:master connected_slaves:1 slave0:ip=192.168.1.180,port=6379,state=online,offset=42,lag=1 master_replid:14e0a788c85de285ae34ab98f41893aaf097335a master_replid2:0000000000000000000000000000000000000000 master_repl_offset:42 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:42
可以看到,该节点为master节点,已连接的从节点有一台,从节点IP为192.168.1.180,端口为6379。
2.查看从节点状态
执行命令:
[root@centos-base system]# redis-cli -h 192.168.1.180 info Replication # Replication role:slave master_host:192.168.1.181 master_port:6379 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:546 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:14e0a788c85de285ae34ab98f41893aaf097335a master_replid2:0000000000000000000000000000000000000000 master_repl_offset:546 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:546
可以看到,该节点为slave节点,属于主节点192.168.1.181,主节点端口为6379。
3.主从数据操作
在主节点设置一个值:
[root@centos-base system]# redis-cli -h 192.168.1.181 -p 6379 192.168.1.181:6379> select 10 OK 192.168.1.181:6379[10]> set name helloworld OK
我们在主节点设置了name的值为helloworld。
在从节点获取name的值:
[root@centos-base system]# redis-cli -h 192.168.1.180 -p 6379 192.168.1.180:6379> select 10 OK 192.168.1.180:6379[10]> get name "helloworld"
可以看到,从节点获得了name的值,为helloworld。
这说明,主节点插入值以后,会自动同步到从节点。
在主节点存活的时候,使用从节点插入值:
192.168.1.180:6379[10]> set age 32 (error) READONLY You can't write against a read only replica.
可以看到,在主节点存活的时候,从节点的只读(read only)的。