Redis 主从复制集群部署记录
本文档依赖于 中标麒麟 centos 7 操作系统部署
redis-5.0.7.tar.gz
predixy-1.0.5-bin-amd64-linux.tar.gz
关闭防火墙
因为是多个服务器做主从复制,服务器之间必须可以链通,需要关闭所有服务器的防火墙,如果现场不允许关闭,请酌情配置端口
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Redis实例的安装
-
升级yum 源 (内网环境无法升级可以先略过)
yum update
-
安装 gcc
yum install gcc
-
获取安装包自己带了安装包直接上传即可,没有安装包可以下载
- Redis安装包下载地址: http://download.redis.io/releases/redis-5.0.7.tar.gz
mkdir /home/archser/soft
cd /home/archser/soft
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
-
解压软件tar -xzvf redis-5.0.7.tar.gz
-
安装 Redis
cd ./redis-5.0.7
make ## 编译
make install ## 迁出工具文件
mkdir /home/archser/redis_6379 ## 创建Redis专用文件夹
./utils/install_server.sh ## 将Redis作为服务安装,安装过程如下
[root@localhost utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] ## 设置端口号,默认即可,直接回车
Selecting default: 6379
## 设置 conf文件位置,直接复制创建的文件夹 + /6379.conf
## 注意:这里删除输入错误需要使用 ctrl + 删除键
Please select the redis config file name [/etc/redis/6379.conf] /home/archser/redis_6379/6379.conf
## 设置日志文件位置
Please select the redis log file name [/var/log/redis_6379.log] /home/archser/redis_6379/6379.log
## 设置 Redis 数据文件位置
Please select the data directory for this instance [/var/lib/redis/6379] /home/archser/redis_6379/data
## 服务文件位置,默认即可,直接回车
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /home/archser/redis_6379/6379.conf
Log file : /home/archser/redis_6379/6379.log
Data dir : /home/archser/redis_6379/data
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
## 这里是让我们确认配置,配置无误直接回车即可
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
## 这时系统中就应该有一个 Redis 进程,且此进程默认 *** 开机自启 ***
[root@localhost utils]# ps -ef|grep redis
root 17591 1 0 10:30 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6379
root 17656 12909 0 10:36 pts/1 00:00:00 grep --color=auto redis
- 修改Redis配置文件
cd /home/archser/redis_6379
vi 6379.conf
## 注释 bind 127.0.0.1,不指定允许链接的IP地址
# bind 127.0.0.1
## protected-mode 改为 no ,允许其他服务器链接
protected-mode no
## daemonize 改为 yes ,在后台运行
daemonize yes
## 解开 requirepass 注释,添加 Redis 密码
requirepass archser_redis
- 重启Redis
[root@localhost redis_6379]# redis-cli -p 6379
127.0.0.1:6379> SHUTDOWN ## 关闭服务
not connected>
## 重启服务
[root@localhost redis_6379]# service redis_6379 start
Starting Redis server...
[root@localhost redis_6379]# ps -ef|grep redis
root 17991 1 0 10:53 ? 00:00:00 /usr/local/bin/redis-server *:6379
root 17996 12909 0 10:53 pts/1 00:00:00 grep --color=auto redis
[root@localhost redis_6379]# redis-cli -p 6379
## 重新链接需要密码
127.0.0.1:6379> AUTH archser_redis
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>
从节点的配置
-
主从复制集群是由一个主节点,多个从节点组成,我们按照这个架构配置主从复制集群
-
我这里有三台服务器,分别为151、153、154 ,我们选择 151 为主节点,153、154 为从节点,并共同追随 151
修改从节点的配置
注意:这里说的是从节点是为了更好的理解配置的含义,如果主节点宕机,Redis哨兵则会选举新的主节点,当宕机的主节点重启后则会变成从节点,所以无论主从节点都需要配置
-
进入 153 服务器
-
修改Redis 配置文件(这里是针对从节点功能的修改)
vi /home/archser/redis_6379/6379.conf
## 主节点信息
replicaof 192.168.31.151 6379
## 主节点密码
masterauth archser_redis
## 可以规定最少在几个节点存活的状态下主节点可以继续写入,保证有足够多的健康的节点提供服务
修改主节点的配置
注意:这里说的是主节点是为了更好的理解配置的含义,但是如果主节点宕机,则哨兵会选举出新的主节点,也就是之前的从节点,那么新的从节点也应该有以下的配置,所以无论主从节点都需要配置
# min-replicas-to-write 3
min-replicas-to-write 2
# min-replicas-max-lag 10
## 延迟小于这里配置的秒数的节点才被认为是健康的节点
min-replicas-max-lag 3
- 重启 Redis
[root@localhost redis_6379]# redis-cli -p 6379
127.0.0.1:6379> SHUTDOWN ## 关闭redis
(error) NOAUTH Authentication required.
127.0.0.1:6379>
[root@localhost redis_6379]# ll
总用量 176
-rwxr-xr-x 1 root root 62000 2月 22 11:15 6379.conf
-rwxr-xr-x 1 root root 113968 2月 22 11:29 6379.log
drwxr-xr-x 2 root root 22 2月 22 11:29 data
## 启动Redis
[root@localhost redis_6379]# service redis_6379 start
## 如果提示 pid 文件存在,删除即可,没有提示可以忽略
/var/run/redis_6379.pid exists, process is already running or crashed
## 删除 pid文件 ,没有提示可以忽略
[root@localhost redis_6379]# rm -f /var/run/redis_6379.pid
[root@localhost redis_6379]# service redis_6379 start
Starting Redis server...
[root@localhost redis_6379]# ps -ef|grep redis
root 18203 1 0 11:19 ? 00:00:00 /usr/local/bin/redis-server *:6379
root 18528 13457 0 11:32 pts/0 00:00:00 grep --color=auto redis
[root@localhost redis_6379]# redis-cli -p 6379
127.0.0.1:6379> AUTH archser_redis
OK
- 成功日志参考可以查看对应日志文件
/home/archser/redis_6379/6379.log
[root@localhost redis_6379]# tail -f 6379.log
27223:S 22 Feb 2021 11:40:57.134 * Connecting to MASTER 192.168.31.151:6379
27223:S 22 Feb 2021 11:40:57.134 * MASTER <-> REPLICA sync started
27223:S 22 Feb 2021 11:40:57.134 * Non blocking connect for SYNC fired the event.
27223:S 22 Feb 2021 11:40:57.134 * Master replied to PING, replication can continue...
27223:S 22 Feb 2021 11:40:57.135 * Partial resynchronization not possible (no cached master)
27223:S 22 Feb 2021 11:40:57.135 * Full resync from master: 38e55326217099121a346935616b52972e155074:1331
27223:S 22 Feb 2021 11:40:57.172 * MASTER <-> REPLICA sync: receiving 186 bytes from master
27223:S 22 Feb 2021 11:40:57.173 * MASTER <-> REPLICA sync: Flushing old data
27223:S 22 Feb 2021 11:40:57.173 * MASTER <-> REPLICA sync: Loading DB in memory
27223:S 22 Feb 2021 11:40:57.173 * MASTER <-> REPLICA sync: Finished with success
测试主从复制
测试思路是在主节点添加数据,看从节点中是否有相同的数据
## 主节点 “151”
[root@localhost ~]# redis-cli -p 6379
127.0.0.1:6379> AUTH archser_redis
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set a a
OK
## 从节点 “153”
[root@localhost redis_6379]# redis-cli -p 6379
127.0.0.1:6379> AUTH archser_redis
OK
127.0.0.1:6379> keys *
1) "a"
- 测试没有问题则将其他从节点按照上面的步骤修改