redis-cluster主從搭建
1. 環境軟體版本
環境&軟體 | 版本 |
---|---|
虛擬機器&VMware Workstation Pro | VMwareworkstation15.5.6 |
伺服器&Centos | CentOS-7-x86_64-DVD-1503-01.iso |
redis | redis-5.0.10 |
遠端連線&Xshell | 5 |
遠端檔案傳輸&Xftp | 5 |
2. 環境架構設計
機器名稱 | IP:port | 角色 |
---|---|---|
redis | 192.168.5.136:7001 | redis節點 |
redis | 192.168.5.136:7002 | redis節點 |
redis | 192.168.5.136:7003 | redis節點 |
redis | 192.168.5.136:7004 | redis節點 |
redis | 192.168.5.136:7005 | redis節點 |
redis | 192.168.5.136:7006 | redis節點 |
redis | 192.168.5.136:7007 | redis節點 |
redis | 192.168.5.136:7008 | redis節點 |
3.搭建步驟
- 解壓redis壓縮包,進入redis目錄,進行編譯,安裝
make #編譯
#編譯完進入src目錄,將redis安裝到指定的資料夾下
make install PREFIX=/var/redis-cluster/7001
#並且將redis解壓目錄下的redis.conf拷貝到/var/redis-cluster/7001/bin
#編輯redis.conf
port 7001 #修改埠
cluster-enabled yes #開啟cluster
#bind 127.0.0.1 #註釋該行,允許遠端訪問
protected-mode no #關閉保護模式
接著拷貝7001到其他節點目錄下,並修改redis.conf裡的埠配置
#拷貝
cp -r /var/redis-cluster/7001/* /var/redis-cluster/7002
cp -r /var/redis-cluster/7001/* /var/redis-cluster/7003
cp -r /var/redis-cluster/7001/* /var/redis-cluster/7004
cp -r /var/redis-cluster/7001/* /var/redis-cluster/7005
cp -r /var/redis-cluster/7001/* /var/redis-cluster/7006
在redis-cluster建立啟動指令碼start.sh
cd 7001/bin
./redis-server redis.conf
cd ..
cd ..
cd 7002/bin
./redis-server redis.conf
cd ..
cd ..
cd 7003/bin
./redis-server redis.conf
cd ..
cd ..
cd 7004/bin
./redis-server redis.conf
cd ..
cd ..
cd 7005/bin
./redis-server redis.conf
cd ..
cd ..
cd 7006/bin
./redis-server redis.conf
cd ..
cd ..
修改start.sh執行許可權,啟動redis節點
chmod u+x start.sh
啟動好redis節點後,進入其中一個的bin目錄,建立cluster叢集
./redis-cli --cluster create 192.168.5.136:7001 192.168.5.136:7002 192.168.5.136:7003 192.168.5.136:7004 192.168.5.136:7005 192.168.5.136:7006 --cluster-replicas 1
# cluster-replicas : 1 1從機 前三個為主
可以看到效果:
連線叢集
./redis-cli -h 127.0.0.1 -p 7001 -c
# -c:以叢集方式連線
重定向
moved重定向
1.每個節點通過通訊都會共享Redis Cluster中槽和叢集中對應節點的關係
2.客戶端向Redis Cluster的任意節點傳送命令,接收命令的節點會根據CRC16規則進行hash運算與
16384取餘,計算自己的槽和對應節點
3.如果儲存資料的槽被分配給當前節點,則去槽中執行命令,並把命令執行結果返回給客戶端
4.如果儲存資料的槽不在當前節點的管理範圍內,則向客戶端返回moved重定向異常
5.客戶端接收到節點返回的結果,如果是moved異常,則從moved異常中獲取目標節點的資訊
6.客戶端向目標節點傳送命令,獲取命令執行結果
- 擴容
#新建7007目錄,安裝一個新的redis(無資料)到7007目錄下,拷貝7001中的redis.conf到7007的bin下,複製7007到7008
mkdir /var/redis-cluster/7007
#進入redis的src目錄下進行安裝
make install PREFIX=/var/redis-cluster/7007
#進入/var/redis-cluster目錄,拷貝
cp 7001/bin/redis.conf 7007/bin/
啟動7007節點,進入7007/bin
#啟動7007
./redis-server redis.conf
#將7007加入cluster叢集
./redis-cli --cluster add-node 192.168.5.136:7007 192.168.5.136:7001
cluster nodes檢視節點資訊
可見7007目前是沒有分配槽位,分配槽位
./redis-cli --cluster reshard 192.168.5.136:7007
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:
#輸入all表示從其他節點平均分配到目標節點
#done是指,可以選擇提供槽位的節點,最後輸入done結束,進行分配
新增節點7008作為7007的從節點,啟動7008節點,將7008掛載到7007下
./redis-cli --cluster add-node 新節點的ip和埠 舊節點ip和埠 --cluster-slave -- cluster-master-id 主節點id
最後節點分佈效果
4.jedisCluster連線redis-cluster
依賴
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
public class JedisClusterDemo {
public static void main(String[] args) {
JedisPoolConfig config = new JedisPoolConfig();
Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
jedisClusterNode.add(new HostAndPort("192.168.5.136", 7001));
jedisClusterNode.add(new HostAndPort("192.168.5.136", 7002));
jedisClusterNode.add(new HostAndPort("192.168.5.136", 7003));
jedisClusterNode.add(new HostAndPort("192.168.5.136", 7004));
jedisClusterNode.add(new HostAndPort("192.168.5.136", 7005));
jedisClusterNode.add(new HostAndPort("192.168.5.136", 7006));
jedisClusterNode.add(new HostAndPort("192.168.5.137", 7006));
jedisClusterNode.add(new HostAndPort("192.168.5.138", 7006));
JedisCluster jcd = new JedisCluster(jedisClusterNode, config);
jcd.set("name:003","wangwu");
String value = jcd.get("name:003");
System.out.println(value);
}
}
相關文章
- mysql主從搭建MySql
- Redis主從搭建Redis
- MYSQL5.6.40原始碼安裝 主從搭建 主主搭建MySql原始碼
- centos 搭建redis主從CentOSRedis
- MYSQL主從搭建5.6.38MySql
- Redis-cluster叢集搭建部署Redis
- Docker 方式 MySQL 主從搭建DockerMySql
- Mysql主從搭建(docker compose)MySqlDocker
- mysql主從複製搭建MySql
- MySQL(14)---Docker搭建MySQL主從複製(一主一從)MySqlDocker
- 基於GTID搭建主從MySQLMySql
- mysql雙主雙從 搭建配置MySql
- Redis主從同步叢集搭建Redis主從同步
- 在滴滴雲上搭建 Redis-Cluster 叢集Redis
- POSTGRESQL10.3 RPM包 主從搭建SQL
- 簡單搭建MySQL主從複製MySql
- Mysql主從複製原理及搭建MySql
- Redis叢集搭建 三主三從Redis
- 記一次 MySQL 主從搭建MySql
- RocketMQ雙主雙從叢集搭建MQ
- MySql雙主一從服務搭建MySql
- Docker 快速搭建主從 + 哨兵監控Docker
- Redis叢集搭建(三主三從)Redis
- 搭建 mariadb 資料庫主從同步資料庫主從同步
- MySQL-主從複製之搭建主資料庫MySql資料庫
- MySQL-主從複製之搭建從資料庫MySql資料庫
- mysql主從複製的理解和搭建MySql
- docker-compase搭建mysql主從複製DockerMySql
- MYSQL 主從 + ATLAS 讀寫分離 搭建MySql
- Redis搭建主從複製、哨兵叢集Redis
- 基於Linux的docker mysql主從搭建LinuxDockerMySql
- MySQL主從配置及haproxy和keepalived搭建MySql
- rocketMq之雙主雙從同步模式搭建MQ模式
- mysql 5.7 主從複製搭建及原理MySql
- Mysql 8.4.0 結合 Docker 搭建GTID主從複製,以及傳統主從複製MySqlDocker
- POSTGRESQL10.3原始碼安裝主從搭建SQL原始碼
- Docker Compose搭建MySQL主從複製叢集DockerMySql
- 怎樣在SQL Server搭建主從備份SQLServer