guacamole を使う その1 (CentOS7+yum 編)

本エントリとは直接関連しませんが、まずは宣伝から。

https://jpoug.doorkeeper.jp/events/51429

まだ席に余裕がありますので、興味がある方は是非。

 

 

ここからが本題です。
本エントリは、Oracleから少し外れて、guacamoleというリモートデスクトップゲートウェイの紹介です。

 

通常、LinuxマシンでGUI環境が必要な場合、vncviewer等で
接続する必要があります。

vncviewerをインストールすることが難しい場合もありますし、
他ネットワークだとするとvncのポートが解放されてなかったり
色々と面倒なこともしばしばあります。


そんなとき、非常に便利なのがguacamoleです。

http(s)ベースのリモートデスクトップゲートウェイとして動作するため、
クライアント端末側には、ブラウザさえあればOKです。
(最新バージョン(0.9.9)ではiphoneからも操作できます)

https://guacamole.incubator.apache.org/


今回は、CentOS7(RHEL7/OEL7)での簡単なインストール方法を紹介します。

<構成>
・OS CentOS7.2
・guacd/guacamole (tomcat) 同一マシン構成

・guacd/guacamole 0.8.4(執筆時点)
・DB連携なし
SSL構成なし


<インストール方法>

 

#epel有効化
#rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

 

#必要モジュールインストール
#yum -y install guacamole guacd libguac-client-rdp libguac-client-vnc libguac-client-ssh

 

#guacamoleのパスワードをmd5hashで取得
#ここではguacamoleには、gucauser/Guac123!でログインすることとする。
#echo -n 'Guac123!' | md5sum | awk '{print $1}'
#6e9b83fc538318184ca185a44c06d235

 

#user-mapping.xml(認証情報)の編集
#ここではguacamoleには、gucauser/Guac123!でログインすることとする。
#接続先は適宜編集してください
#cat > /etc/guacamole/user-mapping.xml <<'EOF'
<user-mapping>
     <authorize username="guacuser" password="6e9b83fc538318184ca185a44c06d235" encoding="md5">
         <connection name="localhost ssh">
             <protocol>ssh</protocol>
             <param name="hostname">localhost</param>
             <param name="port">22</param>
         </connection>
         <connection name="RDP">
             <protocol>rdp</protocol>
             <param name="hostname">localhost</param>
             <param name="port">3389</param>
         </connection>
        <connection name="VNC">
            <protocol>vnc</protocol>
            <param name="hostname">localhost</param>
            <param name="port">5901</param>
        </connection>
     </authorize>
</user-mapping>
EOF

#guacamole関連サービスの起動/有効化
#
#systemctl start guacd
#systemctl start tomcat
#
#systemctl enable guacd
#systemctl enable tomcat


上記設定後、ブラウザから以下のURLへアクセスするとguacamoleにログインできます
http://guacamoleがインストールされているマシンのIP:8080/guacamole

Google Compute Cloud で Oracle Linux 7.xを使う

本エントリとは直接関連しませんが、まずは宣伝から。

 

Oracle Database Connect 2016 | Japan Oracle User Group (JPOUG)

 

ここからが本題ですが、以下の関連エントリです。

CentOS6まではcentos2ol.shというスクリプトOracleから提供されていたので、

Oracle Linuxをカスタムインストールせずとも、わりと簡単に使用できていたのですが、

OentOS7には対応していないので、ちょっとした工夫が必要です。

 

Oracle Linux 7 から CentOS7に変換しているブログを見つけたので、

それの応用でCentOS7からOracle Linux 7へ変換することができます。

 

linuxsysconfig.com

 

上記を見ながら作ったスクリプトがこちら。

root権限が必要です。

 

centos72ol7.sh

 #!/bin/bash
curl http://yum.oracle.com/public-yum-ol7.repo -o /etc/yum.repos.d/public-yum-ol7.repo
rpm --import http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol7
yum -y update yum
yum clean all
rpm -e --nodeps centos-release centos-logos
yum -y install oraclelinux-release oracle-logos
yum -y upgrade
rpm -qa --qf '%{NAME}:%{VENDOR}\n' |  grep  CentOS >> centospacks
cat centospacks | awk -F":" '{print $1}' >> centospacks2
yum -y reinstall --enablerepo=ol7_optional_latest `cat centospacks2`
yum -y update --enablerepo=ol7_optional_latest `cat centospacks2`
rm -f centospacks
rm -f centospacks2
reboot

 

内容的にGCEに依存したものではないので、Windows AzureやEC2等他のクラウドでも

使えると思います。

(AzureやEC2は、Oracle Linux 7のイメージあるので不要ですが)

手っ取り早くOracle Linux 7を使いたい時にはいかがでしょうか?

Google Compute Cloud で Oracle Linux 6.xを使う

以下の関連ネタとなりますが、Google Compute Cloud で Oracle Linux 6.xを使う

方法です。

Microsoft Azureで最新のOracle Linux 6.xを使う - KNOPP’s blog

 

とは言っても、そんなにいばるような話しでもなく、

centos-6のインスタンスを立ち上げた後、Oracleから提供されている

CentOS → Oracle linux 変換スクリプトを使う方法です。

 

sudo su -

#centos-release-SCLが残っていると centos2ol.shが失敗するのでremoveしておく。
yum remove centos-release-SCL
curl -O https://linux.oracle.com/switch/centos2ol.sh
sh centos2ol.sh
yum upgrade
reboot

 

 

Microsoft Azureで最新のOracle Linux 6.xを使う

Microsoft AzureではOracle Linux 6.4が提供されていますが、

そのままでは、yum updateすることができません。

yum updateすると以下のようなエラーが出ます。

 

 

Transaction Summary
================================================================================
Install 6 Package(s)
Upgrade 153 Package(s)

Total size: 155 M
Downloading Packages:
Running rpm_check_debug
ERROR with rpm_check_debug vs depsolve:
kernel-headers is needed by glibc-headers-2.12-1.149.el6_6.9.x86_64
kernel-headers >= 2.2.1 is needed by glibc-headers-2.12-1.149.el6_6.9.x86_64
kernel-uek is needed by oracle-rdbms-server-12cR1-preinstall-1.0-13.el6.x86_64
kernel-uek is needed by oracle-rdbms-server-11gR2-preinstall-1.0-11.el6.x86_64
** Found 4 pre-existing rpmdb problem(s), 'yum check' output follows:
glibc-headers-2.12-1.107.el6_4.4.x86_64 has missing requires of kernel-headers
glibc-headers-2.12-1.107.el6_4.4.x86_64 has missing requires of kernel-headers >= ('0', '2.2.1', None)
oracle-rdbms-server-11gR2-preinstall-1.0-7.el6.x86_64 has missing requires of kernel-uek
oracle-rdbms-server-12cR1-preinstall-1.0-8.el6.x86_64 has missing requires of kernel-uek
Your transaction was saved, rerun it with: yum load-transaction /tmp/yum_save_tx-2015-07-20-03-390yz8UI.yumtx

 これは、依存関係にあるパッケージがなぜかインストールされていないため、おきるようです。

以下を実施することでupdateできます。

sudo yum -y remove oracle-rdbms-server-11gR2-preinstall-1.0-7.el6.x86_64
sudo yum -y remove oracle-rdbms-server-12cR1-preinstall-1.0-8.el6.x86_64
sudo yum -y install kernel-headers
sudo yum -y update

あとはrebootすれば、最新(執筆時点では6.7)になります

 

Deploying Scalable Oracle RAC on Amazon EC2 の考察

JPOUG Advent Calender 2015(https://jpoug.doorkeeper.jp/events/33345) の6日目
AWS Advent Calendar 2015 (http://qiita.com/advent-calendar/2015/aws) の6日目

のクロスエントリです。


とうとうAWSからOracle RAC on Amazon EC2の手順が公開されました。
Deploying Scalable Oracle RAC on Amazon EC2


ここ数年 Oracle RAC on Amazon EC2を考え続けてきた身としては、言及しないわけにはまいりません。
本当はかっちり検証したいのですが、時間がとれなかったので、チュートリアルから読み取れる内容を記載します。
実際に検証した訳ではないので、記載内容が正しくない場合がありますのでご承知おきください。


まず、Oracle RAC on Amazon EC2を作る上で障害となるのは以下です。



1.publicネットワークのVIP(仮想IP)
EC2のネットワーク(VPC)は物理ネットワークと異なり、AWS側でARPが管理されており、
設定されたIPでしか通信ができません。
OS(RAC)側で勝手にIPを振っても他マシンからそのIPへ通信をすることができないのです。
つまり、VIPのフェールオーバができません。


2.internalネットワークのマルチキャスト
EC2のネットワーク(VPC)は物理ネットワークと異なり、マルチキャストがサポートされていません。
したがって、Oracle RACのinternalネットワーク要件を満たしません。


3.共有ディスク
現時点では、共有ディスクに相当するものは正式に提供されていません。


では、どうやって1〜3をクリアしているか?



1.publicネットワークのVIP(仮想IP)
AWS API(aws ec2 assign-private-ip-addresses)を実行するスクリプトOracle Clusterwareのリソースとして登録しているようです。
Oracle Clusterwareがノードの障害を検知すると、/etc/oracle/ec2_vip_failover.shを実行し、
その延長でaws ec2 assign-private-ip-addressesが呼ばれ、VIP/Scan VIPが障害が発生していないノードに付与されるようです。<該当部分抜粋>

oracle@myracnode01$ crsctl add resource myrac02-vip.ec2 -type cluster_resource -attr "CHECK_INTERVAL=10,\
ACTION_SCRIPT=/etc/oracle/ec2_vip_failover.sh,PLACEMENT=favored,HOSTING_MEMBERS=myracnode01 myracnode02,\
AUTO_START=always,START_DEPENDENCIES=hard(intermediate:ora.myracnode02.vip),RELOCATE_BY_DEPENDENCY=1,\
STOP_DEPENDENCIES=hard(intermediate:ora.myracnode02.vip)"


以前、aws ec2 assign-private-ip-addressesをうまく使って、RACを作れないか検討したことがあるんですが、
リソース登録までは思いつかず断念したことがあるので、ちょっと悔しいです。。。


2.internalネットワークのマルチキャスト
これは、n2nというVPNソフトウェアを使用し、実現しています。
以前、当ブログで紹介したOpenVPN/tincでの実現と基本は変わりません。
iSCSI ノード#1にsupernode(n2n仮想ネットワークの経路情報を持つサーバ)
DB ノード#1,#2がそれぞれn2nクライアントの構成のようです。
n2nは、通信自体はPeer to Peerで行うとされていますので、VPNソフトウェアの中では比較的パフォーマンスが良いようです。
(とは言っても、実ネットワークの半分程度のスループットですが)
https://www.buckhill.co.uk/blog/how-to-enable-broadcast-and-multicast-on-amazon-aws-ec2


3.共有ディスク
iSCSIを用いています。
以前当ブログで紹介した手順と基本は変わりません。
冗長性?を意識しているのかiSCSIサーバを二つ用意しているようです。


では、この構成は実運用に耐えうるのかというと、冗長性が確保できていないような。。。。
(以下ちょっと自信がないんので、ツッコミお待ちしてます)



n2n・・・・ iSCSI ノード#1がsupernodeであるため、このサーバに障害が起きるとn2nの仮想ネットワーク全体に影響がでるため、ここが単一障害点となると思います。
(n2nは詳しくないので、自信ないですが、、、、)


iSCSI・・・・ 2台構成ではダメなハズです。
Oracle Clusterwareファイルの場合、3つのディスク・デバイスまたは3つの障害グループが標準冗長性のディスク・グループの最小要件です。」(マニュアル抜粋)
なので、3つの障害グループを2つのiSCSIサーバに構成するとなると2,1の分け方になり、2つの障害グループを割り当てたiSCSIサーバに障害が発生すると
Oracle Clusterwareは稼働できません。
2つの障害グループを割り当てたiSCSIサーバが単一障害点になると思います。



以上、実運用には対障害性でもう一歩と言う気がしますが、
AWS API(aws ec2 assign-private-ip-addresses)を実行するスクリプトOracle Clusterwareのリソースの組み合わせは
かなり面白いアイデアなので、もう少し良い構成がないか検討したいなーと思います。

CentOS7でxrdpを使う

CentOS7でxrdp(+Xfce )を使う手順メモ

sudo yum -y install epel-release
#sudo yum -y group install "GNOME Desktop"
sudo yum -y --enablerepo=epel groupinstall Xfce
sudo yum -y install xrdp
sudo systemctl enable xrdp

#https://bugzilla.redhat.com/show_bug.cgi?id=1177202
sudo chcon -t bin_t /usr/sbin/xrdp /usr/sbin/xrdp-sesman

#http://hiroom2.jimdo.com/2015/06/13/xrdp%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95/#sec-3-2

cat > ~/.Xclients <<EOF
#!/bin/bash
exec xfce4-session
EOF
chmod +x ~/.Xclients

Oracle RAC on Docker 解説

記事の内容と直接関係しませんが、まずは、宣伝から


************************
まだ席に余裕がありますので、興味ある方は是非
JPOUG> SET EVENTS 20151017
https://jpoug.doorkeeper.jp/events/30023


夜会(懇親会)もまだ席に余裕があります
https://jpoug.doorkeeper.jp/events/31847
***********************



以前公開したRAC on Docker ですが、
イメージ公開するだけ公開して解説してなかったので、技術的(というかハマりどころ)を記載します。


ちょっと前(docker-1.6)時点で検証したときの情報ですが、現時点でもあまり変わってないと思います。


・共有ディスク
→loopデバイス(/dev/loopXX)を共有デバイスとして使用可能


・ネットワーク
netns機能を使用
参考URL
http://enakai00.hatenablog.com/entry/20140424/1398321672


・AUFSは使わない
AUFSを使うとAlertログが上手く出力されないようなので、aufsは使わない


・getty無効化
コンテナを --privileged=true /sbin/init で起動すると getty/agettyがCPU100%で張り付いてしまいます。
今回の手順では、getty/agettyを無効化しています。


・コンテナ内では直接hostsファイルを弄れない
コンテナ内では直接hostsファイルを弄れないようなので、ローカルにdnsmasqを立てて、そこを参照しています

参考URL
https://github.com/yasushiyy/vagrant-docker-oracle12c-rac


・コンテナ内では、/dev/shm が64MBで固定されている
/dev/shmをマウントしなおせば回避できるので、/dev/shmをマウントしなおすinitscriptを書いて対応しています。