OceanBase数据库实践入门——手动搭建OceanBase集群
前言
目前有关OceanBase功能、案例、故事的文章已经很多,对OceanBase感兴趣的朋友都想安装一个数据库试试。本文就是分享初学者如何手动搭建一个OceanBase集群。这也是学习理解OceanBase集群原理的第一步。在生产环境,我们有自动化运维平台OCP
可以负责生产环境的OceanBase集群部署和运维。同时官网上提供的下载文件里也有python脚本自动化部署OceanBase集群,大家熟悉了安装原理后就可以自己动手使用自动化脚本安装。
OceanBase是分布式数据库,以集群的形式存在,是share-nothing
架构。各个节点就是普通的x86
服务器,使用本地盘(SSD
),不依赖共享存储,也没有集群文件系统。各个节点之间网络互通即可,不需要直连线。所以OceanBase集群的搭建相比ORACLE RAC集群而言,还是很简单的。
目前OceanBase对内存资源要求不低,建议学习环境每个节点在32G以上,64G更好。并且OceanBase集群至少包含三个节点,节点数以奇数递增。如果有三台机器更好,但是如果只有一台机器,但是内存够大(192G以上),那也可以启动三个OceanBase进程来模拟三个节点。
OBServer安装
OceanBase分布式数据库是以集群形式存在,至少三个节点,在每个节点里存在形式是一个observer
进程,不同节点上多个observer
进程组成一个集群对外提供服务。
1. 安装规划
本次安装目标会搭建一个2-2-2
架构的OceanBase集群,理论上这个需要6台机器,实际上我只有3台。因此我会在每个机器上启动2个observer进程来模拟2个节点。
机器节点规划如下。如果你只有一台大内存的机器,可以在上面起3个或者6个OceanBase进程,注意RPC Port
和Connect Port
不要重复或者跟其他应用端口冲突即可。
Zone | IP | RPC Port | Connect Port |
Zone1 |
192.168.1.241 |
2882 |
2881 |
Zone1 |
192.168.1.241 |
3882 |
3881 |
Zone2 |
192.168.1.81 |
2882 |
2881 |
Zone2 |
192.168.1.81 |
3882 |
3881 |
Zone3 |
192.168.1.86 |
2882 |
2881 |
Zone3 |
192.168.1.86 |
3882 |
3881 |
由于OceanBase是分布式数据库,应用的数据可能分布在任一节点上,所以应用需要通过一个反向代理OBProxy来访问OceanBase集群。OBProxy可以安装在任意机器上,包括OceanBase数据库节点上。这里我安装在其中一个节点上。
2. 机器环境准备
OceanBase机器节点环境主要是安装用户、内核参数配置、防火墙和SELinux设置、时间同步设置、和用户会话限制等。
安装用户
OceanBase默认会安装在用户admin
下。可以选择安装在其他用户下(不使用RPM
包安装)。
通常建议admin
用户配置sudo
权限,这样安装过程中就不需要root
账户介入。
useradd admin
passwd admin # 赋予sudo权限
chmod u+w /etc/sudoers
vi /etc/sudoers
root ALL=(ALL) ALL
admin ALL=(ALL) ALL
chmod u-w /etc/sudoers
用户会话设置
使用命令ulimit
可以查看用户会话默认限制。修改下面文件可以默认会话限制修改永久生效。
sudo vi /etc/security/limits.conf * soft nofile
* hard nofile
* soft stack
* hard stack
* soft nproc
* hard nproc
* soft core unlimited
* hard core unlimited
退出重登录,检查设置生效
ulimit -a
内核参数配置
内核参数主要是网络、内存相关的设置。
sudo vi /etc/sysctl.conf fs.aio-max-nr =
net.core.somaxconn =
net.core.netdev_max_backlog =
net.core.rmem_default =
net.core.wmem_default =
net.core.rmem_max =
net.core.wmem_max = net.ipv4.ip_local_port_range =
net.ipv4.ip_forward =
net.ipv4.conf.default.rp_filter =
net.ipv4.conf.default.accept_source_route =
net.ipv4.tcp_syncookies =
net.ipv4.tcp_rmem =
net.ipv4.tcp_wmem =
net.ipv4.tcp_max_syn_backlog =
net.ipv4.tcp_fin_timeout =
net.ipv4.tcp_max_syn_backlog =
net.ipv4.tcp_tw_reuse =
net.ipv4.tcp_tw_recycle =
net.ipv4.tcp_slow_start_after_idle= vm.swappiness =
kernel.core_pattern = /data//core-%e-%p-%t
vm.min_free_kbytes =
vm.max_map_count=
修改后使用下面命令生效,并检查
sudo sysctl -p
关闭防火墙和SELinux
Linux的防火墙和SELinux安全特性可能会导致OceanBase各个节点之间通信异常,所以都建议关闭
sudo systemctl disable firewalld
sudo systemctl stop firewalld
sudo systemctl status firewalld sudo vi /etc/selinux/config
SELINUX=disabled sudo setenforce
节点时间同步设置
OceanBase是个分布式数据库,要求各个节点的时间保持同步,时间误差控制在50ms以内。节点时间误差偏大时,后面初始化OceanBase集群会失败,或者现有的OceanBase集群会出现异常。
节点间的时间同步要靠Linux的NTP
同步来保证。检查时间误差使用clockdiff命令
clockdiff 192.168.1.86
clockdiff 192.168.1.81
clockdiff 192.168.1.241
配置节点的NTP
同步
sudo vi /etc/ntp.conf
server 192.168.1.239
停掉ntpd
服务,强行同步一次时间,再启动ntpd
服务。后续时间同步靠ntpd
服务。
sudo service ntpd stop;
sudo ntpdate 192.168.1.239;
sudo service ntpd start; ntpq -4p
3. 软件安装
软件目录
目前oceanbase.alipay.com
上提供了OCP试用版下载,里面包含了OCP和OB的很多文件,手动安装只需要里面两个RPM
文件:obproxy
和oceanbase
。获取方法如下:
wget https://gw.alipayobjects.com/os/downloads/ossupload/ocp-release.zip
unzip ocp-release.zip
tar zxvf ocp-setup.tar.gz
cd ocp_yh
ls -lrth obproxy-1.3.-.el7.x86_64.rpm oceanbase-1.4.-.el7.x86_64.rpm
我们先看一下oceanbase
的RPM
包内容,
rpm2cpio oceanbase-1.4.-.el7.x86_64.rpm |cpio –div cd home/admin;tar czvf ob1.4.6.tar.gz oceanbase/ cd ~/
scp home/admin/ob1.4.6.tar.gz 192.168.1.241:/tmp/;
scp home/admin/ob1.4.6.tar.gz 192.168.1.81:/tmp/;
scp home/admin/ob1.4.6.tar.gz 192.168.1.86:/tmp/;
可以看到目录结构如下。其中bin
下有可执行文件observer
,etc
目录用于存放配置和相关脚本。
如果直接安装该RPM
包,则会安装在admin用户的根目录下。由于我们要在一个机器上启动两个observer
进程,彼此软件目录要分开。所以改用解压缩RPM
包文件然后复制到两个目录,目录owner
是admin
。
su - admin
mkdir -p node1 node2 cd ~/node1; tar zxvf /tmp/ob1.4.6.tar.gz -C . cd ~/node2; tar zxvf /tmp/ob1.4.6.tar.gz -C . cd ~/; tree
存储目录
OceanBase的存储目录是在软件目录下的store
文件夹里。存储目录会包含数据文件目录和相关日志文件目录。出于性能考虑,数据文件目录和相关日志文件目录都需要单独的文件系统(如果底层是独立的盘会更好)。然后把实际目录映射到软件目录下的store
目录下。
su - admin mkdir -p /data/data//obdemo/
cd /data/data//obdemo/
mkdir -p etc3 sort_dir sstable
mkdir -p /data/log/log1/obdemo/
cd /data/log/log1/obdemo/
mkdir -p clog etc2 ilog oob_clog slog
mkdir -p /home/admin/node1/oceanbase/store/obdemo
cd /home/admin/node1/oceanbase/store/obdemo/
ln -s /data/data//obdemo/sort_dir /home/admin/node1/oceanbase/store/obdemo/sort_dir
ln -s /data/data//obdemo/sstable /home/admin/node1/oceanbase/store/obdemo/sstable
ln -s /data/log/log1/obdemo/clog /home/admin/node1/oceanbase/store/obdemo/clog
ln -s /data/log/log1/obdemo/ilog /home/admin/node1/oceanbase/store/obdemo/ilog
ln -s /data/log/log1/obdemo/oob_clog /home/admin/node1/oceanbase/store/obdemo/oob_clog
ln -s /data/log/log1/obdemo/slog /home/admin/node1/oceanbase/store/obdemo/slog tree ~/node1 -uh mkdir -p /data/data//obdemo/
cd /data/data//obdemo/
mkdir -p etc3 sort_dir sstable
mkdir -p /data/log/log2/obdemo/
cd /data/log/log2/obdemo/
mkdir -p clog etc2 ilog oob_clog slog
mkdir -p /home/admin/node2/oceanbase/store/obdemo
cd /home/admin/node2/oceanbase/store/obdemo/
ln -s /data/data//obdemo/sort_dir /home/admin/node2/oceanbase/store/obdemo/sort_dir
ln -s /data/data//obdemo/sstable /home/admin/node2/oceanbase/store/obdemo/sstable
ln -s /data/log/log2/obdemo/clog /home/admin/node2/oceanbase/store/obdemo/clog
ln -s /data/log/log2/obdemo/ilog /home/admin/node2/oceanbase/store/obdemo/ilog
ln -s /data/log/log2/obdemo/oob_clog /home/admin/node2/oceanbase/store/obdemo/oob_clog
ln -s /data/log/log2/obdemo/slog /home/admin/node2/oceanbase/store/obdemo/slog
tree /home/admin/node2/oceanbase/store/obdemo/ -uh tree ~/node2 -uh
由此一个完整的OBServer
进程的相关目录如下:
依赖
RPM
包安装
OceanBase会对数据进行压缩,所以依赖两个压缩协议的RPM
文件:snappy.x86_64
和lzo.x86_64
。
rpm -q snappy.x86_64 lzo.x86_64 yum -y install snappy.x86_64 lzo.x86_64
OceanBase 集群初始化
1. OBServer启动
启动参数
首先分别在每个节点上启动第一个observer
进程,监听端口是2881和2882. 下图中灰色斜体部分都根据实际情况调整。注意根据实际情况修改zone
名称、IP
, 网卡名字等。
192.168.1.241:2881:2882 zone1 注意修改 zone, IP, 网卡名字
cd /home/admin/node1/oceanbase && /home/admin/node1/oceanbase/bin/observer -i eth0 -P -p -z zone1 -d /home/admin/node1/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c -n obdemo -o "cpu_count=24,memory_limit=100G,datafile_size=200G,config_additional_dir=/data/data/1/obdemo/etc3;/data/log/log1/obdemo/etc2" ps -ef|grep observer vi log/observer.log
其他两个节点的启动名分别如下:
192.168.1.81:2881:2882 zone2 注意修改 zone, IP, 网卡名字
cd /home/admin/node1/oceanbase && /home/admin/node1/oceanbase/bin/observer -i eth3 -P -p -z zone2 -d /home/admin/node1/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c -n obdemo -o "cpu_count=24,memory_limit=100G,datafile_size=200G,config_additional_dir=/data/data/1/obdemo/etc3;/data/log/log1/obdemo/etc2" ps -ef|grep observer vi log/observer.log
192.168.1.86:2881:2882
zone3 注意修改 zone, IP, 网卡名字
cd /home/admin/node1/oceanbase && /home/admin/node1/oceanbase/bin/observer -i eth3 -P -p -z zone3 -d /home/admin/node1/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c -n obdemo -o "cpu_count=24,memory_limit=100G,datafile_size=200G,config_additional_dir=/data/data/1/obdemo/etc3;/data/log/log1/obdemo/etc2" ps -ef|grep observer vi log/observer.log
2. 集群初始化
3节点OBServer都启动后,这一步集群初始化命令就至关重要,成败在此一举。
首先使用mysql命令登录任一节点,然后执行bootstrap
命令。注意命令中不要有空格和空白。
mysql -h192.168.1.241 -uroot -P2881 -p alter system bootstrap ZONE 'zone1' SERVER '192.168.1.241:2882', ZONE 'zone2' SERVER '192.168.1.81:2882', ZONE 'zone3' SERVER '192.168.1.86:2882';
大概十几秒后集群启动成功。此时重新退出再登录集群。登录命令的username
格式需要变化一下。登录成功后修改默认sys
租户管理员root@sys
。
mysql -h192.168.1.241 -uroot@sys -P2881 -p -c -A oceanbase
alter user root identified by 'rootpwd';
退出使用密码登录验证,同时查看集群资源信息。
mysql -h192.168.1.241 -uroot@sys -P2881 -prootpwd -c -A oceanbase select zone, svr_ip, inner_port, cpu_total, cpu_assigned, cpu_assigned_percent cpu_ass_percent, round(mem_total/1024/1024/1024) mem_total_gb, round(mem_assigned/1024/1024/1024) mem_ass_gb, round(disk_total/1024/1024/1024) disk_total_gb, unit_num, substr(build_version,1,6) version
from __all_virtual_server_stat
order by zone, svr_ip, inner_port;
3. 集群扩容
目前搭建的还是1-1-1
布局的OceanBase集群,需要再添加3个节点,扩容到2-2-2
布局。这里就直接在3台机器上再启动第二个observer
进程,监听端口是3881和3882。
节点准备
192.168.1.241:3881:3882
zone1 注意修改node zone, ip, port, 网卡名字
cd /home/admin/node2/oceanbase && /home/admin/node2/oceanbase/bin/observer -i eth0 -P -p -z zone1 -d /home/admin/node2/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c -n obdemo -o "cpu_count=24,memory_limit=61440M,datafile_size=100G,config_additional_dir=/data/data/2/obdemo/etc3;/data/log/log2/obdemo/etc2" ps -ef|grep observer vi log/observer.log
192.168.1.81:2881:2882
zone2 注意修改node zone, ip, port, 网卡名字
cd /home/admin/node2/oceanbase && /home/admin/node2/oceanbase/bin/observer -i eth3 -P -p -z zone2 -d /home/admin/node2/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c -n obdemo -o "cpu_count=24,memory_limit=61440M,datafile_size=100G,config_additional_dir=/data/data/2/obdemo/etc3;/data/log/log2/obdemo/etc2" ps -ef|grep observer vi log/observer.log
192.168.1.86:2881:2882
zone3 注意修改node zone, ip, port, 网卡名字
cd /home/admin/node2/oceanbase && /home/admin/node2/oceanbase/bin/observer -i eth3 -P -p -z zone3 -d /home/admin/node2/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c -n obdemo -o "cpu_count=24,memory_limit=61440M,datafile_size=100G,config_additional_dir=/data/data/2/obdemo/etc3;/data/log/log2/obdemo/etc2" ps -ef|grep observer vi log/observer.log
集群扩容
将新增的3节点加入到OceanBase集群中。注意zone
名称和IP
要对应正确。
alter system add server '192.168.1.241:3882' zone 'zone1';
alter system add server '192.168.1.81:3882' zone 'zone2';
alter system add server '192.168.1.86:3882' zone 'zone3'; select zone, svr_ip, inner_port, cpu_total, cpu_assigned, cpu_assigned_percent cpu_ass_percent, round(mem_total/1024/1024/1024) mem_total_gb, round(mem_assigned/1024/1024/1024) mem_ass_gb, round(disk_total/1024/1024/1024) disk_total_gb, unit_num, substr(build_version,1,6) version
from __all_virtual_server_stat
order by zone, svr_ip, inner_port;
4. OBProxy安装和启动
OceanBase是分布式数据库,应用的数据可能分布在任一节点上并且不固定,所以应用不可能知道数据在哪个节点或者记录所有节点IP
。这时就需要一个反向代理OBProxy在OceanBase集群前面提供SQL路由功能。应用通过OBProxy访问OceanBase集群,OBProxy就是数据库的代表。
OBProxy的软件安装
一个节点只需要安装一个OBproxy,所以可以直接使用RPM
包安装。
su - admin
mkdir -p /home/admin/logs/obproxy/log /home/admin/logs/obproxy/minidump
sudo rpm -ivh obproxy-1.3.-.el7.x86_64.rpm
OBProxy专用用户
OBProxy需要跟OceanBase集群保持通信,所以需要在sys
租户里提前创建好账户。
CREATE USER proxyro IDENTIFIED BY password '*e9c2bcdc178a99b7b08dd25db58ded2ee5bff050' ;
GRANT SELECT ON *.* to proxyro; show grants for proxyro;
OBProxy启动
OBProxy启动跟OBServer启动类似
注意其中 -r
指定的是rootservice list
地址,格式稍微不同,不需要RPC Port
信息。-p
指定OBProxy的监听端口。
cd /opt/taobao/install/obproxy && bin/obproxy -r "192.168.1.241:2881;192.168.1.81:2881;192.168.1.86:2881" -p -o "enable_strict_kernel_release=false,enable_cluster_checkout=false" -c obdemo ps -ef|grep obproxy
通过OBProxy连接OceanBase集群的命令有两种格式,区别在于用户名的格式。如:[用户名]@[租户名]#[集群名]
或 [集群名]:[租户名]:[用户名]
。
mysql -h192.168.1. -uroot@sys#obdemo -P2883 -prootpwd -c -A oceanbase
或
mysql -h192.168.1. -uobdemo:sys:root -P2883 -prootpwd -c -A oceanbase
OceanBase 集群运维
OceanBase分布式数据库跟传统数据库或者其他分布式数据库产品的一个显著的区别就是它有资源管理的思想在里面。OceanBase集群把多台主机的资源(CPU
、内存和空间)聚合在一个大的池子里,然后从中分配出指定规格的资源给一个具体的业务使用。这个提供给业务使用的就是租户,也叫实例。
下面简单演示一个租户的创建过程。
1. 租户的创建
定义资源规格
mysql -h192.168.1.241 -uroot@sys#obdemo -P2883 -prootpwd -c -A oceanbase create resource unit unit_4c20g512g, max_cpu=4, max_memory='20G', min_memory='10G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size=53687091200;
create resource unit unit_8c40g1024g, max_cpu=8, max_memory='40G', min_memory='20G', max_iops=20000, min_iops=5000, max_session_num=1000000, max_disk_size=107374182400;
create resource unit unit_16c80g2048g, max_cpu=16, max_memory='80G', min_memory='40G', max_iops=50000, min_iops=10000, max_session_num=1000000, max_disk_size=214748364800; select unit_config_id,name,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb
from __all_unit_config
order by unit_config_id;
创建资源池
mysql -h192.168.1.241 -uroot@sys#obdemo -P2883 -prootpwd -c -A oceanbase create resource pool pool_demo unit = 'unit_4c20g512g', unit_num = 1; select resource_pool_id, name,unit_count, unit_config_id, zone_list, tenant_id, gmt_modified
from __all_resource_pool order by resource_pool_id ;
创建租户
mysql -h192.168.1.241 -uroot@sys#obdemo -P2883 -prootpwd -c -A oceanbase create tenant t_obdemo resource_pool_list=('pool_demo'); select tenant_id, tenant_name, zone_list, locality ,gmt_modified from __all_tenant;
登录租户
租户连接 断开sys租户,连接用户租户
mysql -h192.168.1.241 -uroot@t_obdemo#obdemo -P2883 oceanbase -A -p show databases; create database sysbenchtest;
grant all privileges on sysbenchtest.* to testuser@'%' identified by 'testpwd';
2. 租户扩容
租户内查看自己的资源能力
mysql -h192.168.1.241 -uroot@t_obdemo#obdemo -P2883 oceanbase -A -p select tenant_id,tenant_name, unit_id, zone, svr_ip,svr_port,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb
from gv$unit;
如果业务觉得数据库很慢且瓶颈是在资源,则对租户的资源能力进行扩容。
租户扩容
租户扩容有两个思路,一是提升资源单元规格,二是增加资源单元数量。
mysql -h192.168.1.241 -uobdemo:sys:root -P2883 -prootpwd -c -A oceanbase alter resource pool pool_demo unit = 'unit_8c40g1024g';
alter resource pool pool_demo unit_num = 2; //缩容同理 alter resource pool pool_demo unit_num = 1;
3. 集群参数配置
至此,OceanBase集群和租户都搭建好了。为了避免学习环境因为资源紧张导致OceanBase不稳定,还需要做一些参数配置,类似于ORACLE中的参数变更。
集群参数修改
配置日志相关参数
mysql -h192.168.1.241 -uobdemo:sys:root -P2883 -prootpwd -c -A oceanbase -- observer log自清理设置
alter system set enable_syslog_recycle=True;
alter system set max_syslog_file_count=5; show parameters where name in ('enable_syslog_recycle', 'max_syslog_file_count');
配置OBProxy参数
-- obproxy设置:
alter proxyconfig set enable_metadb_used=False;
alter proxyconfig set enable_proxy_scramble=True;
alter proxyconfig set proxy_mem_limited=2G;
alter proxyconfig set log_dir_size_threshold=10G;
配置冻结合并参数
-- 关闭轮转合并,设置转储次数
alter system set enable_merge_by_turn = false;
alter system set minor_freeze_times=3;
alter system set minor_warm_up_duration_time='300s';
租户变量修改
OceanBase还支持对租户的行为进行配置,这些是通过租户变量的修改实现。类似于MySQL中的变量修改。
mysql -h192.168.1.241 -uroot@t_obdemo#obdemo -P2883 oceanbase -A -p
set global ob_query_timeout=100000000;
OceanBase 集群清理
如果前面在集群初始化中出现报错,则需要清理所有步骤重新来过。
OceanBase安装环境清理
pkill observer
Sleep rpm -qa|grep oceanbase
rpm -qa|grep obproxy
sudo rpm -e su - admin
/bin/rm -rf ~/node1 ~/node2
/bin/rm -rf /data/data/* /data/log/*
OceanBase 学习材料
有关OceanBase集群手动搭建过程就到此为止。是不是比ORACLE RAC简单很多?限于时间和篇幅,安装中涉及到的OceanBase原理没有详细解释。有兴趣的朋友可以关注个人微信公众号:obpilot 查看更多分享。
OceanBase数据库实践入门——手动搭建OceanBase集群的更多相关文章
- 手动搭建 redis 集群
转自http://meia.fun/article/1544161420745 手动搭建 redis 集群 redis 基本命令: 启动 redis 服务:redis-server xxx.conf ...
- 【Kubernetes学习笔记】-kubeadm 手动搭建kubernetes 集群
目录 K8S 组件构成 环境准备 (以ubuntu系统为例) 1. kubernetes集群机器 2. 安装 docker. kubeadm.kubelet.kubectl 2.1 在每台机器上安装 ...
- Redis 超详细的手动搭建Cluster集群步骤
功能概述 Redis Cluster是Redis的自带的官方分布式解决方案,提供数据分片.高可用功能,在3.0版本正式推出. 使用Redis Cluster能达到负载均衡的问题,内部采用哈希分 ...
- [补充资料] 手动搭建 Cloudera 集群
本课主题 集群搭建 设置 Web 服务器 启动 ClouderManager 登入 Cloudera Manager 引言 这部份是一个补充资料,记录如何安装 Cloudera 服务器 集群搭建 查看 ...
- 手动搭建redis集群(3台)
安装redis 1.搜索源中的redis包 apt-cache pkgnames | grep redis 2.安装redis-server apt-get install redis-server ...
- Hadoop入门进阶步步高(五)-搭建Hadoop集群
五.搭建Hadoop集群 上面的步骤,确认了单机能够运行Hadoop的伪分布运行,真正的分布式运行无非也就是多几台slave机器而已,配置方面的有一点点差别,配置起来就很easy了. 1.准备三台se ...
- 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)
前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...
- MongoDB Sharding(二) -- 搭建分片集群
在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...
- Docker 搭建 etcd 集群
阅读目录: 主机安装 集群搭建 API 操作 API 说明和 etcdctl 命令说明 etcd 是 CoreOS 团队发起的一个开源项目(Go 语言,其实很多这类项目都是 Go 语言实现的,只能说很 ...
随机推荐
- 我的Python分析成长之路6
模块:本质就是.py结尾的文件.从逻辑上组织python代码. 包: 本质就是一个目录,带有__init__.py文件,从逻辑上组织模块. 模块的分类: 1.标准库(内置的模块) 2.开源库(第三方库 ...
- LeetCode(200) Number of Islands
题目 Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is su ...
- Leetcode 559. N叉树的最大深度
题目链接 https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/description/ 题目描述 给定一个N叉树,找到其最大深度. ...
- centos新增或删除用户
新增用户snzigod:adduser snzigod 修改snzigod密码:passwd snzigod 删除用户snzigod:userdel snzigod 删除用户以及用户目录: userd ...
- Liunx将私密代理添加到环境变量
.bash_profile文件存在于用户主目录下,绝对路径为/home/$name/.bash_profile.bash_profile文件是隐藏文件,里面包含的是用户的用户的环境变量. 注意: 这个 ...
- Linux磁盘简介
为一台服务器添加三块磁盘的体系结构情况 Linux系统中用free -l 查看磁盘的状况 说明: 1)buffers为写入缓冲区,sync将缓冲区数据写入磁盘,cache为读出缓存. 2)cac ...
- SQL_4_函数
在SQL的函数中可以执行一些诸如对某一些进行汇总或将一个字符串中的字符转换为大写的操作等: 函数有:汇总函数.日期与时间函数.数学函数.字符函数.转换函数与其他函数. 汇总函数 这是一组函数,它们返回 ...
- JAVA中变量的类型及命名规范
1. 计算机是一种极度精确的机器;2. 要将信息存储在计算机当中,就必须指明信息存储的位置和所需的内存空间;3. 在JAVA编程语言当中,使用声明语句来完成上述的任务; 4. 变量的类型: 5. 变量 ...
- myeclipse中hibernate生成映射文件
在hibernate中,每个数据表对应的其实是一个实体类,每个实体类有一个对应的hbm.xml配置文件匹配,myeclipse中有个MyEclipse Database Explorer视图,它提供了 ...
- syntax error, error in :'e id=1?', expect QUES, actual QUES pos 66, line 1, column 66, token QUES错误
在查询数据库的时候报了下面的异常: syntax error, error in :'e id=1?', expect QUES, actual QUES pos 66, line 1, column ...