欢迎投稿

今日深度:

Cassandra、mongodb、mariadb 集群配置文档,mongodbmariadb

Cassandra、mongodb、mariadb 集群配置文档,mongodbmariadb


一,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: 集群名称

 


 

www.htsjk.Com true http://www.htsjk.com/cassandra/32121.html NewsArticle Cassandra、mongodb、mariadb 集群配置文档,mongodbmariadb 一,cassandra数据库集群搭建 /etc/cassandra/cassandra.yaml   修改配置文件 listen_address: 192.168.10.12                     当前ip rpc_a...
相关文章
    暂无相关文章
评论暂时关闭