一,cassandra数据库集群搭建
/etc/cassandra/cassandra.yaml 修改配置文件
listen_address: 192.168.10.12 当前ip
rpc_address: 0.0.0.0 远程监听地址
broadcast_rpc_address: 192.168.10.12 广播地址,设置为当前ip
- seeds: "192.168.10.12,192.168.10.13" 种子节点的地址,新加入的节点需要跟他通信,以获取整个集群的状态,可以设置多个
配置完成后,先启动种子节点,再启动其余的节点
service cassandra start 启动数据库
nodetool status 查看集群的状态,UN:在线 DN:离线
nodetool removenode xxxxx 删除离线节点
nodetool cleanup 删除节点上多余的数据
当集群中的某个节点挂掉时,其状态变为DN,这时需要通过命令nodetool removenode 把
该节点从集群中删除掉,它的数据会被平均的分配到剩余的节点中去;这时有新节点加入
集群时,原节点的数据会被复制到新节点上面,但是其余节点上仍有额外的备份数据,需
要通过命令nodetool cleanup,把多余的数据清理掉(如果你不在乎这额外的备份数据,也可
以不删除)
当集群中某个节点挂掉,其状态变为DN,我们不删除该节点时,往剩下的节点继续插入数
据,集群会记录这些数据应该存储在哪些节点,它会把应该存储在宕机节点上的数据存储
在剩下的节点上。当宕机节点重启了以后,这些数据会同步到宕机节点上,但是剩下的节
点仍然有冗余数据,需要nodetool cleanup 删除。
二,mongodb数据库集群搭建
启动mongodb
mongod --replSet application --dbpath/ssd/mongodb --port 27017 --oplogSize 1024
其中,--replSet application 副本集名称
--dbpath/ssd/mongodb 数据保存的地址
--port27017 端口号
进入mongodb
mongo
使用admin数据库
use admin
修改副本集的配置,此配置只需要在主节点修改就行
cfg={ _id:"application",members:[ {_id:0,host:'192.168.10.203:27017',priority:2},
{_id:1,host:'192.168.10.204:27017',priority:1},
{_id:2,host:'192.168.10.205:27017',arbiterOnly:true}]};
cfg={ _id:"application",members:[ {_id:0,host:'192.168.10.203:27017',priority:3},
{_id:1,host:'192.168.10.204:27017',priority:2},
{_id:2,host:'192.168.10.205:27017',priority:1}]};
其中,priority:优先级,最大的是主节点
_id:"application": 副本集的名称
arbiterOnly:true: 仲裁者,仲裁者节点不保存数据
使配置生效
rs.initiate(cfg)
查看集群状态
rs.status()
删除节点
rs.remove("node3:27017")
新增节点
rs.add("node3:27017")
配置从节点为可读状态
db.setslaveOk() 或者rs.slaveOk()
mongodb的集群方案有三种
第一种:master-slave, 主从复制,这种方案,如果主节点宕机了,需要手动的提升某一个从节点为主节点,不推荐使用
第二种:replic-set, 副本集,也是一种主从复制,但是内部有投票机制,主节点挂掉以后会自动选举一个从节点变为主节点。这种方案,所有的节点的数据是完全一致的,从节点需要从主节点那里同步数据,无法横向扩展,无法通过增加节点来增加存储空间。
第三种:shards 分片,可以横向扩展,通过增加节点来增加存储空间。
在本文 mongos为 20000, config server 为 21000, shard1为 22001 , shard2为22002, shard3为22003.
在每一台服务器分别启动配置服务器
mongod --configsvr --dbpath/ssd/mongodb/config/data --port 21000 --logpath/ssd/mongodb/config/log/config.log --fork
在每一台服务器分别启动mongos服务器
mongos --configdb192.168.10.203:21000,192.168.10.204:21000,192.168.10.205:21000 --port 20000 --logpath /ssd/mongodb/mongos/log/mongos.log --fork
在每个机器里分别设置分片1服务器及副本集shard1
mongod --shardsvr --replSet shard1 --port22001 --dbpath /ssd/mongodb/shard1/data --logpath /ssd/mongodb/shard1/log/shard1.log --fork --nojournal --oplogSize 10
在每个机器里分别设置分片2服务器及副本集shard2
mongod --shardsvr --replSet shard2 --port22002 --dbpath /ssd/mongodb/shard2/data --logpath /ssd/mongodb/shard2/log/shard2.log --fork --nojournal --oplogSize 10
在每个机器里分别设置分片3服务器及副本集shard3
mongod --shardsvr --replSet shard3 --port22003 --dbpath /ssd/mongodb/shard3/data --logpath /ssd/mongodb/shard3/log/shard3.log --fork --nojournal --oplogSize 10
任意一台机器:
设置第一个分片副本集
mongo 127.0.0.1:22001
use admin
config = { _id:"shard1",members:[
{_id:0,host:"192.168.10.203:22001", priority:2},
{_id:1,host:"192.168.10.204:22001", priority:1},
{_id:2,host:"192.168.10.205:22001",arbiterOnly:true}
]
}
rs.initiate(config);
设置第二个分片副本集
mongo 127.0.0.1:22002
use admin
config = { _id:"shard2",members:[
{_id:0,host:"192.168.10.203:22002", priority:2},
{_id:1,host:"192.168.10.204:22002", priority:1},
{_id:2,host:"192.168.10.205:22002",arbiterOnly:true}
]
}
rs.initiate(config);
设置第三个分片副本集
mongo 127.0.0.1:22003
use admin
config = { _id:"shard3",members:[
{_id:0,host:"192.168.10.203:22003", priority:2},
{_id:1,host:"192.168.10.204:22003", priority:1},
{_id:2,host:"192.168.10.205:22003",arbiterOnly:true}
]
}
rs.initiate(config);
连接到mongos
mongo 127.0.0.1:20000
use admin
串联路由服务器与分配副本集1
db.runCommand( { addshard :"shard1/192.168.10.203:22001,192.168.10.204:22001,192.168.10.205:22001"});
串联路由服务器与分配副本集2
db.runCommand( { addshard :"shard2/192.168.10.203:22002,192.168.10.204:22002,192.168.10.205:22002"});
串联路由服务器与分配副本集3
db.runCommand( { addshard :"shard3/192.168.10.203:22003,192.168.10.204:22003,192.168.10.205:22003"});
查看分片服务器的配置
db.runCommand( { listshards : 1 } );
指定testdb分片生效
db.runCommand( { enablesharding:"testdb"});
指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection :"testdb.table1",key : {id: 1} } )
或者db.runCommand({ shardcollection : "testdb.table1",key : {"_id": "hashed"}} )
测试分片配置结果。
连接mongos服务器
mongo 127.0.0.1:20000
use testdb;
插入测试数据
for (var i = 1; i <= 10000; i++){
db.table1.save({id:i,"test1":"testval1"});
}
查看分片情况
db.table1.stats();
整个分片集群搭建完了,思考一下我们这个架构是不是足够好呢?其实还有很多地方需要优化,比如我们把所有的仲裁节点放在一台机器,其余两台机器承担了全部读写操作,但是作为仲裁的192.168.0.138相当空闲。让机器3 192.168.0.138多分担点责任吧!架构可以这样调整,把机器的负载分的更加均衡一点,每个机器既可以作为主节点、副本节点、仲裁节点,这样压力就会均衡很多了,如图:
三,mariadb数据库集群搭建
sudo apt-get update
sudo apt-get installpython-software-properties
sudo apt-key adv --recv-keys --keyserverhkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository 'debhttp://mirror.jmu.edu/pub/mariadb/repo/5.5/ubuntu precise main'
sudo apt-get update
sudo apt-get install mariadb-galera-servergalera
sudo apt-get install rsync
mysql 设置:
首先,打开/etc/mysql/my.cnf文件,在所有节点上把下面几行注释掉
root@ubuntu-nodeX:~#vim /etc/mysql/my.cnf
#bind-address = 127.0.0.1
#default_storage_engine = InnoDB
#query_cache_limit = 128K
#query_cache_size = 64M
然后,修改max_allowed_packet的值
max_allowed_packet=20M
在[mysqld]下面添加下面这些行
[mysqld]
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
innodb_doublewrite=1
lower_case_table_names=1
以下这些内容在每个节点上不一样
[mysqld]
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=256M;gcache.page_size=128M"
wsrep_cluster_address=gcomm://172.1.1.1,172.2.2.2,172.3.3.3 集群的节点ip
wsrep_cluster_name="MariaDB_Cluster" 集群名称
wsrep_node_address="172.1.1.1" 当前节点的地址
wsrep_node_name="ubuntu-node1" 当前节点的名称
wsrep_sst_auth="root:'yourpassword'" mariadb的账号密码
wsrep_node_incoming_address=172.1.1.1 当前IP
wsrep_sst_receive_address=172.1.1.1 当前IP
wsrep_slave_threads=16 所有节点一致即可
在其中一个节点上,打开Debian的配置文件
sudo vim /etc/mysql/debian.cnf
你会看到类似下面的东西
[client]
host = localhost
user = debian-sys-maint
password = 03P8rdlknkXr1upf
socket =/var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = 03P8rdlknkXr1upf
socket =/var/run/mysqld/mysqld.sock
basedir = /usr
在其他节点上打开同样的文件
sudo vim /etc/mysql/debian.cnf
删除当前信息,把上面的东西拷过来,保证各个节点上面的信息完全一样,保存退出。
关闭正在运行的mariadb的服务
sudo service mysql stop
在第一个节点上用特殊的参数启动mariadb
sudo service mysql start--wsrep-new-cluster
在其他节点上正常启动mariadb
sudo service mysql start
在各个节点上查看集群状态
mysql -u root -pmariadb_admin_password -e'SHOW STATUS LIKE "wsrep%"'
"仲裁人"节点加入集群的方法如下:
garbd -a gcomm://192.168.10.205:4567 -g MariaDB_Cluster–d
# 注释:参数说明 :
-d:以daemon模式运行
-a:集群地址
-g: 集群名称