您好,登錄后才能下訂單哦!
原創文章,歡迎轉載。轉載請注明:轉載自IT人故事會,謝謝!
原文鏈接地址:「實戰篇」開源項目docker化運維部署-redis高速緩存(六)現在一般的項目都會用到redis做緩存,也不免有老鐵沒用過,我就一起說下吧。源碼:https://github.com/limingios/netFuture/tree/master/redis-cluster
####redis
https://redis.io/
Redis是一個開源(BSD許可)的內存數據結構存儲,用作數據庫、緩存和消息代理。它支持諸如字符串、散列、列表、集合、帶有范圍查詢的排序集、位圖、日志、帶有半徑查詢的地理空間索引和流之類的數據結構。Redis具有內置的復制、Lua腳本、LRU驅逐、事務和不同級別的磁盤持久性,并通過Redis Sentinel和Redis Cluster自動分區提供高可用性。
歷史
2008年,意大利一家創業公司Merzia的創始人Salvatore Sanfilippo為了避免MySQL的低性能,親自定做一個數據庫,并于2009年開發完成,這個就是Redis。
短短幾年,用戶數據量猛增。國內如新浪微博、街旁和知乎等,國外如GitHub、暴雪等,都是Redis的用戶。世界上最大規模的Redis緩存,就是新浪微博團隊打造的。熱點新聞的時候。Redis可以達到最多每秒10萬的讀寫。
高速緩存介紹
微信紅包就是很好的例子,在發紅包的時候,紅包信息就保存在緩存中,搶的人也是從高速緩存中取。春節當天幾個億的人來搶也保持系統的穩定。
Redis集群介紹
Redis目前的集群方案為以下幾種:
- RedisCluster:官方推薦,沒有中心點(主節點不是中心節點,而是保存數據最多的,最新的,同步后主節點就消失了)。
- Codis:中間件,存在中心節點(中心節點掛了,徹底玩完)。
- Twemproxy:中間件產品,存在中心節點。
RedisCluster
上邊說過,RedisCluster的數據是分片存儲的,如果redis掛了就會丟失一部分的數據。為了避免這個問題的產生,就必須引入主從同步的機制
Redis集群高可用
因為本身前后端分離項目,請求后端的時候,后端對請求已經做了負載均衡所以Redis不需要做負載均衡。
應用 | IP地址 | 服務 | 配置 | 安裝應用 | 安裝方式 |
---|---|---|---|---|---|
docker-mysql | 192.168.66.101 | docker-redis-cluster | 雙核 8g內存 | docker-redis-cluster | docker |
(1). 虛擬機vagrant講述安裝的步驟
vagrant up
(2).機器window/mac開通遠程登錄root用戶下
su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd
mkdir redis-cluster
cd redis-cluster
mkdir r1
cd r1
vi redis.conf
mkdir data
cd ~
配置了5個地方
- daemonize yes
以后臺進程運行- cluster-enabled yes
開啟集群- cluster-config-file 150000
超時時間- appendonly yes
開啟AOF模式,保存文件的形式- requirepass idig8.com
認證密碼- cluster-config-file nodes.conf
集群配置文件
直接看github我提交的源碼吧
想加上安全驗證,但是不生效,查了下daemonize yes,他的作用是是否開啟守護進程模式,在該模式下,redis會在后臺運行,并將進程pid號寫入至redis.conf選項pidfile設置的文件中,此時redis將一直運行,除非手動kill該進程。所以進入這個容器內手動選擇加載配置文件。
docker run -it -d \
-v /root/redis-cluster/r1/redis.conf:/etc/redis/redis.conf \
--name r1 -p 5001:6379 \
--net=net2 \
--ip 172.19.0.2 \
zhugeaming1314/redis bash
docker exec -it r1 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker run -it -d \
-v /root/redis-cluster/r2/redis.conf:/etc/redis/redis.conf \
--name r2 -p 5002:6379 \
--net=net2 \
--ip 172.19.0.3 \
zhugeaming1314/redis bash
docker exec -it r2 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker run -it -d \
-v /root/redis-cluster/r3/redis.conf:/etc/redis/redis.conf \
--name r3 -p 5003:6379 \
--net=net2 \
--ip 172.19.0.4 \
zhugeaming1314/redis bash
docker exec -it r3 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker run -it -d \
-v /root/redis-cluster/r4/redis.conf:/etc/redis/redis.conf \
--name r4 -p 5004:6379 \
--net=net2 \
--ip 172.19.0.5 \
zhugeaming1314/redis bash
配置啟動
docker exec -it r4 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker run -it -d \
-v /root/redis-cluster/r5/redis.conf:/etc/redis/redis.conf \
--name r5 -p 5005:6379 \
--net=net2 \
--ip 172.19.0.6 \
zhugeaming1314/redis bash
配置啟動
docker exec -it r5 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker run -it -d \
-v /root/redis-cluster/r6/redis.conf:/etc/redis/redis.conf \
--name r6 -p 5006:6379 \
--net=net2 \
--ip 172.19.0.7 \
zhugeaming1314/redis bash
docker exec -it r6 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
redis內自帶集群工具redis-trib.rb,操作redis-trib需要很多指令很麻煩。建議使用我提供的鏡像,里面什么都裝好了老鐵就根據我的命令操作就可以了 。
docker exec -it r1 bash
cd /usr/redis
mkdir cluster
cd src
cp redis-trib.rb ../cluster
cd ../cluster
./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379
docker exec -it r1 bash
/usr/redis/src/redis-cli -c
cluster nodes
!/upload-images.jianshu.io/upload_images/11223715-0123418e8224c25c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
can't connect to node 172.19.* redis.conf文件
- bind 127.0.0.1 注釋掉
- requirepass idig8.com 注釋掉
方式一:修改所有Redis集群中的redis.conf文件加入:?
masterauth idig8.com
requirepass idig8.com
說明:這種方式需要重新啟動各節點
方式二:進入各個實例進行設置:
./redis-cli -c -p 6379 config set masterauth idig8.com
config set requirepass idig8.com
config rewrite
之后分別使用./redis-cli -c -p 6379,./redis-cli -c -p 6379…..命令給各節點設置上密碼。
注意:各個節點密碼都必須一致,否則Redirected就會失敗, 推薦這種方式,這種方式會把密碼寫入到redis.conf里面去,且不用重啟。
用方式二修改密碼,./redis-trib.rb check 172.19.0.2:6379執行時可能會報[ERR] Sorry, can't connect to node 172.19.0.2:6379,因為6379的redis.conf沒找到密碼配置。
如:./redis-trib.rb check 127.0.0.1:6379,則會報錯ERR] Sorry, can’t connect to node 127.0.0.1:6379
解決辦法:vim /usr/local/rvm/gems/ruby-2.3.3/gems/redis-4.0.0/lib/redis/client.rb,然后修改passord
class Client
DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
:password => "idig8.com",
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:inherit_socket => false
}
注意:client.rb路徑可以通過find命令查找:find / -name 'client.rb'
帶密碼訪問集群
./redis-cli -c -p 6379-a idig8.com
PS:整個redis集群已經安裝完畢,3個master3個salve,如果1個master掛了對應的slave自動升級為master,掛的原來的master如果重新啟動就變成了slave。我嘗試用官方的docker鏡像redis來進行全流程的安裝,在docker run命令中加入配置文件啟動,這種方式是有問題的,到創建集群的時候還是會報錯的,還是建議用我的鏡像,這樣穩定些。并且里面自帶redis-trib.rb。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。