mongodb 讀寫分離以及java端
mongod.exe --bind_ip 192.168.1.202 --port 50001 --logpath E:\MongoDB\logs\log.txt --logappend --dbpath E:\MongoDB\data\db --replSet zhangwei mongod.exe --bind_ip 192.168.1.202 --port 50002 --logpath E:\MongoDB\logs\log1.txt --logappend --dbpath E:\MongoDB\data\db1 --replSet zhangwei mongod.exe --bind_ip 192.168.1.202 --port 50003 --logpath E:\MongoDB\logs\log2.txt --logappend --dbpath E:\MongoDB\data\db2 --replSet zhangwei
#連線主伺服器,此處設定192.168.1.202:50001為主伺服器 mongo --host 192.168.1.202 --port 50001 #初始化,哪個伺服器先初始化就是主伺服器 rs.initiate()
#檢視當前狀態 rs.status()
#新增副本集 rs.add('192.168.1.202:50002') rs.add('192.168.1.202:50003')
#連線從伺服器 mongo --host 192.168.1.202 --port 50002 mongo --host 192.168.1.202 --port 50003 #設定可讀 rs.slaveOk()
接下來就是java客戶端的配置
ReadPreference preference = ReadPreference.secondary(); MongoClientOptions.Builder buide = new MongoClientOptions.Builder(); buide.connectionsPerHost(100);// 與目標資料庫可以建立的最大連結數 buide.connectTimeout(1000 * 60 * 20);// 與資料庫建立連結的超時時間 buide.maxWaitTime(100 * 60 * 5);// 一個執行緒成功獲取到一個可用資料庫之前的最大等待時間 buide.threadsAllowedToBlockForConnectionMultiplier(100); buide.maxConnectionIdleTime(0); buide.maxConnectionLifeTime(0); buide.socketTimeout(0); buide.socketKeepAlive(true); MongoClientOptions myOptions = buide.readPreference(preference).build(); try { List<ServerAddress> addresses = new ArrayList<ServerAddress>(); ServerAddress address1 = new ServerAddress("192.168.1.202" , 50001); ServerAddress address2 = new ServerAddress("192.168.1.202" , 50002); ServerAddress address2 = new ServerAddress("192.168.1.202" , 50003); addresses.add(address1); addresses.add(address2); mongoClient = new MongoClient(addresses,myOptions); } catch (Exception e) { e.printStackTrace(); }
需要實現為mongodb分壓,我們的讀都放到secondary節點,寫都放到primary節點
ReadPreference preference = ReadPreference.secondary();
MongoClientOptions myOptions = buide.readPreference(preference).build();
這兩句最重要。這兩句實現了讀資料只到secondary節點。