Redis集群部署
单机安装Redis
前提要件
安装wget下载器
yum install wget
安装gcc编译器
yum install gcc
下载安装包
Redis官网
https://redis.io/
复制下载链接
http://download.redis.io/releases/redis-6.0.5.tar.gz
下载
wget http://download.redis.io/releases/redis-6.0.5.tar.gz
解压
tar xf redis-6.0.5.tar.gz
查看安装说明
vi README.md
编译
make
中途如果报错,可以执行清除
make distclean
编译完成之后可以通过make test进行测试
进行到这一步Redis已经可以手动通过命令启动,如果需要添加到service管理,需要继续安装。
安装
make install PREFIX=/opt/redis-6.0.5
添加环境变量
vi /ect/profile
export REDIS_HOME=/opt/redis-6.0.5
export PATH=$PATH:$REDIS_HOME/bin
:wq
source /ect/profile
添加服务
cd utils
./install_server.sh
单机Redis安装完成,并且已经启动,默认绑定端口6379。
可以进入/etc/init目录查看redis_6379脚本启动服务。
查看已经启动的Redis进程
ps -fe | grep redis
查看Redis目前的系统I/O
cd /proc/上面的Redis进程ID/fd
ll
docker下主从集群部署
部署环境说明
- 节点1
- ip: 192.168.128.110
- hostname: node1
- firewall: disable
- cluster type: master
- OS: Centos7
- 节点2
- ip: 192.168.128.120
- hostname: node2
- firewall: disable
- cluster type: slave
- OS: Centos7
- 主从节点分别安装并运行docker
- 拉取redis镜像
docker pull redis
- 下载redis.conf
wget https://raw.githubusercontent.com/antirez/redis/3.0/redis.conf -O /home/docker/redis/redis.conf
- 配置master节点的/home/docker/redis/redis.conf
daemonize no
port 6379
bind 0.0.0.0
slave-read-only yes
requirepass 123456
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
protected-mode no
- 配置slave节点的/home/docker/redis/redis.conf
daemonize no
port 6379
bind 0.0.0.0
slaveof 192.168.128.110 6379
masterauth 123456
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
protected-mode no
- 主从节点分别创建docker网桥
docker network create -d bridge net-bridge
- 主节点(node1)启动redis
docker run --privileged=true -d --name redis-master --network net-bridge -p 6379:6379 -v /home/docker/redis/redis.conf:/etc/redis.conf redis redis-server /etc/redis.conf
- –privileged=true 赋予容器内root用户权限
- -d 后台运行
- –name 容器别名
- –network redis容器连接到网桥
- -p 宿主机端口与容器端口映射
- -v 挂载宿主机目录文件到容器内部目录
- redis-server /etc/redis.conf 用挂载的conf文件配置启动
- 进入redis容器交互模式
[root@node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f4e66412830 redis "docker-entrypoint.s…" 41 minutes ago Up 41 minutes 0.0.0.0:6379->6379/tc
[root@node1 ~]# docker exec -it 3f4e66412830 bash
- 初始化槽
root@3f4e66412830:/data# redis-cli -h 192.168.128.110 -a 123456 --cluster fix 192.168.128.110:6379
Can I set the above configuration? (type 'yes' to accept): yes
上面一定要输入完整的 yes, 这一步通常是为了解决下面这个错误:
报错(error) CLUSTERDOWN Hash slot not served
- 启动redis客户端
root@3f4e66412830:/data# redis-cli -h 192.168.128.110 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
这一步会被提示在命令行输入密码可能不安全。
- 查看集群节点状态,info replication
192.168.128.110:6379> info replication
# Replication
role:master
connected_slaves:0
slave0:ip=192.168.128.120,port=6379,state=online,offset=3989,lag=1
master_replid:21a72f426046d253c3ef258a7dc2fae36336802e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3989
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3989
- 从节点(node2)启动redis
docker run --privileged=true -d --name redis-node --network net-bridge -p 6379:6379 -v /home/docker/redis/redis.conf:/etc/redis.conf redis redis-server /etc/redis.conf
- 进入redis容器交互模式
[root@node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8cfca9b7307e redis "docker-entrypoint.s…" 51 minutes ago Up 48 minutes 0.0.0.0:6379->6379/tcp redis-node
- 启动redis客户端
root@8cfca9b7307e:/data# redis-cli
127.0.0.1:6379> auth 123456
OK
- 查看集群节点状态,info replication
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.128.110
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:4353
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:21a72f426046d253c3ef258a7dc2fae36336802e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4353
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:127
repl_backlog_histlen:4227
上面可以看到当前节点以slave角色加入到集群中,识别了主节点是node1
- 测试
主节点中添加数据
192.168.128.110:6379> set test 110
OK
从节点中查看数据
127.0.0.1:6379> keys *
1) "test"
127.0.0.1:6379> get test
"110"
完成基于docker的redis主从集群部署。