NOSQL搭建redis群集
Redis群集介紹
- Redis群集是一個提供在多個Redis間節(jié)點間共享數(shù)據(jù)的程序集
- Redis集群并不支持處理多個keys的命令,因為這需要在不同的節(jié)點間移動數(shù)據(jù),從而達不到像Redis那樣的性能,在高負載的情況下可能會導(dǎo)致不可預(yù)料的錯誤
- Redis集群通過分區(qū)來提供一定程度的可用性,在實際環(huán)境中當(dāng)某個節(jié)點宕機或者不可達的情況下可繼續(xù)處理命令
- Redis集群的優(yōu)勢
- Redis集群的實現(xiàn)方法
- Redis-Cluster數(shù)據(jù)分片
Redis集群沒有使用一致性hash,而是引入了哈希槽概念
Redis集群有16384個哈希槽
每個key通過CRC16校驗后對16384取模來決定放置槽
集群的每個節(jié)點負責(zé)一部分哈希槽
以3個節(jié)點組成的群集為例
①節(jié)點A包含0-5500號哈希槽
②節(jié)點B包含5501到11000號哈希槽
③節(jié)點C包含11001到16384號哈希槽
支持添加或者刪除節(jié)點
①添加刪除節(jié)點無需停止服務(wù)
②例如:
如果想新添加節(jié)點D,需要移動節(jié)點A、B、C中的部分槽到D上
如果想移除節(jié)點A,需要將A中的槽移動到B和C節(jié)點上,再將沒有任何槽的A節(jié)點從集群中移除
Redis-Cluster的主從復(fù)制模型
①集群中具有A、B、C三個節(jié)點,如果節(jié)點B失敗了,整個集群就會因缺少5501-11000這個范圍的槽而不可用
②為每個節(jié)點添加一個從節(jié)點A1、B1、C1,整個集群便有三個master節(jié)點和三個slave節(jié)點組成,在節(jié)點B失敗后,集群便會選擇B1位新的主節(jié)點繼續(xù)服務(wù)
③當(dāng)B和B1都失敗后,集群將不可用
redis群集搭建
實驗環(huán)境2臺linux每臺3個節(jié)點共6個
master:192.168.136.88
slave:192.168.136.40
關(guān)閉防火墻
[root@localhost 6379]# iptables -F [root@localhost 6379]# setenforce 0安裝redis
兩臺服務(wù)器都需要安裝redis
安裝依賴環(huán)境
[root@localhost ~]# yum -y install gcc gcc-c++解壓
[root@localhost ~]#tar zxvf redis-5.0.7.tar.gz -C /opt/編譯
[root@localhost ~]#tar zxvf redis-5.0.7.tar.gz -C /opt/ [root@localhost ~]# cd /opt/redis-5.0.7/ [root@localhost redis-5.0.7]# make [root@localhost redis-5.0.7]# make PREFIX=/usr/local/redisinstall
將redis建立軟連接讓系統(tǒng)所能識別
[root@localhost redis-5.0.7]# ln -s /usr/local/redis/bin/* /usr/local/bin/配置數(shù)據(jù)位置
[root@localhost ]# cd /opt/redis-5.0.7/utils/ [root@localhost utils]# ./install_server.sh 一直回車查看端口是否開啟
[root@localhost utils]# netstat -lutp | grep redis tcp 0 0 localhost:6379 0.0.0.0:* LISTEN 28048/redis-serverredis群集
所有節(jié)點操作(倆臺都要操作)
[root@localhost utils]# vim /etc/redis/6379.conf 70 #bind 127.0.0.189 protected-mode no 關(guān)閉保護模式93 port 6379 端口號一定要開啟137 daemonize yes 獨立進程833 cluster-enabled yes 開啟群集(一定要頂頭)841 cluster-config-file nodes-6379.conf 配置文件(一定要頂頭)847 cluster-node-timeout 15000 超時時間(一定要頂頭)700 appendonly yes 開啟aof查看群集文件位置
[root@localhost 6379]# cd /var/lib/redis/6379/ [root@localhost 6379]# ls appendonly.aof dump.rdb nodes-6379.confnodes-6379.conf 群集節(jié)點的文件已生成
在master服務(wù)器上操作
導(dǎo)入key文件
[root@localhost 6379]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3gpg: 已創(chuàng)建目錄‘/root/.gnupg’ gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立 gpg: 警告:在‘/root/.gnupg/gpg.conf’里的選項于此次運行期間未被使用 gpg: 鑰匙環(huán)‘/root/.gnupg/secring.gpg’已建立 gpg: 鑰匙環(huán)‘/root/.gnupg/pubring.gpg’已建立 gpg: 下載密鑰‘D39DC0E3’,從 hkp 服務(wù)器 keys.gnupg.net gpg: /root/.gnupg/trustdb.gpg:建立了信任度數(shù)據(jù)庫 gpg: 密鑰 D39DC0E3:公鑰“Michal Papis (RVM signing) <mpapis@gmail.com>”已導(dǎo)入 gpg: 沒有找到任何絕對信任的密鑰 gpg: 合計被處理的數(shù)量:1 gpg: 已導(dǎo)入:1 (RSA: 1安裝rvm(使用游覽器打開以txt文件運行)
[root@localhost utils]# cd /opt/ [root@localhost opt]# rz -E 導(dǎo)入rvm.txt [root@localhost opt]# chmod +x rvm-installer.sh運行腳本
[root@localhost opt]# ./rvm-installer.sh Thanks for installing RVM 🙏 Please consider donating to our open collective to help us maintain RVM.👉 Donate: https://opencollective.com/rvm/donate執(zhí)行環(huán)境變量
[root@localhost opt]# cd /etc/profile.d/ [root@localhost profile.d]# source rvm.sh安裝ruby2.4.1版本(建議用熱點)
[root@localhost profile.d]# rvm install 2.4.10使用2.4.10版本
[root@localhost profile.d]# rvm use 2.4.10再次安裝
[root@localhost profile.d]# gem install redis 查看所有版本信息 [root@localhost profile.d]# rvm list known查看當(dāng)前版本 [root@localhost profile.d]# ruby -v ruby 2.4.10p364 (2020-03-31 revision 67879) [x86_64-linux]創(chuàng)建群集
Master
192.168.136.88
192.168.136.134
192.168.136.136
slave
192.168.136.40
192.168.136.138
192.168.136.141
添加主配置監(jiān)聽端口
重啟服務(wù)
[root@localhost 6379]# /etc/init.d/redis_6379 restart Stopping ... Redis stopped Starting Redis server...查看端口
[root@localhost 6379]# netstat -nultp | grep 6379 tcp 0 0 192.168.136.136:6379 0.0.0.0:* LISTEN 32578/redis-server tcp 0 0 192.168.136.134:6379 0.0.0.0:* LISTEN 32578/redis-server tcp 0 0 192.168.136.88:6379 0.0.0.0:* LISTEN 32578/redis-server tcp 0 0 192.168.136.136:16379 0.0.0.0:* LISTEN 32578/redis-server tcp 0 0 192.168.136.134:16379 0.0.0.0:* LISTEN 32578/redis-server tcp 0 0 192.168.136.88:16379 0.0.0.0:* LISTEN 32578/redis-server從服務(wù)器添加端口(和上面操作一樣不在贅述)
[root@localhost 6379]# netstat -nltp | grep 6379 tcp 0 0 192.168.136.141:6379 0.0.0.0:* LISTEN 66596/redis-server tcp 0 0 192.168.136.138:6379 0.0.0.0:* LISTEN 66596/redis-server tcp 0 0 192.168.136.40:6379 0.0.0.0:* LISTEN 66596/redis-server tcp 0 0 192.168.136.141:16379 0.0.0.0:* LISTEN 66596/redis-server tcp 0 0 192.168.136.138:16379 0.0.0.0:* LISTEN 66596/redis-server tcp 0 0 192.168.136.40:16379 0.0.0.0:* LISTEN 66596/redis-server主服務(wù)器配置哈希槽
[root@localhost profile.d]# redis-cli --cluster create 192.168.136.88:6379 192.168.136.134:6379 192.168.136.136:6379 192.168.136.40:6379 192.168.136.138:6379 192.168.136.141:6379 --cluster-replicas 1配置完畢!!!
測試是否同步
[root@localhost 6379]# redis-cli -c -h 192.168.136.88 192.168.136.88:6379> set name zhangsan OK 192.168.136.88:6379> keys * 1) "name"查看節(jié)點是否同步
192.168.136.88:6379> quit [root@localhost 6379]# redis-cli -c -h 192.168.136.134 192.168.136.134:6379> keys * 1) "name" 192.168.136.134:6379> quit [root@localhost 6379]# redis-cli -c -h 192.168.136.40 192.168.136.40:6379> keys * 1) "name" 192.168.136.40:6379> quit [root@localhost 6379]# redis-cli -c -h 192.168.136.141 192.168.136.141:6379> keys * 1) "name" 超強干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的NOSQL搭建redis群集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存带灯VS带马甲:炫酷与保护的选择
- 下一篇: 内存条界的战舰:海盗船内存条究竟有何魅力