在主机和从机上分别开启Memcached多个端口,这里以192.183.3.230为主机(Master),开启11211、11212两个Memcached端口,对应的监听端口分别是12211、12212.,如下:
[root@nn ~]# /usr/local/bin/memcached -v -d -l 192.183.3.230 -p 11211 -u root -c 1024 -m 1024 -X 12211
[root@nn ~]# /usr/local/bin/memcached -v -d -l 192.183.3.230 -p 11212 -u root -c 1024 -m 1024 -X 12212
以192.183.3.189为从机(Slaver),开启11211、11212两个Memcached端口,对应的监听端口分别是12211、12212.,如下:
[root@zengxiangtao ~]#/usr/local/bin/memcached -v -d -l 192.183.3.189 -p 11211 -u root -x 192.183.3.230 -X 12211
[root@zengxiangtao ~]#/usr/local/bin/memcached -v -d -l 192.183.3.189 -p 11212 -u root -x 192.183.3.230 -X 12212
测试的JAVA代码如下:
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class MemcachedDemo1 {
protected static MemCachedClient mcc = new MemCachedClient();
public static MemCachedClient getMcc() {
return mcc;
}
protected static MemcachedDemo1 memCached = new MemcachedDemo1();
protected MemcachedDemo1() {
}
public static MemcachedDemo1 getInstance() {
return memCached;
}
public boolean add(String key, Object value) {
return mcc.add(key, value);
}
public boolean add(String key, Object value, Date expiry) {
return mcc.add(key, value, expiry);
}
public Object get(String key) {
return mcc.get(key);
}
public boolean flash_all() {
return mcc.flushAll();
}
public static void main(String[] args) {
MemcachedDemo1 cache = MemcachedDemo1.getInstance();
cache.setServers(new String[]{"192.183.3.189:11211","192.183.3.230:11211","192.183.3.189:11212","192.183.3.230:11212"});
for(int i = 0 ; i<2000;i++) {
cache.add("key"+i, "value"+i);
// cache.flash_all();
}
int count1 = 0;
cache.setServers(new String[]{"192.183.3.189:11211"});
for(int i = 0 ; i<2000;i++) {
if(cache.get("key"+i) != null) {
count1++;
}
}
System.out.println("189-11211 " + count1);
int count2 = 0;
cache.setServers(new String[]{"192.183.3.230:11211"});
for(int i = 0 ; i<2000;i++) {
if(cache.get("key"+i) != null) {
count2++;
}
}
System.out.println("230-11211 " + count2);
int count3 = 0;
cache.setServers(new String[]{"192.183.3.189:11212"});
for(int i = 0 ; i<2000;i++) {
if(cache.get("key"+i) != null) {
count3++;
}
}
System.out.println("189-11212 " + count3);
int count4 = 0;
cache.setServers(new String[]{"192.183.3.230:11212"});
for(int i = 0 ; i<2000;i++) {
if(cache.get("key"+i) != null) {
count4++;
}
}
System.out.println("230-11212 " + count4);
}
public void setServers(String[] servers) {
Integer[] weights = {3,3,3,3};
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(servers);
pool.setWeights(weights);
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(250);
pool.setMaxIdle(1000 * 60 * 60 * 6);
pool.setMaintSleep(30);
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setSocketConnectTO(0);
pool.initialize();
}
}
理论上230与189的11211端口、230与189的11212端口插入的数据量应该一致,并且应该是均衡的,运行结果显示:189-11211 999、230-11211 999、189-11212 1001、230-11212 1001,这说明开启了高可用之后,主从机对应节点的数据量是一致的,并且基本是均衡的。