<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 場景描述[](http://blog.objectspace.cn/2019/11/08/%E6%89%8B%E5%8A%A8%E6%90%AD%E5%BB%BARedis%E9%9B%86%E7%BE%A4%E5%92%8CMySQL%E4%B8%BB%E4%BB%8E%E5%90%8C%E6%AD%A5(%E9%9D%9EDocker)/#%E5%9C%BA%E6%99%AF%E6%8F%8F%E8%BF%B0) 本次會啟動三臺CentOS 7服務器,每臺服務器上搭載三個Redis實例,一主二從,一共三個Master實例,六個Slave實例。 清單如下: > Master 1:IP:192.168.43.101 Port:7001 > > Master 2:IP:192.168.43.102 Port:7002 > > Master 3:IP:192.168.43.103 Port:7003 > > Slave 1:IP:192.168.43.101 Port:6001 > > Slave 2:IP:192.168.43.102 Port:6002 > > Slave 3:IP:192.168.43.103 Port:6003 > > Slave 4:IP:192.168.43.101 Port:6004 > > Slave 5:IP:192.168.43.102 Port:6005 > > Slave 6:IP:192.168.43.103 Port:6006 ### **修改配置文件** 熟悉Redis的應該明白,所謂Redis實例,實際上就是一個又一個的配置文件。要在服務器上啟動多臺不同Redis,實際上就是使用不同的配置文件來啟動Redis,所以第一步我們要先對集群中的每一個Redis實例配置不一樣的配置文件。 #### **綁定Redis地址** 下列三臺主機上的配置文件均為Master節點配置文件(修改bind屬性) ![](https://img.kancloud.cn/4a/1a/4a1a24b67d4aa7fbe1b889388c0e3983_1481x732.png) #### **修改端口號** 將端口號修改為自定義的端口號,默認為6379,修改為我們自定義的端口號。 ![](https://img.kancloud.cn/71/61/7161cb736be3b2aaee4c6d36909861ae_1612x785.png) #### **開啟集群模式并設置集群配置文件** 將cluster-enabled 設置為yes,并將cluster-config-file設置為自定義的文件。 這里定義為nodes-端口號.conf ![](https://img.kancloud.cn/94/76/9476c1789cb7ce3e6a93df41abdb3b0e_1685x760.png) #### **修改集群RDB快照和AOF文件的存放位置** 修改dir屬性,這里定義為/home/redis-cluster/redis-master/ ![](https://img.kancloud.cn/ad/78/ad782b9569baa23dd0bf4af50919aac3_1572x786.png) #### **修改集群密碼** 修改masterauth屬性為Redis(RequirePass)密碼 ![](https://img.kancloud.cn/53/e7/53e731edbb379be62c823f3eef88382b_1728x415.png) #### **開啟AOF持久化** 修改appendonly屬性 ``` appendonly yes ``` ### **對六臺Slave節點進行同樣的修改配置操作** 注意:上述指定的文件夾和文件名原則上對于每個redis實例都應該是唯一的,便于區分 ### **啟動Redis實例** 運行命令: ``` #第一臺主機 /usr/local/bin/redis-server /home/redis-cluster/redis-master/redis-master-7001.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6001.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6004.conf #第二臺主機 /usr/local/bin/redis-server /home/redis-cluster/redis-master/redis-master-7002.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6002.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6005.conf #第三臺主機 /usr/local/bin/redis-server /home/redis-cluster/redis-master/redis-master-7003.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6003.conf /usr/local/bin/redis-server /home/redis-cluster/redis-slave/redis-slave-6006.conf ``` **查看進程**ps -ef | grep redis: ![](https://img.kancloud.cn/ba/d9/bad9df394abb6984024eb543755dfcdf_1698x184.png) ### **搭建集群** 輸入命令: ``` /usr/local/bin/redis-cli -a Object --cluster create --cluster-replicas 2 192.168.43.101:7001 192.168.43.102:7002 192.168.43.103:7003 192.168.43.101:6001 192.168.43.102:6002 192.168.43.103:6003 192.168.43.101:6004 192.168.43.102:6005 192.168.43.103:6006 ``` 其中`--cluster-replicas 2`代表每個Master攜帶2個Slave,那么就是三個Master,每個Master攜帶兩個Slave。 示意圖如下: ![](https://img.kancloud.cn/cc/c6/ccc690b9fd2cee3749d589e7f52382b8_1670x662.png) 我們可以看到,Redis將三臺機器連成了一個整體,Master7001的Slave指向了其它兩臺服務器上的Slave,而其它兩臺服務器的Master也同樣跨服務器指向了,這就是RedisCluster高可用的策略,假設有一臺服務器完整地宕機了,由于自己的Slave節點存在于別的服務器上,數據也能重新通過選舉選舉的方式恢復,不易引起數據的丟失。 ![](https://img.kancloud.cn/7f/9f/7f9ff9d9813b1cb7c7e91273258029b2_529x522.png) * 另外我們可以看到,我們在上文說過,Cluster集群模式將集群分為16384個槽,這里體現為0-16383,分布到了每一個Master節點上,這對我們之前的理論部分做了驗證。 ## **測試** 測試環節通過客戶端測試和Java程序測試,來模擬集群模式下Redis的存儲策略。 #### **客戶端測試** 開啟客戶端,隨意連接一個master節點 ``` /usr/local/bin/redis-cli -c -a 密碼 -h IP -p 端口 ``` ![](https://img.kancloud.cn/2e/42/2e42784d767327ac54fef1eef2c66694_543x160.png) * 我們可以看到,當我們set一個鍵值對的時候,Redis會自動為我們的key計算CRC16值,然后對16384取模,獲取key對應的hash slot,然后通過判斷該槽被那個Master所占用,幫我們重定向到那個Master節點,將鍵值對存入。 #### **程序測試** 在測試之前先把Redis中的數據清空。 對三個Master節點分別執行`flushall`命令 啟動程序: 1. 正常存入數據時關閉某Master節點(模擬宕機): ![](https://img.kancloud.cn/fb/14/fb146a9d21a5e0e07514be55afb4651f_524x221.png) 程序打印正在選舉… ![](https://img.kancloud.cn/c6/18/c61843b683852770a8e2f7f2263f3a5e_391x219.png) 2. 選舉結束后繼續IO ![](https://img.kancloud.cn/89/7b/897bcadf53774978658e2ec0df6ab688_425x118.png) 代碼: ~~~ public class JedisDemo { public static void main(String[] args) { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); Set<HostAndPort> nodes = new HashSet<>(); nodes.add(new HostAndPort("192.168.43.101",7001)); nodes.add(new HostAndPort("192.168.43.102",7002)); nodes.add(new HostAndPort("192.168.43.103",7003)); nodes.add(new HostAndPort("192.168.43.101",6001)); nodes.add(new HostAndPort("192.168.43.102",6002)); nodes.add(new HostAndPort("192.168.43.103",6003)); nodes.add(new HostAndPort("192.168.43.101",6004)); nodes.add(new HostAndPort("192.168.43.102",6005)); nodes.add(new HostAndPort("192.168.43.103",6006)); JedisCluster jedisCluster = new JedisCluster(nodes,100,1000,100,"Object","rediscluster",jedisPoolConfig,false); for(int i = 0;i<2000;i++) { try { System.out.println("存入數據:"+i); jedisCluster.set(String.valueOf(i),String.valueOf(i)); try { Thread.sleep(300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } String res = jedisCluster.get(String.valueOf(i)); System.out.println("取出數據:"+res); }catch(Exception e) { //出現節點宕機 System.out.println("正在選舉..."); System.out.println(new Date()); continue; } } jedisCluster.close(); } } ~~~ * 注意事項 1. 在搭建集群的過程中有可能會遇到一直等待連接,但是集群無法連接成功的狀況,這是因為我們在搭建集群的時候防火墻沒有開啟對應的端口號導致的,**我們不光要開啟我們對外連接的端口號,如7001、7002、7003,還要開啟對外連接端口號+10000的端口,用于集群內部相互通信,如節點端口為7001、7002、7003,那么我們還應該開啟17001、17002、17003這些端口**。 2. 如果遇到搭建失敗的情況,重新搭建的時候一定要到dir指向的文件夾中將快照和AOF還有node.conf文件刪干凈,否則無法重新搭建。 ### **搭建完畢** 至此我們已經完成了Redis集群的搭建,在私下實踐的時候可以試試使用Redis客戶端直接操作集群時手動關閉某個Master,會出現什么樣的狀況,這個是文章中沒有提到的內容。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看