Rootop 服务器运维与web架构

2014-04-24
发表者 Venus
暂无评论

openvas 的一些配置

openvas-mkcert -q
openvas-mkcert-client -n om -i   这两句运行所需的证书文件
openvas-nvt-sync   升级NVT库
初始化操作:
openvassd
openvasmd –migrate
openvasmd –rebuild
添加一个管理员的openvas登录用户
openvasad -c ‘add_user’ -n root -r ‘Admin’
启动openvas
openvassd –listen=127.0.0.1 –port=9391
最后启动openvas manager
openvasmd –database=/usr/local/var/lib/openvas/mgr/tasks.db –slisten=127.0.0.1 –sport=9391 –listen=0.0.0.0 –port=9390

 

打开网页版:http://localhost:9392
gsad –listen=0.0.0.0 –port=9392 –alisten=127.0.0.1 –aport=9393 –mlisten=127.0.0.1 –mport=9390 –http-only

2014-04-23
发表者 Venus
暂无评论

Linux多网卡绑定

为什么要使用多网卡绑定技术呢?我们知道如果使用一块网卡进行网络数据传输时其速度是有限的,即使是千兆网卡,其速度也是有限制的,我们为了提高带宽,我们可以将多块物理网卡绑定成一块逻辑网卡,这样网卡的速率就是多块网卡的速率了。
Linux支持将多块物理网卡绑定成一块逻辑网卡,绑定后的逻辑网卡可以并行使用组成其的所有物理网卡,通过这样的方式可以提高带宽以及网路的稳定性
我们在将多块物理网卡绑定成一块逻辑网卡以后,我们的IP地址就要求配置在这块逻辑网卡上了,而非多块物理网卡

Linux下支持三种模式的网卡绑定:

模式0:平衡轮训  使用这种模式来进行多网卡绑定时我们可以提高网络的带宽,其流量是从绑定的多块网卡上平均分配的
模式1:主动备份  使用这种模式来进行多网卡绑定时我们可以提高网络的稳定性,这种模式不会提高网络的带宽,每次只有一块网卡在走流量,只有当这块网卡发生故障时,绑定在一起的其它物理网卡才会工作
模式3:广播模式  这种模式一般不用

我们如果想通过多网卡绑定来提升网络的带宽,就选择模式0,如果想提高网络的稳定性,则选择模式1
网卡绑定以后我们需要给我们的逻辑网卡取一个名字,通常格式为 bondn,n代表的是编号。

首先关掉 NetworkManager 服务。

编辑逻辑网卡配置文件:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-band0
DEVICE=bond0
BOOTPROTO=static
BROADCAST=192.168.0.255
IPADDR=192.168.0.3
NETMASK=255.255.255.0
ONBOOT=yes
USERCTL=no
GATEWAY=192.168.0.254

编辑两块物理网卡配置文件:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.5
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.102.134.68
NM_CONTROLLED=”no”
MASTER=bond0
SLAVE=yes
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.4
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.102.134.68
NM_CONTROLLED=”no”
MASTER=bond0
SLAVE=yes

主要就是添加MASTER=bond0(将网卡绑定到bond0逻辑网卡上)和SLAVE=yes(表示网卡附属于bond0这块逻辑网卡)

编辑/etc/modprobe.conf文件,如果没有,手动创建。
[root@localhost ~]# cat /etc/modprobe.conf
alias bond0 bonding
options bond0 miimon=100 mode=0

添加上面两行。
miimon 是链路监测的时间间隔单位是毫秒,miimon=100的意思就是,每100毫秒检测网卡和交换机之间是否连通,如不通则使用另外的链路。
mode=0 表示负载均衡方式,两块网卡都工作,需要交换机作支持。
mode=1 表示冗余方式,网卡只有一个工作,一个出问题启用另外的替上去。

重启网络service network restart:
[root@localhost ~]# ifconfig
bond0 Link encap:Ethernet HWaddr 00:0C:29:B8:44:3B
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feb8:443b/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:38572 errors:0 dropped:0 overruns:0 frame:0
TX packets:3022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2847831 (2.7 MiB) TX bytes:1639276 (1.5 MiB)

eth1 Link encap:Ethernet HWaddr 00:0C:29:B8:44:3B
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:30763 errors:0 dropped:0 overruns:0 frame:0
TX packets:2413 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2270571 (2.1 MiB) TX bytes:1529059 (1.4 MiB)
Interrupt:19 Base address:0x2000

eth2 Link encap:Ethernet HWaddr 00:0C:29:B8:44:3B
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:7809 errors:0 dropped:0 overruns:0 frame:0
TX packets:610 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:577260 (563.7 KiB) TX bytes:110819 (108.2 KiB)
Interrupt:16 Base address:0x2400

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:240 (240.0 b) TX bytes:240 (240.0 b)

会看到eth1和eth2的ip信息没有了,之前我是配置上的,重启网络的时候ssh断掉了,重新去连接逻辑网卡ip。

查看bond0状态:
[root@localhost ~]# more /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:0c:29:b8:44:3b
Slave queue ID: 0

Slave Interface: eth2
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:0c:29:b8:44:45
Slave queue ID: 0

测试:

负载均衡可通过流量监控来监视拷贝文件花销时间(流量)与单网卡花销时间(流量)对比。

冗余可通过拔网线测试,这里是在虚拟机配置的,无法测试出来效果。建议用物理机测试。

2014-04-21
发表者 Venus
暂无评论

配置mysql实现读写分离

环境信息:
mysql_master centos6.5_x64 ip:192.168.0.75
mysql_slave    centos6.5_x64 ip:192.168.0.76
mysql_proxy  centos6.5_x64 ip:192.168.0.77

selinux iptables 关闭
mysql_master 和 mysql_slave 做主从复制,过程略过。
可参考:https://www.rootop.org/pages/1503.html
mysql_proxy 代理,将写操作分到mysql_master,读操作分到mysql_slave。

 mysql_proxy 配置:

mysql-proxy的读写分离是通过 rw-splitting.lua 脚本实现的,因此需要安装lua开发语言。
目前最新版下载:http://www.lua.org/ftp/lua-5.2.3.tar.gz

[root@localhost ~]# yum install -y gcc gcc-c++ libedit libedit-devel libtermcap-devel ncurses-devel libevent-devel readline-devel
[root@localhost ~]# wget -c http://www.lua.org/ftp/lua-5.2.3.tar.gz
[root@localhost ~]# tar zxvf lua-5.2.3.tar.gz
[root@localhost ~]# cd lua-5.2.3
[root@localhost ~]# make linux
[root@localhost ~]# make install

下载mysql_proxy,目前最新版本 mysql-proxy-0.8.4,处于某些因素,推荐采用已经编译好的二进制版本
[root@localhost ~]# wget -c http://cdn.mysql.com/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz
[root@localhost ~]# tar zxvf mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz
[root@localhost ~]# mv mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit /usr/local/mysql_proxy

复制读写分离脚本:
[root@localhost ~]# mkdir /usr/local/mysql_proxy/scripts
[root@localhost ~]# cp /usr/local/mysql_proxy/share/doc/mysql-proxy/rw-splitting.lua /usr/local/mysql_proxy/scripts                                                                                                

编辑rw-splitting.lua:
[root@localhost ~]# vi /usr/local/mysql_proxy/scripts/rw-splitting.lua

if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #默认为4
max_idle_connections = 1, #默认为8

is_debug = false
}
end

当会话数达到最小为4时,才会进行读写分离。改为1,直接读写分离。

编辑代理配置文件(手动创建):
[root@localhost ~]# vi /usr/local/mysql_proxy/proxy.conf
[mysql-proxy]
admin-username=root
admin-password=root

admin-lua-script=/usr/local/mysql_proxy/lib/mysql-proxy/lua/admin.lua #定义管理脚本路径
proxy-read-only-backend-addresses=192.168.0.76 #读服务器地址,如果有多个的话,以逗号分开。
proxy-backend-addresses=192.168.0.75 #写服务器地址
proxy-lua-script=/usr/local/mysql_proxy/scripts/rw-splitting.lua #读写分离脚本路径
log-file=/var/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true #启动两个进程,互相监视,提高可靠性。

[root@localhost mysql_proxy]# chmod 660 /usr/local/mysql_proxy/proxy.conf #改为660权限,否则启动报错。
启动代理:

 [root@localhost ~]#/usr/local/mysql_proxy/bin/mysql-proxy -P 192.168.0.77:3306 --defaults-file=/usr/local/mysql_proxy/proxy.conf

代理监听占用4040端口,但是为了方便php连接,通过-P将其代理监听为3306。
[root@localhost ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysql-pro 1924 root 10u IPv4 15349 0t0 TCP 192.168.0.77:mysql (LISTEN)

开启mysql主、从的允许远程连接:
mysql>use mysql;
mysql> grant all privileges on *.*to ‘root’@’%’ identified by ‘root’ with grant option;
mysql> flush privileges;

读写分离测试:
想达到测试效果,先停掉mysql slave的复制功能
我这里windows下装了mysql,通过mysql的-h参数远程连接 mysql-proxy 执行操作。

声明:因为之前配置好mysql主从复制,那么这里直接用 venus 库为测试数据库,venus_tab为测试表名。
首先在主库的 venus 库创建表 venus_tab ,因为主从同步现在已经被手动停止了,所以从库也需要创建 venus_tab 表,语句为:
create table venus_tab(id int,name varchar(40),birthday date);

windows mysql客户端执行:

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -uroot -proot -h192.168.0.77 -e “Insert into venus.venus_tab values(6,’fff’,19991212);”
Warning: Using a password on the command line interface can be insecure.

去主库中查询:
mysql> select * from venus.venus_tab;
+——+——+————+
| id | name | birthday |
+——+——+————+
| 2 | bbb | 1999-12-12 |
| 1 | aaa | 1999-12-12 |
| 3 | ccc | 1999-12-12 |
| 4 | d | 1999-12-12 |
| 5 | eee | 1999-12-12 |
| 6 | fff | 1999-12-12 |
+——+——+————+
6 rows in set (0.00 sec)

发现数据插入。

从mysql proxy查询数据:
C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -uroot -proot -h192.168.0.77 -e “select * from venus.venus_tab;”
Warning: Using a password on the command line interface can be insecure.
+——+——+————+
| id | name | birthday |
+——+——+————+
| 2 | bbb | 1999-12-12 |
| 1 | aaa | 1999-12-12 |
| 3 | ccc | 1999-12-12 |
| 4 | d | 1999-12-12 |
+——+——+————+
发现查询没有数据,这是因为主从停掉的原因(去从库查询也没有数据)。

现在用discuz正式测试一下:
编辑主从mysql配置文件,否则客户端查询会出现乱码,添加:
[mysqld]
default-character-set=utf8 #默认编码
init_connect=’SET NAMES utf8′ #连接使用的编码
skip-character-set-client-handshake #忽略客户端字符集

[client]
default-character-set=utf8

启动mysql的主从复制,清空主、从的 venus 库。
在master中解压discuz,开始安装。为了方便,这里直接用设置好同步的venus库。
先指定连接数据库名称为venus,mysql的ip为master的ip,数据会自行同步到slave中。
安装完成后修改数据库ip为mysql proxy的ip,访问没问题。发表新帖,测试通过。

2014-04-18
发表者 Venus
暂无评论

mfsclient写入/etc/fstab实现开机挂载

之前mfsclient挂载是通过写入挂载命令到/etc/rc.local中。

为了方便,想写入到/etc/fstab,遂测试了一下,可以实现:


/usr/local/mfs/bin/mfsmount     /mnt/mfs        fuse    mfsmaster=192.168.0.10,mfsport=9421,_netdev 0 0

2014-04-17
发表者 Venus
暂无评论

配置mysql cluster集群

原理:
MySQL 群集是 MySQL 适合于分布式计算环境的高可用、高冗余版本。它采用了 NDB Cluster 存储引擎,
允许在 1 个群集中运行多个 MySQL 服务器。在 MySQL 5.0 及以上的二进制版本中,
以及与最新的 Linux 版本兼容的 RPM 包中提供了该存储引擎。
MySQL 群集是一种技术,该技术允许在无共享的系统中部署“内存中”和“磁盘中”数据库的 Cluster 。
通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,
由于每个组件有自己的内存和磁盘,不存在单点故障。MySQL Cluster 由一组计算机构成,
每台计算机上均运行着多种进程,包括 MySQL 服务器,NDB Cluster 的数据节点,管理服务器,以及(可能存在的)专门的数据访问程序。

管理服务器(MGM节点)负责管理 Cluster 配置文件和 Cluster 日志。Cluster 中的每个节点从管理服务器检索配置数据。
当数据节点内出现新的事件时,节点将关于这类事件的信息传输到管理服务器,然后,将这类信息写入 Cluster 日志。

目前能够运行 MySQL Cluster 的操作系统有 Linux、Mac OS X 和 Solaris,最新的版本已经支持 Windows 操作系统。

MySQL 群集的数据节点之间的通信是不加密的,并且需要高速的带宽,所以建议把群集建立在一个高速局域网内,不建议跨网段、跨公网的部署这种系统体系。

MySQL 群集分为三种节点:管理节点,数据节点和SQL节点。

管理节点:主要用于管理各个节点,能够通过命令对某个节点进行重启、关闭、启动等操作。也能够监视全部节点的工作状态。
数据节点:主要是对数据的存储,不提供其他的服务。
SQL节点:主要是对外提供SQL功能,类似一台普通的 MySQL Server。

而SQL节点和数据节点可以是同一台机器,也就是说这台机器即是SQL节点也是数据节点。它们只是逻辑关系上的划分,
实际部署时,甚至所有的阶段都可以位于同一台物理机器上,只是配置较复杂些。

配置 MySQL 群集必需使用其群集版本,注意和 MySQL Server 版本的区别。
下载mysql cluster 集群版本,这里采用mysql官网编译好的二进制版本,免去编译麻烦:
目前最新版:https://cdn.mysql.com/archives/mysql-cluster-gpl-7.3/mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz

系统环境:
ndb_mgm centos6.5_x64  ip:192.168.0.89
ndbd_1      centos6.5_x64  ip:192.168.0.87
ndbd_2      centos6.5_x64  ip:192.168.0.88
sql_1           centos6.5_x64 ip:192.168.0.85
sql_2          centos6.5_x64  ip:192.168.0.86

配置ndb_mgm管理节点:

[root@localhost ~]# wget -c https://cdn.mysql.com/archives/mysql-cluster-gpl-7.3/mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz
[root@localhost ~]# tar zxvf mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz
[root@localhost ~]# mv mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64 /usr/local/mysql
[root@localhost ~]# useradd -s /sbin/nologin mysql
[root@localhost ~]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql/

编辑管理节点配置文件:
[root@localhost ~]# vi /usr/local/mysql/config.ini
添加:


[NDBD DEFAULT]
NoOfReplicas=2
DataDir=/usr/local/mysql/data

DataMemory=50M
IndexMemory=4M

Diskless=0
ODirect=0

RedoBuffer=32M

[MGM DEFAULT]
PortNumber=1186
DataDir=/usr/local/mysql/data

[TCP DEFAULT]
SendBufferMemory=32M
ReceiveBufferMemory=32M

[NDB_MGMD]
NodeId=1
HostName=192.168.0.89
ArbitrationRank=1

[NDBD]
NodeId=2
HostName=192.168.0.87

[NDBD]
NodeId=3
HostName=192.168.0.88

[API]
NodeId=4
HostName=192.168.0.85

[API]
NodeId=5
HostName=192.168.0.86

[root@localhost ~]# /usr/local/mysql/bin/ndb_mgmd -f /usr/local/mysql/config.ini #启动管理节点

会看到如下信息:
MySQL Cluster Management Server mysql-5.6.17 ndb-7.3.5
2014-04-17 23:07:01 [MgmtSrvr] INFO — The default config directory ‘/usr/local/mysql/mysql-cluster’ does not exist. Trying to create it…
2014-04-17 23:07:01 [MgmtSrvr] INFO — Sucessfully created config directory
[root@localhost ~]# lsof -i:1186
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ndb_mgmd 2269 root 8u IPv4 46678 0t0 TCP *:mysql-cluster (LISTEN)
ndb_mgmd 2269 root 9u IPv4 46679 0t0 TCP localhost:50117->localhost:mysql-cluster (ESTABLISHED)
ndb_mgmd 2269 root 10u IPv4 46684 0t0 TCP localhost:mysql-cluster->localhost:50117 (ESTABLISHED)
占用1186端口。

[root@localhost ~]# /usr/local/mysql/bin/ndb_mgm #通过此命令查看管理节点状态
— NDB Cluster — Management Client —
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.0.87)
id=3 (not connected, accepting connect from 192.168.0.88)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.89 (mysql-5.6.17 ndb-7.3.5)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 192.168.0.85)
id=5 (not connected, accepting connect from 192.168.0.86)

ndb_mgm>
管理节点配置完成。

配置ndbd存储节点:
在ndbd_1和ndbd_2都执行下面配置,配置完全一样:

[root@localhost ~]# wget -c https://cdn.mysql.com/archives/mysql-cluster-gpl-7.3/mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz
[root@localhost ~]# tar zxvf mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz
[root@localhost ~]# mv mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64 /usr/local/mysql
[root@localhost ~]# useradd -s /sbin/nologin mysql
[root@localhost ~]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql/

编辑ndbd节点配置文件:
[root@localhost ~]# vi /usr/local/mysql/my.cnf
在最后一行添加两行:
[mysql_cluster]
ndb_connectstring=192.168.0.89  

启动ndbd节点:

[root@localhost ~]#/usr/local/mysql/bin/ndbd --initial -c 192.168.0.89
2014-04-17 23:19:15 [ndbd] INFO -- Angel connected to '192.168.0.89:1186'
2014-04-17 23:19:15 [ndbd] INFO -- Angel allocated nodeid: 3
关于--initial参数只是在第一次启动或在备份/恢复或配置变化后重启ndbd时,才加–-initial参数!

配置SQL节点:

在sql_1和sql_2都执行下面配置,配置完全一样:

[root@localhost ~]# wget -c https://cdn.mysql.com/archives/mysql-cluster-gpl-7.3/mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz
[root@localhost ~]# tar zxvf mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz
[root@localhost ~]# mv mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64 /usr/local/mysql
[root@localhost ~]# useradd -s /sbin/nologin mysql
[root@localhost ~]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql/

编辑sql节点配置文件:
[root@localhost ~]# vi /usr/local/mysql/my.cnf
添加红色部分:
[mysqld]
ndbcluster
ndb-connectstring=192.168.0.89

[mysql_cluster]
ndb-connectstring=192.168.0.89

启动mysql:

 [root@localhost ~]# /usr/local/mysql/bin/mysqld_safe --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql &

回到ndb管理节点查看状态:
ndb_mgm> show
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.87 (mysql-5.6.17 ndb-7.3.5, Nodegroup: 0, *)
id=3 @192.168.0.88 (mysql-5.6.17 ndb-7.3.5, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.89 (mysql-5.6.17 ndb-7.3.5)

[mysqld(API)] 2 node(s)
id=4 @192.168.0.85 (mysql-5.6.17 ndb-7.3.5)
id=5 @192.168.0.86 (mysql-5.6.17 ndb-7.3.5)

ndbd数据节点和sql节点已经连接。

测试:
在sql_1节点登陆数据库,在test库中创建表,去sql_2节点查看是否有数据。
sql_1:

[root@localhost ~]# /usr/local/mysql/bin/mysql -uroot -p
Enter password:
mysql> use test;
Database changed
mysql> show tables;
Empty set (0.01 sec)

mysql> create table person(id int,name varchar(40),birthday date)ENGINE=ndb;
Query OK, 0 rows affected (0.33 sec)

mysql> Insert into person values(1,'test',20101212);
Query OK, 1 row affected (0.11 sec)

mysql> Select * from test.person;
+------+------+------------+
| id | name | birthday |
+------+------+------------+
| 1 | test | 2010-12-12 |
+------+------+------------+
1 row in set (0.01 sec)

mysql>

sql_2节点:

[root@localhost ~]# /usr/local/mysql/bin/mysql -uroot -p
Enter password:
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> Select * from test.person;
+------+------+------------+
| id | name | birthday |
+------+------+------------+
| 1 | test | 2010-12-12 |
+------+------+------------+
1 row in set (0.03 sec)

mysql>

发现数据。完成。
同样也可在sql_2节点上执行Insert/Update/Delete等操作,然后在sql_1上验证数据是否同步。

注意启动顺序:
管理节点-ndbd数据节点-sql节点

表在ndbd节点之间复制时,表必须用ndbcluster引擎

PS:
启动ndb节点时遇到的一个错误,加-c参数解决
[root@localhost bin]# ./ndbd –initial
Unable to connect with connect string: nodeid=0,localhost:1186
Retrying every 5 seconds. Attempts left: 12^C
[root@localhost bin]# ./ndbd –initial -c 192.168.0.89
2014-04-17 19:11:35 [ndbd] INFO — Angel connected to ‘192.168.0.89:1186’
2014-04-17 19:11:35 [ndbd] INFO — Angel allocated nodeid: 10

管理节点配置文件:

#此值按数据库大小设置,官方给出了公式
#(内存) 数据大小 *副本 * 1.25 = 数据库内存总需求
#实例:50 GB * 2 * 1.25 = 125 GB
#(数据大小 *副本 * 1.25)/节点数 = 每个节点的内存大小
#实例:(2 GB * 2 * 1.25)/4 = 1.25 GB
DataMemory=5120M
IndexMemory=400M

#此值设置为1的时候,ndb将不会把数据写入磁盘(意思就是shutdown后数据就没了)
Diskless=0
#速度快,可以改为1试试,具体含义参考mysql官方文档
ODirect=0

mysql cluster 所有的这些节点构成一个完成的MySQL集群体系。数据保存在ndb数据服务器的存储引擎中表(结构)则保存在sql节点中
应用程序通过sql节点访问这些数据表,集群管理服务器通过管理工具(ndb_mgmd)来管理ndb数据服务器。

至于数据存放是在ndb数据服务器中mysql的data目录下ndb_<node_id>_fs目录。
这个data目录是由config.ini配置文件定义的。

一般在一个mysql cluster体系中只需要一个管理节点.它仅用于cluster的启动及cluster的系统参数配置。
sql节点和存储节点在启动的时候需要连接到管理节点读取cluster的配置信息,在sql节点和存储节点启动完成后,管理节点可以停止。
不过最好不好这样做。
mysql cluster通过两种方式来检测故障:
一是通讯丢失,可以通过tcp,共享内存等方式在各存储节点之间通讯来侦测节点是否正常这种方式是最快的故障检测方式,
二是心跳失败,通讯丢失的检测方法在某些特殊情况下无效,例如磁盘故障等问题.所有的存储节点通过组成一个环路,每个
节点向下一个节点发送心跳信号,如果下一个节点没有收到心跳信号,则认为上一个存储节点故障,并依次向下下个节点广播此故障信息。