快速搭建Redis主从复制环境(redis配置主从机器)

2023-05-11 10:25:06 搭建 复制 主从

Redis是一个开源的基于内存的Key-Value存储系统,支持多种数据结构操作。它的高性能、高可用性和可扩展性使得它成为现代Web应用程序开发人员的首选数据库之一。使用Redis的一个重要功能就是构建主从复制环境,以增加系统的可靠性和性能。

搭建Redis主从复制环境,并且让数据同步非常简单。本文将介绍如何在Ubuntu环境下,通过源码安装Redis,并创建一个主节点和一个从节点,并使它们同步修改的数据。

第一步:安装Redis

在Ubuntu中安装Redis是非常容易的,只需要通过源码安装即可。首先安装编译工具。

“`bash

sudo apt-get update

sudo apt-get install -y gcc make


接着下载Redis源码包。

```bash
wget http://download.redis.io/releases/redis-5.0.5.tar.gz

解压缩源码包,并进入Redis目录。

“`bash

tar xzf redis-5.0.5.tar.gz

cd redis-5.0.5


编译并安装Redis。

```bash
make
make install

安装完成后,使用以下命令启动Redis服务。

“`bash

redis-server


至此,Redis安装完成。

第二步:创建Redis主节点

首先我们创建一个Redis主节点,也就是一台Redis服务器,它拥有完整的读/写数据权限。

打开Redis配置文件。

```bash
sudo nano /etc/redis/redis.conf

找到bind指令并将其注释掉,使Redis可以监听所有IP地址。

“`bash

#bind 127.0.0.1


找到protected-mode指令并将其设置为"no",以便使外部计算机可以连接到服务。

```bash
protected-mode no

接着,找到daemonize指令并将其设置为”yes”,以在后台运行Redis。

“`bash

daemonize yes


找到dir指令并设置Redis数据存储路径。

```bash
dir /var/lib/redis

现在可以启动Redis服务。

“`bash

redis-server /etc/redis/redis.conf


现在,Redis主节点已经运行起来了。

第三步:创建Redis从节点

接下来,我们创建一个Redis从节点,也就是一台Redis服务器,它只能读取从Redis主节点同步的数据。

复制主节点的Redis配置文件。

```bash
sudo cp /etc/redis/redis.conf /etc/redis/slave.conf

打开从节点的Redis配置文件。

“`bash

sudo nano /etc/redis/slave.conf


找到bind指令并将其注释掉,使Redis可以监听所有IP地址。

```bash
#bind 127.0.0.1

找到protected-mode指令并将其设置为”no”,以便使外部计算机可以连接到服务。

“`bash

protected-mode no


接着,找到daemonize指令并将其设置为"yes",以在后台运行Redis。

```bash
daemonize yes

找到dir指令并设置Redis数据存储路径。

“`bash

dir /var/lib/redis


找到slaveof指令并设置为主节点的IP地址和端口号。

```bash
slaveof {主节点IP地址} {端口号}

保存更改,启动Redis服务。

“`bash

redis-server /etc/redis/slave.conf


至此,Redis从节点已经搭建完毕。

至此,Redis主从复制环境搭建完成,数据同步自动完成。如果您想手动测试数据同步,请在Redis主节点上键入以下内容创建一个键值对。

```bash
redis-cli set mykey "Hello World"

然后,请在Redis从节点上键入以下内容,以检查键值是否已经复制。

“`bash

redis-cli get mykey


如果成功,将显示"Hello World"。

编写的Python脚本也可以帮助快速搭建redis主从复制环境:

```python
import os
def deploy_redis(version="5.0.5", port_mn="6379", port_slave="6380"):
os.system("sudo apt-get update")
os.system("sudo apt-get -y install gcc make")
os.system(f"wget http://download.redis.io/releases/redis-{version}.tar.gz")
os.system(f"tar -xzf redis-{version}.tar.gz")
os.chdir(f"redis-{version}/")
os.system("make")
os.system("make install")
os.chdir("..")
os.system(f"sudo cp redis-{version}/redis.conf redis-{version}/redis_mn.conf")
os.system(f"sudo cp redis-{version}/redis.conf redis-{version}/redis_slave.conf")
os.system(f"sudo sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' redis-{version}/redis_mn.conf")
os.system(f"sudo sed -i 's/protected-mode yes/protected-mode no/g' redis-{version}/redis_mn.conf")
os.system(f"sudo sed -i 's/daemonize no/daemonize yes/g' redis-{version}/redis_mn.conf")
os.system(f"sudo sed -i 's/dir .\//dir \/var\/lib\/redis_mn/g' redis-{version}/redis_mn.conf")
os.system(f"sudo sed -i 's/slaveof 127.0.0.1 6379/#slaveof 127.0.0.1 6379/g' redis-{version}/redis_slave.conf")
os.system(f"sudo sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' redis-{version}/redis_slave.conf")
os.system(f"sudo sed -i 's/protected-mode yes/protected-mode no/g' redis-{version}/redis_slave.conf")
os.system(f"sudo sed -i 's/daemonize no/daemonize yes/g' redis-{version}/redis_slave.conf")
os.system(f"sudo sed -i 's/dir .\//dir \/var\/lib\/redis_slave/g' redis-{version}/redis_slave.conf")
os.system(f"sudo sed -i 's/port 6379/port {port_mn}/g' redis-{version}/redis_mn.conf")
os.system(f"sudo sed -i 's/port 6379/port {port_slave}/g' redis-{version}/redis_slave.conf")
os.system("sudo nohup redis-server redis-{}/redis_mn.conf > /dev/null 2>&1 &".format(version))
os.system("sudo nohup redis-server redis-{}/redis_slave.conf > /dev/null 2>&1 &".format(version))

if __name__ == "__mn__":
deploy_redis()

相关文章