1. 程式人生 > >mongodb 讀寫分離以及java端

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節點。