Redis集群搭建

Jamina ·
更新时间:2024-11-13
· 603 次阅读

                                                                          Redis集群搭建

在Centos7.5上多台宿主机使用docker部署redis集群的过程,redis集群一般需要6台redis服务器,使用docker可以节省服务器资源,除开放主从6379和6380端口外还得开放集群总线端口,集群总线端口为redis客户端连接端口+10000即16379

集群架构

主机名

IP

redis集群ip(并非为redis容器的ip)

redistest(部署用)

52.83.180.202

 

redis1

52.82.63.165

52.82.63.165:6379 52.82.63.165:6380

redis2

52.83.47.118

52.83.47.118:6379 52.83.47.118:6380

redis3

52.83.98.202

52.83.98.202:6379 52.83.98.202:6380

redis1:6379

redis1:6380

redis2:6379

redis2:6380

redis3:6379

redis3:6380

一、redistest机器部署docker和ansible

1.安装docker:yum install docker 

2.启动docker:systemctl start docker 

3.我这里是使用的AWS的机器所以需要使用秘钥对登录其它三个Redis节点 如果是用密码登录的话就没必要这么做 为了方便登录此处生成秘钥

   ssh-keygen

   cd ~/.ssh 

   将id_rsa.pub追加到三个Redis节点/root/.ssh/authorized_keys中

4.部署ansible,方便给Redis节点统一部署docker和Redis避免登录每个节点

   yum -y install ansible

5.修改ansible的配置文件和host

   修改host方便后面ansible的配置:

   vi /etc/hosts

    52.82.63.165 redis1

    52.83.47.118 redis2

    52.83.98.202 redis3

   vi /etc/ansible/ansible.cfg

    [defualts]

    inxentory = /etc/ansible/hosts

    host_key_cheking = False

    pull_interval   = 15

    sudo_user       = root

    transport       = paramiko

    module_lang     = C

    sudo_exe        = sudo

    # SSH timeout

    timeout         = 30

    remote_tmp      = ~/.ansible/tmp

    [ssh_connection]

    scp_if_ssh      = True

    control_path = ~/.ssh/      #配置登录其它节点秘钥的路径

6.配置ansible命令分发的机器

   vi /etc/ansible/hosts

   [redis]

   redis[1:3] ansible_ssh_private_key_file=~/.ssh/id_rsa ansible_ssh_user=root  (如果Redis节点使用密码登录的话就使用ansible_ssh_pass=xxxx)

7.使用ansible给各Redis节点安装docker和下载redis镜像

   ansible redis -m shell -a 'yum -y install docker;systemctl start docker;docker pull redis';

   检查每个节点是否下载了Redis镜像:

   ansible redis -m shell -a  'docker images | grep redis'

8.给各节点创建挂载目录

  ansible redis -m shell -a 'mkdir -p /var/redis/63{79,80}/{conf,logs,data}';

9.创建redis模板配置文件

  vi redis.conf.tem

     protected-mode no

     bind 0.0.0.0

     port ${PORT}

     daemonize no  #关闭以守护进程运行

     dir /var/lib/redis

     logfile /var/log/redis/redis.log

     appendonly yes

     appendfilename "appendonly.aof"

     appendfsync everysec

     cluster-enabled yes

     cluster-config-file nodes.conf

     cluster-node-timeout 5000

     cluster-announce-ip ${IP}           #指定redis集群ip,即为宿主机ip

     cluster-announce-port ${PORT}

     cluster-announce-bus-port 1${PORT}

10.使用envsubst命令修改模板文件后分发到各个节点(也可以使用ansible-playbook完成)

     for ip in 52.82.63.165 52.83.47.118 52.83.98.202;

     do

     for port in 63{79,80};

     do

     scp -i ~/workdir/ssh-keys/id_rsa redis.conf.tem $ip:;

     ssh -i ~/workdir/ssh-keys/id_rsa $ip "export IP=$ip PORT=$port;envsubst /var/redis/${port}/conf/redis.conf";

     done;

     done

     登录任意节点检查:tree /var/redis/ 看是否存在相应的文件夹和文件

11.创建redis实例

     -p 端口映射,需要把每个实例的63(79|80) 和163(79|80)端口都映射出来

     -v 指定目录映射

     –name 给容器命名

     -d 容器放入后台

     for i in 63{79,80};

     do

     ansible redis -m shell -a "docker run -itd -p $i:$i -p 1$i:1$i -v /var/redis/$i/logs:/var/log/redis -v /var/redis/$i/data:/var/lib/redis/ -v /var/redis/$i/conf/redis.conf:/etc/redis/redis.conf --name redis$i redis";

     done

     验证redis实例 随便进入一台redis服务器,进入redis容器内部,执行完命令后看见6个PONG则验证成功

二.搭建Redis集群:

1.安装ruby环境(也可使用docker里的ruby镜像) 创建3个主redis节点分别为每个redis服务器上的6379端口

   yum -y install ruby rubygems ruby-devel

   redis-3.2.1.gem 官网被强只能手动下载所以不能使用命令 gem install redis-3.2.1.gem

   wget  https://rubygems.org/downloads/redis-3.2.1.gem

   gem install -l redis-3.2.1.gem

2.将Redis解压包中 的redis-trib.rb复制到/sbin/中,创建主节点

   redis-trib.rb create 52.82.63.165:6379 52.83.47.118:6379 52.83.98.202:6379

3.为每个主节点添加在不同redis服务器的从节点

   redis-trib.rb add-node --slave --master-id 节点的M ip(从节点的ip) : 6380 主节点IP:6379

   此处有个疑问就是 为啥添加从节点的时候 后面这个主节点的IP都是第一个节点的IP也能成功,望各位大佬指教

4.检查集群状态

   redis-trib.rb check 52.82.63.165:6379


作者:qq_21873747



redis集群搭建 Redis

需要 登录 后方可回复, 如果你还没有账号请 注册新账号