1. 程式人生 > 其它 >c#入門-深入瞭解string

c#入門-深入瞭解string

為什麼要有叢集

  • 之前我們已經講了主從的概念,一主可以多從,如果同時的訪問量過大(1000w),主服務肯定就會掛掉,資料服務就掛掉了或者發生自然災難
  • 大公司都會有很多的伺服器(華東地區、華南地區、華中地區、華北地區、西北地區、西南地區、東北地區、臺港澳地區機房)

叢集的概念:

叢集是一組相互獨立的、通過高速網路互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與叢集相互作用時,叢集像是一個獨立的伺服器。叢集配置是用於提高可用性和可縮放性。

當請求到來首先由負載均衡伺服器處理,把請求轉發到另外的一臺伺服器上。

redis叢集實際上就是存在多組的主從伺服器,共同協調工作

redis叢集

  • 軟體層面:只有一臺電腦,在這一臺電腦上啟動了多個redis服務。
  • 硬體層面:存在多臺實體的電腦,每臺電腦上都啟動了一個redis或者多個redis服務。

搭建叢集:

  • 當前擁有兩臺主機172.16.179.130、172.16.179.131,這⾥的IP在使⽤時要改為實際值,
  • 如果沒有多臺主機,可以使用一臺主機不同埠模擬多個伺服器

1. 啟動多個redis服務

1.1 配置檔案準備:

redis配置檔案.conf舉例如下:

# 埠
port 7000
# IP
bind 172.16.179.130
# 是否以守護程序(後臺)方式執行
daemonize yes
pidfile 7000.pid
# 是否使用叢集
cluster-enabled yes
cluster-config-file 7000_node.conf
# 叢集超時時間
cluster-node-timeout 
15000 # 備份相關配置 appendonly yes

為不同的redis服務定義上述的配置檔案,同一個主機可以只修改上述配置中的埠號(將檔案中所有7000換成其他值),即可生成多個配置檔案

1.2 使用上面的配置檔案啟動多個redis 服務:

redis-server 7000.conf
redis-server 7001.conf
redis-server 7002.conf

2.基於多個redis服務,建立叢集

  • redis的安裝包中包含了redis-trib.rb,⽤於建立叢集

2.1 複製redis-trib.rb到/usr/local/bin/

sudo cp /usr/local/redis/src/redis-trib.rb /usr/local/bin/

2.2安裝ruby環境,因為redis-trib.rb是⽤ruby開發的

sudo apt-get install ruby

2.3 建立叢集

redis-trib.rb create --replicas 1 172.16.179.130:7000 172.16.179.130:7001 172.16.179.130:7002 172.16.179.131:7003 172.16.179.131:7004 172.16.179.131:7005

執⾏上⾯這個指令在某些機器上可能會報錯,主要原因是由於安裝的 ruby 不是最 新版本!,解決方法:天朝的防⽕牆導致⽆法下載最新版本,所以需要設定 gem 的源

-- 先檢視⾃⼰的 gem 源是什麼地址
gem source -l -- 如果是https://rubygems.org/ 就需要更換

-- 更換指令為
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/

-- 通過 gem 安裝 redis 的相關依賴
sudo gem install redis

-- 然後重新執⾏指令
redis-trib.rb create --replicas 1 172.16.179.130:7000 172.16.179.130:7001 172.16.179.130:7002 172.16.179.131:7003 172.16.179.131:7004 172.16.179.131:7005

3.訪問叢集

redis-cli -h 192.168.1.102 -p 7000 -c

說明:新增 -c 選項連線叢集

結果:

liuxuelin@liuxuelin-virtual-machine:~/clustercfg$ redis-cli -h 192.168.1.102 -p 7000 -c
192.168.1.102:7000> set name abc
-> Redirected to slot [5798] located at 192.168.1.102:7001
OK
192.168.1.102:7001> get name
"abc"
192.168.1.102:7001> 

說明:設定("name":"abc")時,叢集根據一定的演算法將鍵值對儲存至對應的伺服器,上面例子,連線的時埠7000的伺服器,而資料儲存到了7001伺服器