docker部署redis集群
1.0 安裝環境
1.1 安裝Centos7
-
Docker官方建議在Ubuntu中安裝,因為Docker是基於Ubuntu發布的,而且一般Docker出現的問題Ubuntu是最先更新或者打補丁的。在很多版本的CentOS中是不支持更新最新的一些補丁包的。
-
如果docker安裝在centos上面建議用Centos7版本,在CentOS6.x的版本中,安裝前需要安裝其他很多的環境而且Docker很多補丁不支持更新。
1.2 安裝Docker
# 更新原有安裝包
yum -y update
# 安裝依賴
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 安裝docker
sudo yum install docker-ce
1.21 docker常用命令
- linux 的 service 和 systemctl 命令大致區別
- 啟用可以用service docker start也可以用systemctl start docker其他重啟停止也可以用systemctl
- CentOS 7.x 開始,CentOS 開始使用 systemd 服務來代替 daemon,原來管理系統啟動和管理系統服務的相關命令全部由 systemctl命 令來代替。
- service命令是Redhat Linux兼容的發行版中用來控制系統服務的實用工具,它以啟動、停止、重新啟動和關閉系統服務,還可以顯示所有系統服務的當前狀態。
- service啟動缺點
- 一是啟動時間長。init 進程是串行啟動,只有前一個進程啟動完,才會啟動下一個進程。
- 二是啟動腳本復雜。init 進程只是執行啟動腳本,不管其他事情。腳本需要自己處理各種情況,這往往使得腳本變得很長
- systemctl 優缺點
- Systemd 的優點是功能強大,使用方便,缺點是體系龐大,非常復雜。事實上,現在還有很多人反對使用 Systemd,理由就是它過於復雜,與操作系統的其他部分強耦合,違反 “keep simple, keep stupid” 的Unix 哲學。
# 查看docker版本
docker -v
# 啟動
service docker start
# 停止
service dockerstop
# 重啟
service docker restart
# 開機啟動
systemctl enable docker
# 重啟docker
systemctl restart docker
1.21 在線安裝docker鏡像
# 搜索java鏡像
docker search java
#拉取java鏡像
docker pull java
- docker倉庫是部署在國外服務器上面的,所以如果在國內拉取鏡像那將是一個非常漫長的過程,因此我們可以用一些國內的鏡像倉庫,比如阿里雲的又或者加速器DaoCloud
1.22 配置Docker加速器
- 配置阿里雲鏡像加速器
- 配置阿里雲鏡像加速器需要注冊賬號
- https://cr.console.aliyun.com/#/imageList)
- 注冊之后點擊左下方鏡像加速器會生成一個專屬加速網址
- 將生成的專屬網址,加入/etc/docker/daemon.json即可
# 修改docker配置文件
vi /etc/docker/daemon.json
- 配置Daocloud加速器
#配置加速器命令(復制粘貼執行即可)Ps:此命令僅克用於Linux操作系統
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
- 注意:在設置完成后,可能有一個坑存在的,執行命令設置后,它會在docker配置文件中添加一個地址,但是地址后面是多了一個,號的,需要手動刪除
- 刪除配置文件中多余的,號
# 修改docker配置文件
vi /etc/docker/daemon.json
1.23 導出和導出鏡像
# 導出鏡像
docker save 鏡像名>導出路徑
docker sava tomcat > /home/tomcat.tar.gz
# 導入鏡像
docker load<鏡像文件路徑
docker load < /home/mysql.tar.gz
#查看docker已有鏡像
docker images
# 刪除鏡像
docker rmi 鏡像名
docker rmi reids
#修改鏡像名
docker tag 原鏡像名 修改后鏡像名
docker tag docker.io/percona/percona-xtradb-cluster pxc
1.24 容器相關命令
# 創建並且啟動一個容器
# -it表示啟動容器后開啟一個交互的界面 --name 給容器起一個名字不取就沒有可通過id辨別 bash代表啟動程序后運行什么樣的成員bash=bash命令行
docker run -it --name myTomcat tomcat bash
# 開啟容器並且映射端口 -p 8088:8080代表將容器8080端口映射到宿主機8088上面 可以映射多個端口
docker run -it --name myTomcat -p 8088:8080 -p 8089:3306 tomcat bash
# 開啟容器並且映射目錄或者文件
# -v宿主機目錄映射到容器中/home/data:/mysqlData冒號之前是宿主機的目錄集將目錄/home/data映射到/mysqlData
# --privileged這個是代表容器操作映射目錄使用的是最高權限,即可讀可寫可執行
docker run -it --name myTomcat -v /home/data:/mysqlData --privileged tomcat bash
# 三條命令合一
docker run -it -p 8088:8080 -p 8089:3306 -v /home/data:/mysqlData --privileged --name myTomcat tomcat bash
# 停止容器 myTomcat是容器名字沒有可以通過容器id識別
docker pause myTomcat
# 恢復容器
docker unpauser myTomcat
# 徹底停止容器
docker stop myTomcat
# 重新啟動容器
docker start -i myTomcat
# 退出交互頁面開啟容器-it執行的(同時會徹底關閉容器)
exit
# 刪除容器
docker rm myTomcat
# 進入容器
docker exec -it 容器名 bash
# 重命名容器名
docker rename 原容器名稱 新容器名稱
PS:
以上僅僅是Docker基礎命令
Docker后面還有
容器數據卷
DockerFile(制作鏡像使用)
Docker Compose (多容器管理)
Docker Swarm (docker集群)
2.0基於docker部署RedisCluster集群
2.01 RedisCluster集群介紹
-
常見Redis集群方案
- RedisCluster Reids官方產品 沒有中心節點,數據分片儲存
- Codis 豌豆莢團隊開發 有中心節點,豌豆莢 因為Codis是一個無狀態的,所以可以增加多個Codis來提升QPS,同時也可以起着容災的作用。
- Twemproxy是Twitter團隊的開源的 有中心節點
-
Redis主從同步
- RedisCluster 切片存儲(每個節點儲存數據不同)
- 引入冗余節點,把主節點數據分發非從從節點當住節點掛掉后吧數據復制到從節點繼續使用
-
Redis高可用
- 集群中住節點應采用奇數節點至少3個因為RedisCluster擁有選舉機制
- 每個主節點都應該有對應的從節點,將主節點數據復制到從節點
2.02 部署Redis集群
-
安裝Redis
#拉去redis鏡像 docker pull redis # 創建network2網段 docker network create --subnet=172.20.0.0/24 network2 # 創建6節點redis容器 docker run -it -d --name redis1 -p 6001:6379 --net=network2 --ip 172.20.0.2 redis bash docker run -it -d --name redis2 -p 6002:6379 --net=network2 --ip 172.20.0.3 redis bash docker run -it -d --name redis3 -p 6003:6379 --net=network2 --ip 172.20.0.4 redis bash docker run -it -d --name redis4 -p 6004:6379 --net=network2 --ip 172.20.0.5 redis bash docker run -it -d --name redis5 -p 6005:6379 --net=network2 --ip 172.20.0.6 redis bash docker run -it -d --name redis6 -p 6007:6379 --net=network2 --ip 172.20.0.7 redis bash # 進入redis容器 docker exec -it redis1 bash
-
修改redis配置文件
# 編輯配置文件 vi /usr/redis/redis.conf #找到一下參數並做修改 daemonize yes #以后台進程運行 cluster-enabled yes #開啟集群 cluster-config-file nodes.conf #集群配置文件 cluster-node-timeout 15000 #超時時間 append only yes #開啟AOF(日志)模式
-
啟動redis
#進入redis cd /usr/redis/src #啟動 ./redis-server ../redis.conf #依次進入23456redis節點修改配置文件並啟動redis
-
安裝redis-trib.rb
-
redis-trib.rb這個是redis自帶的通過redis-trib.rb創建RedisCluster集群
-
redis-trib是ruby寫的首先安裝ruby
# 復制redis-trib.rb 到一個空目錄 cp /usr/redis/src/redis-trib.rb /usr/redis/cptrib需要拷貝目錄 # 進入剛剛拷貝目錄 cd /usr/redis/cluster # 安裝ruby apt-get install ruby apt-get install rubygems #安裝執行腳本 gem install redis
-
創建redis集群
#進入redis容器1 docker exec -it redis1 bash # 進入redis目錄 cd /usr/redis/src #創建cluster目錄 mkdir -p ../cluster #復制redis-trib.rb cp redis-trib.rb ../cluster/ #進入cluster在此目錄創建redis集群 cd ../cluster # --replicas 1一個主節點給一個從節點 后面是redisip+端口 ./redis-trib.rb create --replicas 1 172.20.0.2:6379 172.20.0.3:6379 172.20.0.4:6379 172.20.0.5:6379 172.20.0.6:6379 172.20.0.7:6379
-
錯誤匯總
- WARNING: IPv4 forwarding is disabled. Networking will not work.
# 解決命令
echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf
# 重啟network 和docker
systemctl restart network && systemctl restart docker
作者:淚夢紅塵
文章出處:https://www.s1g.cn/index.php/docker/8.html